design a filter using only fft
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I want to design a low pass filter without any toolboxes, only using fft. My plan is, that i read a wav file into matlab, then i fft it and i reload into a 1D vektor. I have to zeroing for example the first 100 elements. Then ifft it. Unfortunatelly doesnt work. Anyone can help me in the m code or any idea how can i do it?
0 Kommentare
Akzeptierte Antwort
Wayne King
am 26 Sep. 2012
Bearbeitet: Wayne King
am 26 Sep. 2012
From your description it sounds like you are not also zero-ing out the complex conjugates. You are zero-ing out only the "positive" frequencies, but you also have to zero the corresponding negative frequencies. I'll illustrate this in the following example with two sine waves in noise. I'll remove the 200-Hz sine wave.
t = 0:0.001:1-0.001;
x = cos(2*pi*100*t)+cos(2*pi*200*t)+randn(size(t));
% get rid of the 200-Hz component.
xdft = fft(x);
% 200 Hz lives at bin 201
xdft(201)
% but look at bin length(x)-201+2
xdft(length(x)-201+2)
You see the difference between those is that one is the complex conjugate of the other. You have to zero them both.
xdft([201 length(x)-201+2]) = 0;
xrec = ifft(xdft);
plot(abs(fft(xrec)))
You see now that the 200-Hz component is gone.
2 Kommentare
Wayne King
am 26 Sep. 2012
Yes, the principle is the same. I'm not advocating this as a way of filtering a signal, but the point is, you have to remove both the "negative" and "positive" frequencies before you take the inverse Fourier transform.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Fourier Analysis and Filtering finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!