matlab的FFT函数介绍

更新时间:2024-02-01 17:35:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

matlab的FFT函数

句法 Y = fft(X)

Y = fft(X,n) Y = fft(X,[],dim)

Y = fft(X,n,dim) book.iLoveMatlab.cn

n为离散傅里叶变换的点数,如果取n为2的幂函数,则可进行快速傅里叶变换。当x的长度小于n时,x会被补零填充到与n同样的长度;当x的长度大于n时,x会被截断。如果x是个矩阵,列的长度将会以同样的方式调整,fft会对每列进行傅里叶变换,并返回一个相同维数的矩阵。 book.iLoveMatlab.cn dim可适应于任意维度的fft运算。 《 = fft(X,n,dim) 定义如下:

相关的一个例子:常用的傅立叶变换是找到在嘈杂的时域信号下掩埋了信号的频率成分。考虑数据采样在1000赫兹。现有一信号由以下部分组成,50赫兹振幅为0.7的正弦和120赫兹振幅为1的正弦并且受到一些零均值的随机噪声的污染:

Fs = 1000; % 采样频率 T = 1/Fs; % 采样时间 L = 1000; % 总的采样点数

t = (0:L-1)*T; % 时间序列(时间轴)

%产生一个幅值为0.7频率为50HZ正弦+另外一个信号的幅值为1频率为120Hz的正弦信号

x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); y = x + 2*randn(size(t)); % 混入噪声信号 plot(Fs*t(1:50),y(1:50)) %画出前50个点

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

这在寻找原始信号的频率成分上是很难确定的。转换到频域,噪音信号Y的傅立叶变换采取快速傅立叶变换(FFT):

NFFT = 2^nextpow2(L); % 求得最接近总采样点的2^n,这里应该是2^10=1024 Y = fft(y,NFFT)/L; %进行fft变换(除以总采样点数,是为了后面精确看出原始信号幅值) f = Fs/2*linspace(0,1,NFFT/2+1);%频率轴(只画到Fs/2即可,由于y为实数,后面一半是对称的)

% 画出频率幅度图形,可以看出50Hz幅值大概0.7,120Hz幅值大概为1. plot(f,2*abs(Y(1:NFFT/2+1)))

title('Single-Sided Amplitude Spectrum of y(t)') xlabel('Frequency (Hz)') ylabel('|Y(f)|')

这样就可以很清楚的看到,信号在50Hz和120Hz处有较大的频谱分布,其余频谱分布是由于噪声造成的

主要有两点注意的地方:

1、从公式上看,matlab的fft序号是从1到N,但是绝大多数教材上是从0到N-1。

2、Y=fft(x)之后,这个Y是一个复数,它的模值应该除以(length(x)2),才能得到各个频率信号实际幅值。

本文来源:https://www.bwwdw.com/article/pyfw.html

Top