Analizuje programy zawarte w książce "Cyfrowe przetwarzanie sygnałów" Zielińskiego.
Moje pytanie związane jest z metodą okien. Chciałabym uzyskać przyczynowy filtr Hilberta przesuwający w fazie o 90 stopni.
W metodzie tej wyznacza się odpowiedź impulsową filtru, wymnaża przez funkcję okna czasowego, przesuwa o M próbek w prawo na osi n i pobiera 2M+1 próbek. Długość filtru 2M+1. Pozwala to na uzyskanie filtru przyczynowego.
Poniżej zamieszkam kod programu.
Dla filtru nieprzyczynowego faza filtru Hilberta jest stała i wynosi -90stopni. Jeżeli wybierze się opcję filtru nieprzyczynowego otrzymuje się inny wykres charakterystyki fazowej. Dlaczego? Co zrobić, żeby uzyskać przyczynowy filtr Hilberta przesuwający w fazie o 90 stopni?
Z góry dziekuję za odpowiedź.
Moje pytanie związane jest z metodą okien. Chciałabym uzyskać przyczynowy filtr Hilberta przesuwający w fazie o 90 stopni.
W metodzie tej wyznacza się odpowiedź impulsową filtru, wymnaża przez funkcję okna czasowego, przesuwa o M próbek w prawo na osi n i pobiera 2M+1 próbek. Długość filtru 2M+1. Pozwala to na uzyskanie filtru przyczynowego.
Poniżej zamieszkam kod programu.
clear all;
M=20;
typ=1; % 1 hilberta %2 rozniczkujacy
N=2*M+1;
n=1:M;
% wygeneruj teoretyczne odpowiedzi impulsowe
if (typ==1)h=(2/pi)*sin(pi*n/2).^2./n; end % polowa odpowiedzi impulsowej filtru
if (typ==2) h= cos(pi*n)./n; end
if(typ==1 | type==2)
h= [-h(M:-1:1) 0 h(1:M)];
end
% wymnożenie z funkcją okna
w=blackman(N);
w=w';
hw=h.*w;
% oblicz widmo
% dla filtra nieprzyczynowego
m=-M:1:M;
% dla filtru przyczynowego
%m=0:N-1;
NF=500;
fn=0.5*(1:NF-1)/NF;
for k=1:NF-1
H(k)=sum(h.*exp(-j*2*pi*fn(k)*m));
HW(k)=sum(hw.*exp(-j*2*pi*fn(k)*m));
end
stem(m,h); grid; title('h(n)'); xlabel('n'); pause
stem(m,hw); grid;title('hw(n)'); xlabel('n'); pause
plot(fn,abs(H)); grid; title('|H(fn)|'); xlabel('f norm'); pause
plot(fn,abs(HW)); grid; title('|HW(fn)|'); xlabel('f norm'); pause
plot(fn,rad2deg(unwrap(angle(H)))); grid; title('kąt H(fn)[rd]'); xlabel('f norm'); pause
plot(fn,rad2deg(unwrap(angle(HW)))); grid; title('kąt HW(fn)[rd]'); xlabel('f norm'); pause
Dla filtru nieprzyczynowego faza filtru Hilberta jest stała i wynosi -90stopni. Jeżeli wybierze się opcję filtru nieprzyczynowego otrzymuje się inny wykres charakterystyki fazowej. Dlaczego? Co zrobić, żeby uzyskać przyczynowy filtr Hilberta przesuwający w fazie o 90 stopni?
Z góry dziekuję za odpowiedź.