# FFT plot not matching the output wave

I had implemented a $4^{\rm th}$ order Chebyshev I Band Pass IIR Digital Filter in Simulink to separate out $148\textrm{ Hz}$ frequency from the sum of the following waves.

Input Waves

$$\begin{array}{|c|c|c|c|c|}\hline \text{Amplitude} & \text{Bias} & \text{Frequency} & \text{Phase}& \text{Sampling Rate} \\ \hline 14 & 0 & 1\textrm{ Hz} & 0 & 1000\textrm{ Hz}\\ 15 & 0 & 148\textrm{ Hz} & 0 & 1000\textrm{ Hz}\\ 12 & 0 & 50\textrm{ Hz} & 0 & 1000\textrm{ Hz}\\ 10 & 0 & 150\textrm{ Hz} & 0 & 1000\textrm{ Hz}\\ 13 & 0 & 100\textrm{ Hz} & 0 & 1000\textrm{ Hz}\\ \hline \end{array}$$

This is the input FFT. The FFT's seems to indicate that the filter is doing its job but the output wave has a low frequency component (as seen on scope) which is not reflected in the FFT.

This is the output wave and FFT

function l = fft_plot(x,Fs)
x=x.data;
l=size(x,1)-1;
y=fft(x);
p2 = abs(y/l);
p1 = p2(1:l/2+1);
p1(2:end-1) = 2*p1(2:end-1);
f=Fs*(0:(l/2))/l;
plot(f,p1);
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|');
l;


This is the function I use to plot the the frequencies.

Can someone help me identify the source of this discrepancy?

• Please include a question. Jun 2, 2017 at 14:49
• I've included the question in the edit. Jun 5, 2017 at 4:54

With respect to your comment on a low frequency component not appearing on the FFT:

What you are seeing is not a low frequency component but a low frequency modulation of the 148 Hz main signal. This originates from leftovers of the 150 Hz signal, and you can see it very clearly on the FFT plot you provided.

You may check the Wikipedia entry on beat frequency.

• How can I remove this low frequency i.e the beat frequency from showing in the output? Also why is the beat frequency not showing up in the fft plot? Jun 5, 2017 at 5:12