Projektuję filtr cyfrowy Butterwortha typu BandStop metodą biliniową i chcę otrzymać charakterystykę fazową jak na dole, a dostaję tę na górze. Dodam, że tą samą metodą otrzymuję prawidłowe charakterystyki amplitudowe i fazowe typów LP, HP i BP.
Kod programu:
![[Matlab] Filtr Butterwortha BandStop - niepoprawna charakterystyka fazowa [Matlab] Filtr Butterwortha BandStop - niepoprawna charakterystyka fazowa](https://obrazki.elektroda.pl/8650299800_1492885680_thumb.jpg)
Kod programu:
Spoiler:
fp1 = input ('Wprowadź fp1 ');
fs1 = input ('Wprowadź fs1 ');
fs2 = input ('Wprowadź fs2 ');
fp2 = input ('Wprowadź fp2 ');
fp1 = 2*fpr*tan(pi*fp1/fpr)/(2*pi)
fp2 = 2*fpr*tan(pi*fp2/fpr)/(2*pi)
fs1 = 2*fpr*tan(pi*fs1/fpr)/(2*pi)
fs2 = 2*fpr*tan(pi*fs2/fpr)/(2*pi)
[n, Wn] = buttord([fp1 fp2], [fs1 fs2], apass, astop, 's');
[b, a] = butter(n, (Wn*2*pi), 'stop', 's');
Hs = tf(b, a)
freqs(b, a)
[bc, ac] = bilinear(b, a, fpr);
Hz = tf(bc, ac, 1/fpr) %Hz = tf(ac, bc, 1/fpr)
fvtool(bc, ac); %filter visualization tool
H = dfilt.df2(bc, ac)
realizemdl(H)
fp1 = input ('Wprowadź fp1 ');
fs1 = input ('Wprowadź fs1 ');
fs2 = input ('Wprowadź fs2 ');
fp2 = input ('Wprowadź fp2 ');
fp1 = 2*fpr*tan(pi*fp1/fpr)/(2*pi)
fp2 = 2*fpr*tan(pi*fp2/fpr)/(2*pi)
fs1 = 2*fpr*tan(pi*fs1/fpr)/(2*pi)
fs2 = 2*fpr*tan(pi*fs2/fpr)/(2*pi)
[n, Wn] = buttord([fp1 fp2], [fs1 fs2], apass, astop, 's');
[b, a] = butter(n, (Wn*2*pi), 'stop', 's');
Hs = tf(b, a)
freqs(b, a)
[bc, ac] = bilinear(b, a, fpr);
Hz = tf(bc, ac, 1/fpr) %Hz = tf(ac, bc, 1/fpr)
fvtool(bc, ac); %filter visualization tool
H = dfilt.df2(bc, ac)
realizemdl(H)