Witam, chcę odfiltrować z sygnału pewną częstotliwość przy pomocy fft. Wykonuję filtrowanie w matlabie. Problem pojawia się przy sprawdzeniu. Jeśli analizuję cały filtrowany sygnał wszystko jest w porządku ale jeśli poddam analizie fragment sygnału odfiltrowana częstotliwość pojawia się ponownie. Myślałem że jest to kwestia nieprecycyjnego wyznaczenia częstotliwości i próbowałem usuwać całe pasmo lecz efekty były podobne. Czy ktoś może mi podpowiedzieć gdzie tkwi błąd? Byłbym bardzo wdzięczny. Pod spodem zamieszczam mój kod.
Proszę umieszczać kod w znacznikach [code] - dodałem.
[Dr.Vee]
Code:
% sygnal- sygnał dźwiękowy ( testowy o długości 1000 próbek)
% f_sampling- częstotliwośc próbkowania
% f_usun- częstotliwość usuwana
f_sampling=44100;
% OBRÓCENIE WEKTORA WE WŁAŚCIWA STRONĘ
sygnal=s1;
r=size(sygnal); % rozmiar sygnału
if (r(1)<r(2))
sygnal=sygnal';
r=size(sygnal);
end
r=r(1);
% TRANSFORMATA
y1 = fft(sygnal);
l=length(y1);
T=l/f_sampling;
m = abs(y1);
f =(0:l-1)/T;
p=l/2;
% USUWAM CZĘSTOTLIWOŚĆ f_usun
f_usun=1000;
i=1;
while (f(i)<f_usun)
i=i+1;
end
y1(i)=0;
y1(l-i+2)=0;
subplot(3,1,1);
plot(f(1:p),abs(y1(1:p)));
odfiltrowany=ifft(y1);
odfiltrowany=real(odfiltrowany);
% SPRAWDZAM DLA CAŁEGO SYGNAŁU
y1 = fft(odfiltrowany);
l=length(y1);
p=l/2;
T=l/f_sampling;
m = abs(y1);
f =(0:l-1)/T;
subplot(3,1,2);
plot(f(1:p),abs(y1(1:p)));
% SPRAWDZAM DLA CZĘŚCI SYGNAŁU <<<<<<BŁĄD
len=length(odfiltrowany);
l=len/2;
y1 = fft(odfiltrowany(1:l));
l=length(y1);
p=l/2;
T=l/f_sampling;
m = abs(y1);
f =(0:l-1)/T;
subplot(3,1,3);
plot(f(1:p),abs(y1(1:p)));
Proszę umieszczać kod w znacznikach [code] - dodałem.
[Dr.Vee]