MATLAB 中fft 函数用法、性质、特性、缺陷全面深入解析(含程序) 前言 目前网络上在信号处理方面对 fft 函数使用泛滥,但大多数人根本就不了解它的性能,使用方法也是千奇百怪,各种程序代码鱼龙混杂,乱七八糟,误导了很多人,所以我在这里进行一下全面的演示说明,希望后来人能够少走弯路。 fft 信号处理中获得时域信号的频域的方法叫做傅里叶变换,但教材上的变换都是理论推导的理想、连续、无限情况,在实际的 matlab 计算中,必须是实际、离散、有限的计算,所以实现起来比较麻烦,需要各种转换。fft 函数就是为了实现快速傅里叶变换而设计的计算机算法,与传统傅里叶变换的步骤不完全一样,但通过适当的变换也能够获得时域信号的频域图形。 fft 只是数值计算,不是理论推导,所以频域图形肯定有误差,但我们能够通过适当调整变换参数来提高频域图形的精确性。 建议大家能够理论推导的傅里叶变换就直接在纸上推导好了再用matlab 直接画出来就是了。所以不是因为 fft 精确,而是因为 fft 能够对大数据复杂信号变换计算快,自由度可控制性高,所以使用的人才多。 1 2L2L12L22L 对称对称1:L点 0:freqres:Fs-freqres 频率特殊点 fft(x)图示 fft 的一些定性问题解析 时域信号 x 有多少个点,fft(x)就有多少个点,这时的 fft(x)之所以是对称的,是因为 fft的方法是进行周期计算从[−2π,2π],所以后面的一半要翻转到负半轴,是负频率。所以有用的是 fft(x)的前一半的点。 我是经过各项测试实验,才完全明白 fft 的性能。 利用程序解释如下: %这里的 fft 变换有补零 clear all; Fs = 1e3; %这是原始时域信号 x 的采样频率 multiple=0.6; %x 进行 fft 前的补零倍数,可以增加频率分辨率 time=2; t = 0:1/Fs:time-1/Fs; %这个会影响 x 的采样点数,当然点数越多,频域越精确越平滑 %x = 1.5*cos(2*pi*100*t)+3*sin(2*pi*202.5*t)+2*sin(2*pi*1250*t); x = 1.5*cos(2*pi*100*t)+3*sin(2*pi*201.25*t); %频率最小分辨率————————————————- x=[x,zeros(1,length(x)*multiple)]; %{ 注意可以通过对 x 进行补零来增加频率分辨率,只是因为 fft 的周期性计算方法,需要在 后面对 fft(x)后的数据进行幅度值重新计算时,乘以多的零点的倍数,见后面的幅度值计算。 %} %freqres = Fs/length(x); freqres =1/time; %{ x 的频率必须是 freqres 的...