一个简单的仿真FFT程序,在MATLAB 6.5中测试通过。

fs=1000;     %采样率为1000
t=0:1/fs:1;  %时长1s
f1=50;         %信号1频率50Hz
f2=200;       %信号2频率200Hz
x=sin(2*pi*f1*t)+sin(2*pi*f2*t);  %生成含有2个频率的正弦波
subplot(211)
plot(x);
title(‘f1(50Hz)&f2(200Hz)的正弦信号’)
xlabel(‘序列(n)’)
grid on

number=512;    % fft长度
y=fft(x,number);  %求x的fft
n=0:length(y)-1;
f=fs*n/length(y);
subplot(212)
plot(f,abs(y));  %如果不求abs,虚部将被省略
title(‘f1&f2的正弦信号的FFT(512点)’)
xlabel(‘频率Hz’)
grid on

图形如下:

image

加上随机噪声:

x=x+randn(1,length(x));
subplot(211)
plot(x);
title(‘原f1&f2的正弦信号(含随机噪声)’)
xlabel(‘序列(n)’)
grid on

y=fft(x,number);
n=0:length(y)-1;
f=fs*n/length(y);
subplot(212)
plot(f,abs(y));
title(‘原f1&f2的正弦信号(含随机噪声)的FFT(512点)’)
xlabel(‘频率Hz’)
grid on

图形如下:

image