MATLAB快速傅⾥叶变换(fft)函数详解
定义:
The 'i' in the 'Nth root of unity' 是虚数单位
调⽤:
调⽤:
1.  Y = fft(y);
2.  Y = fft(y,N);
式中,y是序列,Y是序列的快速傅⾥叶变换。y可以是⼀向量或矩阵,若y为向量,则Y是y的FFT,并且与y具有相同的长度。若y为⼀矩阵,则Y是对矩阵的每⼀列向量进⾏FFT。
说明:
1.  函数fft返回值的数据结构具有对称性
根据采样定理,fft能分辨的最⾼频率为采样频率的⼀半(即Nyquist频率),函数fft返回值是以Nyqusit频率为轴对称的,Y的前⼀半与后⼀半是复数共轭关系。
2.  幅值
作FFT分析时,幅值⼤⼩与输⼊点数有关,要得到真实的幅值⼤⼩,只要将变换后的结果乘以2除以N即可(但此时零频—直流分量—的幅值为实际值的2倍)。对此的解释是:Y除以N得到双边谱,再乘以2得到单边谱(零频在双边谱中本没有被⼀分为⼆,⽽转化为单边谱过程中所有幅值均乘以2,所以零频被放⼤了)。
3.  基频
若分析数据时长为T,则分析结果的基频就是f0=1/T,分析结果的频率序列为[0:N-1]*f0
4.  执⾏N点FFT
在调⽤格式2中,函数执⾏N点FFT。若y为向量且长度⼩于N,则函数将y补零⾄长度N,若向量y的长度⼤于N,则函数截断y使之长度为N。
注意:
使⽤N点FFT时,若N⼤于向量y的长度,将给频谱分析结果带来变化,应该特别注意。
例⼦:
将对N点FFT进⾏举例,说明当N⼤于向量y的长度时给频谱分析带来的变化。
上图中,左列为信号时域图形,右列为对应信号的频谱图。可以看出当N⼤于向量y的长度时,由于fft⾃动将100s后的信号值补零,原信号实际变为左下⾓的时域图形,所以频率发⽣了变化(增加多种频率的⼩振幅振动,主峰幅值被削弱)。
结论:
使⽤N点FFT时,不应使N⼤于y向量的长度,否则将导致频谱失真。
例⼦程序:
clear all  %清除内存所有变量
close all    %关闭所有打开的图形窗⼝
%% 执⾏FFT点数与原信号长度相等(100点)
% 构建原信号
N=100;  % 信号长度(变量@@@@@@@)
Fs=1;  % 采样频率
dt=1/Fs;  % 采样间隔
t=[0:N-1]*dt;  % 时间序列
xn=cos(2*pi*0.24*[0:99])+cos(2*pi*0.26*[0:99]);
xn=[xn,zeros(1,N-100)];  % 原始信号的值序列
subplot(3,2,1)  % 变量@@@@@@@
plot(t,xn)  % 绘出原始信号
xlabel('时间/s'),title('原始信号(向量长度为100)')  % 变量@@@@@@@
% FFT分析
NN=N;  % 执⾏100点FFT
XN=fft(xn,NN)/NN;  % 共轭复数,具有对称性
f0=1/(dt*NN);  % 基频
f=[0:ceil((NN-1)/2)]*f0;  % 频率序列
A=abs(XN);  % 幅值序列
subplot(3,2,2),stem(f,2*A(1:ceil((NN-1)/2)+1)),xlabel('频率/Hz')  % 绘制频谱(变量@@@@@@@)
axis([0 0.5 0 1.2])  % 调整坐标范围
title('执⾏点数等于信号长度(单边谱100执⾏点)');  % 变量@@@@@@@
%% 执⾏FFT点数⼤于原信号长度
% 构建原信号
N=100;  % 信号长度(变量@@@@@@@)
Fs=1;  % 采样频率
dt=1/Fs;  % 采样间隔
t=[0:N-1]*dt;  % 时间序列
xn=cos(2*pi*0.24*[0:99])+cos(2*pi*0.26*[0:99]);
xn=[xn,zeros(1,N-100)];  % 原始信号的值序列
subplot(3,2,3)  % 变量@@@@@@@
plot(t,xn)  % 绘出原始信号
xlabel('时间/s'),title('原始信号(向量长度为100)')  % 变量@@@@@@@
% FFT分析
NN=120;  % 执⾏120点FFT(变量@@@@@@@)
XN=fft(xn,NN)/NN;  % 共轭复数,具有对称性
f0=1/(dt*NN);  % 基频
f=[0:ceil((NN-1)/2)]*f0;  % 频率序列
A=abs(XN);  % 幅值序列
subplot(3,2,4),stem(f,2*A(1:ceil((NN-1)/2)+1)),xlabel('频率/Hz')  % 绘制频谱(变量@@@@@@@)axis([0 0.5 0 1.2])  % 调整坐标范围
title('执⾏点数⼤于信号长度(单边谱120执⾏点)');  % 变量@@@@@@@
%% 执⾏FFT点数与原信号长度相等(120点)
% 构建原信号
N=120;  % 信号长度(变量@@@@@@@)
Fs=1;  % 采样频率
dt=1/Fs;  % 采样间隔
t=[0:N-1]*dt;  % 时间序列
xn=cos(2*pi*0.24*[0:99])+cos(2*pi*0.26*[0:99]);
xn=[xn,zeros(1,N-100)];  % 原始信号的值序列
subplot(3,2,5)  % 变量@@@@@@@
plot(t,xn)  % 绘出原始信号
xlabel('时间/s'),title('原始信号(向量长度为120)')  % 变量@@@@@@@
% FFT分析
NN=120;  % 执⾏120点FFT(变量@@@@@@@)
XN=fft(xn,NN)/NN;  % 共轭复数,具有对称性
f0=1/(dt*NN);  % 基频
matlab求傅里叶变换
f=[0:ceil((NN-1)/2)]*f0;  % 频率序列
A=abs(XN);  % 幅值序列
subplot(3,2,6),stem(f,2*A(1:ceil((NN-1)/2)+1)),xlabel('频率/Hz')  % 绘制频谱(变量@@@@@@@)axis([0 0.5 0 1.2])  % 调整坐标范围
title('执⾏点数等于信号长度(单边谱120执⾏点)');  % 变量@@@@@@@

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。