MATLAB如何实现傅里叶变换FFT?有何物理意义?
为什么要进行傅立叶变换,究竟有何意义?如何用MATLAB实现快速傅立叶变换?本文从 FFT 的由来开始讲起,然后在 MATLAB 中实现了 FFT 的计算,并给大家详细地解读了 FFT 的变换结果,最后还介绍了 FFT 的一个应用实例。
工具/原料
- MATLAB
准备傅里叶变换的基础知识
-
为什么要进行傅里叶变换?
将时域的信号,变换到频域的正弦信号
正弦比原信号更简单,且正弦函数很早就被充分地研究,处理正弦信号,比处理原信号更简单
正弦信号的频率保持性:输入为正弦信号,输出仍是正弦信号,幅度和相位可能发生变化,但频率与原信号保持一致;只有正弦信号才拥有这样的性质
-
傅里叶变换的类型
非周期连续信号:傅里叶变换
周期连续信号:傅里叶级数
非周期离散信号:离散时间傅里叶变换
周期离散信号:离散傅里叶级数
-
从离散傅里叶级数(DFS) 到离散傅里叶变换(DFT)
从离散傅里叶变换(DFT) 到快速傅里叶变换(FFT)
END
MATLAB中实现FFT的计算
-
Y = fft(x) % x 为一个序列(向量),存放采集信号的数据
Y = fft(x,n) % x 的定义同上,n 定义计算数据的个数
如果n 大于x 的长度,在x 的末尾添加0,使得x 的长度等于n
如果n 小于x 的长度,截取x 中的前n 个数来进行计算
Y 返回fft 的结果,为一个复数序列(向量)
建议:采用第一种格式的用法,并且保证x 的个数为偶数
-
频谱关于中间位置对称(序号位置0 和N/2 除外),MATLAB 的FFT 为对称谱
看MATLAB 中FFT 的频谱,只需要看一半
幅值不受影响,但是实部或虚部的值,会出现0 的情况
看MATLAB 中FFT 的频谱,应该看幅值
-
FFT结果的数据长度:时域N个点-->频域为N/2+1个点
x轴频率点的设置:采样频率为Fs时,频谱图的最高频率为Fs/2(具体请参照采样定理)
综合上述两点:x轴的频率点为:(0:1:N/2)*Fs/N
复数的幅值修正:复数序列Y的幅值,需要进行转换,才能得到与时域中对应信号的幅值。
复数的相位:计算Y的相位,得到与时域中对应信号的相位值
-
进行傅里叶变换FFT的两个基本问题
采样频率为多少合适?
-根据采样定理:Fs≥2Fc,实际应用中需要更大的Fs
需要采集多少个点?
-频谱图中,频率的坐标间隔(频率分辨率):Fs/N(Page13)
-Fs=2000Hz,N=100,Fs/N=20
-原信号含有60Hz,72Hz频率成分,(72–60)<20x
-N增大至1000,Fs/N=2,(72–60)>2√
END
注意事项
- 傅里叶变换是信号处理的基础内容
- 推荐阅读郑君里老先生的《信号与系统》