Real time FFT & IFFT with low pass filter
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I am processing the signal from MPU6050. Applying FIR filter in the frequency domain and then taking IFFT to get filtered signal but getting some spikes in the output signal. Searched a lot about it and found here exit spectral leakage. Found some solutions like zero paddings and windowing but nothing is working. Can some one take a look and let me know what I am doing wrong here.
Here is what I am getting
Zoom in graph
More Zoom
Complete Code
close all; clear all ;clc; delete(instrfindall);
arduino=serial('COM6','BAUD', 115200);
fopen(arduino);
java.lang.Thread.sleep(0.01); % in mysec!
samples = pow2(nextpow2(5000))
sig = []; out_sig =[0]; tic; G=0; trying=0; pingpong = 0;
while 1
idn = fscanf(arduino);
xx = str2double(idn);
if isnan(xx)
fclose(arduino);
java.lang.Thread.sleep(1); % in mysec!
fopen(arduino);
java.lang.Thread.sleep(1); % in mysec!
trying = trying + 1
continue
else
sig = [sig xx];
end
if length(sig)>samples - 1
break
end
end
fclose(arduino);
plot(sig,'g'); %---------------------------->Orginal signal <---------------------------
hold on
PG = plot(out_sig,'k'); %---------------------------->Output signal <---------------------------
PG.YDataSource = 'out_sig';
SegmentLength = pow2(nextpow2(1000)) % Transform length to next pow of 2
Fs = SegmentLength;
wiin = hann(64,'symmetric');
filtcoeff = fir1(63, 20/Fs, 'low', wiin, 'scale');
firfilterimpresp = impz(filtcoeff);
filterffte = fft(firfilterimpresp,SegmentLength); % FFT of impulse response of filter/system
ChunkStart = 1;
ChunkEnd = SegmentLength;
sigblock = [];
for t = 1:samples/SegmentLength
sigblock = sig(ChunkStart:ChunkEnd);
blockfft = fft(sigblock,SegmentLength);
out_sigg = real(ifft(blockfft.*filterffte'));
out_sig = [out_sig out_sigg];
refreshdata
drawnow
ChunkStart = ChunkEnd;
ChunkEnd = ChunkEnd + SegmentLength -1 ;
end
2 Kommentare
Star Strider
am 22 Jul. 2019
If you want to filter in the frequency domain, the Signal Processing Toolbox has the fftfilt function.
Antworten (0)
Siehe auch
Kategorien
Mehr zu Digital Filter Analysis 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!