Matlab中的FFT使用说明

Matlab中的FFT使用说明
Matlab中的FFT使用说明

FFT是Fast Fourier Transform(快速傅里叶变换)的简称,FFT算法在MATLAB 中实现的函数是Y=fft(x,n)。刚接触频谱分析用到FFT时,几乎都会对MATLAB 的fft函数产生一些疑惑,下面以看一个例子(根据MATLA帮助修改)。

Fs = 2000; % 设置采样频率

T = 1/Fs; % 得到采用时间

L = 1000; % 设置信号点数,长度1 秒

t = (0:L-1)*T; % 计算离散时间,

% 两个正弦波叠加

f1 = 80;

A1 = 0.5; % 第一个正弦波100Hz,幅度0.5

f2

= 150;

A2 = 1.0 ; % 第2个正弦波150Hz,幅度 1.0

A3 = 0.5; % 白噪声幅度;

x = A1*sin(2*pi*f1*t) + A2*sin(2*pi*f2*t); % 产生离散时间信号;

y = x + A3*randn(size(t)); % 叠加噪声;

% 时域波形图

subplot(2,1,1)

plot(Fs*t(1:50),x(1:50))

title('Sinusoids Signal')

xlabel('time (milliseconds)')

subplot(2,1,2)

plot(Fs*t(1:50),y(1:50))

title('Signal Corrupted with Zero-Mean Random Noise')

xlabel('time (milliseconds)')

NFFT = 2A nextpow2(L); % 设置FFT点数,一般为2 的N次方,如1024,512 等Y = fft(y,NFFT)/L; % 计算频域信号,

f = Fs/2*linspace(0,1,NFFT/2+1);

%频率离散化,fft后对应的频率是-Fs/2到Fs/2,由NFFT个离散频点表示

% 这里只画出正频率;

% Plot single-sided amplitude spectrum.

figure;

plot(f,2*abs(Y(1:NFFT/2+1)));

% fft 后含幅度和相位,一般观察幅度谱,并把负频率加上去,

title('Single-Sided Amplitude Spectrum of y(t)') xlabel('Frequency (Hz)')

ylabel('|Y(f)|') 运行结果时域波形图如图所示: Sinusoids Signal 斗 2 0 -2 0 5 10 15 20 25 30 35 4Q 45 50 time (milliseconds)

time (mnliseconds) Signal Corrupted with Zero-Mean Random Noise 幅度谱如下:

Frequency (Hz)

由图可见,80Hz 的信号幅度为 0.4762,频率为80.08 ,150Hz 的信号频率为150.4,幅度0.9348 , 存在误差。

去掉白噪声后,结果为:

Single-Sided Amplitude Spectrum of y(t)

0.9

0.8

0.7

0.6 牙

0.5

Q.4

0.3

0,2

0.1 Single-Sided Amplitude Spectrum of y(t) X : 150.4 Y : 0 9391

X: 0O.OB Y; 0 4971

0 1G0 200 300 400 500 600 700 800 900 1000

Frequency (Hz)

可见幅度精度提高了,但频率任然有误差。如果修改

产生的复查,也没有噪声污染,结果如下:

可见结果与信号完全一致。

Fs为2048, L为4096,此时没有补0

相关主题
相关文档
最新文档