How to filter and FFT raw data

22 views (last 30 days)
Can someone help me with the matlab code:
I have a raw data (attached) from acoustic sensor. I want to filter the signal and carry out fft then plot the graph.

Accepted Answer

Star Strider
Star Strider on 28 Aug 2019
I am not certain what you want to do.
One approach:
D = load('exp 8b.txt');
t = D(:,1);
s = D(:,2);
figure
plot(t, s)
grid
title('Original Signal')
xlabel('Time')
ylabel('Amplitude')
sm = mean(s);
L = size(D,1);
Ts = mean(diff(t));
Fs = 1/Ts;
Fn = Fs/2;
FTs = fft(s-sm)/L;
Fv = linspace(0, 1, fix(L/2)+1)*Fn;
Iv = 1:numel(Fv);
figure
plot(Fv, abs(FTs(Iv))*2)
grid
title('Original Signal')
xlabel('Frequency')
ylabel('Amplitude')
sdn = wdenoise(s); % Denoise (Wavelet Toolbox)
figure
plot(t, sdn)
grid
title('Denoised Signal')
xlabel('Time')
ylabel('Amplitude')
Wp = [859 862]/Fn; % Passband Normalised
Ws = [855 865]/Fn; % Stopband Normalised
Rp = 1; % Passband Ripple (Irrelevant in Butterworth)
Rs = 50; % Stopband Attenuation
[n,Wp] = ellipord(Wp,Ws,Rp,Rs); % Order Calculation
[z,p,k] = ellip(n,Rp,Rs,Wp); % Zero-Pole-Gain
[sos,g] = zp2sos(z,p,k); % Second-Order Section For Stability
figure
freqz(sos, 2^16, Fs) % Filter Bode Plot
s_filt = filtfilt(sos, g, s); % Filter Signal
figure
plot(t, s_filt)
grid
title('Filtered Signal')
xlabel('Time')
ylabel('Amplitude')
s_filt = filtfilt(sos, g, sdn); % Filter Denoised Signal
figure
plot(t, s_filt)
grid
title('Filtered Denoised Signal')
xlabel('Time')
ylabel('Amplitude')
Your signal has significant broadband noise, and a wavelet denoising step is the only way to deal with that. See the documentation for wdenoise (R2017b and later releases) for details on the function.
There appears to be a frequency peak at about 861 Hz, and the bandpass filter here selectively (and efficiently) filters the region from 859 Hz to 862 Hz.
Expertiment to get the result you want.
  2 Comments
Peter Odedeyi
Peter Odedeyi on 29 Aug 2019
Thanks so much star strider it worked!. Indeed you are a star. Hope i can always call upon you.
Star Strider
Star Strider on 29 Aug 2019
As always, my pleasure!
Of course you can!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!