
MATLAB FFT 频谱分析实战3步校准横纵坐标还原真实幅值与频率在信号处理领域快速傅里叶变换FFT是将时域信号转换到频域的重要工具。然而许多工程师在使用MATLAB进行FFT分析时常常对频谱图的横纵坐标物理意义感到困惑。本文将提供一个完整的、可复用的MATLAB脚本从信号生成、FFT计算到频谱图绘制全流程并重点解释横坐标频率与纵坐标幅值的换算公式。1. 信号生成与FFT基础让我们从一个简单的例子开始生成包含50Hz和120Hz两个频率成分的信号采样频率为1000Hz采样点数为1500。Fs 1000; % 采样频率 (Hz) L 1500; % 采样点数 T 1/Fs; % 采样间隔 (s) t (0:L-1)*T; % 时间向量 (s) % 生成信号0.7幅值的50Hz正弦波 1幅值的120Hz正弦波 X 0.7*sin(2*pi*50*t) sin(2*pi*120*t);执行FFT计算时MATLAB的fft函数返回的是复数结果包含幅度和相位信息Y fft(X); % 计算FFT2. 频率轴校准从点数到物理频率FFT结果的横坐标需要从简单的点数转换为实际的物理频率。关键公式如下f (0:L-1)*(Fs/L)这个公式的推导基于Nyquist采样定理FFT结果包含L个点频率分辨率为Fs/L第k个点对应的频率为k*(Fs/L)对于实际应用我们通常只需要显示单边频谱0到Fs/2P2 abs(Y/L); % 双侧频谱幅值 P1 P2(1:L/21); % 单边频谱取前半部分 P1(2:end-1) 2*P1(2:end-1); % 非直流分量幅值加倍 f (0:(L/2))*(Fs/L); % 频率轴常见问题排查表现象可能原因解决方案频谱出现镜像未正确截取单边频谱只取FFT结果的前半部分频率显示不正确频率轴计算错误检查f (0:N/2)*(Fs/N)公式频谱分辨率低采样点数N太小增加采样点数或降低Fs3. 幅值校准从FFT结果到真实幅值FFT结果的纵坐标需要特殊处理才能反映原始信号的真正幅值。核心校正步骤如下对FFT结果取绝对值并除以采样点数Nabs(Y)/N对于单边频谱非直流分量需要乘以2因为能量被分配到正负频率直流分量第一个点不需要乘以2% 幅值校正代码实现 P2 abs(Y/L); % 双侧频谱 P1 P2(1:L/21); % 单边频谱 P1(2:end-1) 2*P1(2:end-1); % 非直流分量校正幅值校正原理FFT算法本身不包含1/N的缩放双边频谱的总能量应等于时域信号的能量单边频谱只显示一半频率成分因此需要乘以2补偿4. 完整示例与可视化将上述步骤整合成一个完整的MATLAB脚本% 参数设置 Fs 1000; % 采样频率 L 1500; % 采样点数 T 1/Fs; % 采样间隔 t (0:L-1)*T; % 时间向量 % 信号生成 X 0.7*sin(2*pi*50*t) sin(2*pi*120*t); % FFT计算 Y fft(X); % 频率轴校准 P2 abs(Y/L); P1 P2(1:L/21); P1(2:end-1) 2*P1(2:end-1); f (0:(L/2))*(Fs/L); % 可视化 figure; subplot(2,1,1); plot(t,X); title(时域信号); xlabel(时间 (s)); ylabel(幅值); subplot(2,1,2); plot(f,P1); title(单边幅值频谱); xlabel(频率 (Hz)); ylabel(|P1(f)|);频谱分析中的关键参数对比参数定义计算公式影响采样频率Fs每秒采样点数由硬件决定决定可分析的最高频率(Fs/2)采样点数N总采样数量由采样时间和Fs决定决定频率分辨率(Fs/N)频率分辨率能区分的最小频率差Fs/NN越大分辨率越高Nyquist频率最大可分析频率Fs/2高于此频率会出现混叠5. 实际工程中的注意事项在实际工程应用中还需要考虑以下因素频谱泄露当信号频率不是频率分辨率的整数倍时能量会泄露到相邻频点解决方案使用窗函数如Hamming窗频率混叠当信号包含高于Fs/2的频率成分时解决方案确保Fs 2*最高信号频率补零操作通过补零增加FFT点数可以提高频谱显示分辨率NFFT 2^nextpow2(L); % 最接近的2的幂次 Y fft(X,NFFT);噪声处理实际信号通常包含噪声可以通过频域滤波处理% 简单带通滤波示例 Y_filtered Y; Y_filtered(f40 | f130) 0; % 滤除40Hz以下和130Hz以上成分 X_filtered ifft(Y_filtered); % 逆变换回时域通过掌握这些FFT分析的核心技巧工程师可以更准确地从时域信号中提取频域信息为后续的信号处理和故障诊断奠定基础。