3. 傅里叶变换与频谱分析实战
在MATLAB信号处理中,频谱分析是把时域采样序列转换为频率域描述的核心手段。工程上最常用的工具是快速傅里叶变换(FFT),但直接调用 fft 得到的复数序列并不能直接当作“频谱”使用,必须经过频率轴构造、幅度归一化、单边谱截取等步骤,才能得到可解读的工程频谱。本节围绕“怎么算、为什么有泄漏、怎么选窗、怎么看结果”展开。
一、FFT实现:从采样序列到可读频谱
设采样频率为 fs,采样点数为 N,则频率分辨率(相邻谱线间隔)为 df = fs/N,可观测频率范围为 [0, fs)。对实信号而言,频谱关于 fs/2 共轭对称,因此工程上通常只保留 0 ~ fs/2 的单边谱,并把非直流与非奈奎斯特分量的幅度乘以2,以补偿被丢弃的负频率能量。
下面是一段可直接运行的示例代码,构造一个由50 Hz与120 Hz正弦叠加、并加入少量白噪声的信号,完成单边幅度谱计算:
fs = 1000; % 采样频率 1000 Hz
T = 1.0; % 信号时长 1 s
N = fs*T; % 采样点数 1000
t = (0:N-1)/fs; % 时间轴
x = 0.8*sin(2*pi*50*t) + 0.5*sin(2*pi*120*t) + 0.05*randn(1,N);
X = fft(x); % 复数频谱
f = (0:N-1)*(fs/N); % 双边频率轴
P2 = abs(X)/N; % 双边幅度谱,除以N归一化
P1 = P2(1:N/2+1); % 取单边谱
P1(2:end-1) = 2*P1(2:end-1); % 非直流分量幅度乘2
f1 = f(1:N/2+1); % 单边频率轴
plot(f1, P1); grid on;
xlabel('频率 / Hz'); ylabel('幅度');
title('单边幅度谱');
运行后应能在50 Hz处看到约0.8、在120 Hz处看到约0.5的谱峰,噪声则表现为低幅度的基底起伏。这里有两个容易出错的点:一是忘记除以 N,导致幅度随点数变化;二是忘记对单边谱乘2,使幅度只有真实值的一半。判断频谱是否正确的直接依据,就是已知分量的频率位置与幅度是否与设定值吻合。
二、频谱泄漏与窗函数
FFT隐含一个假设:所分析的 N 点序列恰好是周期信号的一个整周期。若信号频率不是 df 的整数倍,截断处就会产生突变,能量从主瓣向旁瓣扩散,这就是频谱泄漏。泄漏会让弱分量被强分量的旁瓣淹没,也会使谱峰幅度和频率读数产生偏差。
抑制泄漏的常用手段是加窗。窗函数在序列两端平滑衰减到零,减小截断突变。代价是主瓣变宽、频率分辨率下降,因此窗函数选择本质上是“泄漏抑制”与“分辨率”之间的权衡:
- 矩形窗:主瓣最窄、分辨率最高,但旁瓣高、泄漏严重,适合整周期采样或瞬态冲击测量。
- 汉宁窗(Hanning):旁瓣衰减快,适合连续随机信号与一般工程频谱分析,是最常用的默认选择。
- 汉明窗(Hamming):第一旁瓣更低,适合需要兼顾旁瓣抑制与一定分辨率的场合。
- 平顶窗(Flat Top):主瓣很宽但幅度平坦,适合精确测量单频分量的幅值。
- 布莱克曼窗:旁瓣抑制最强,主瓣最宽,适合强干扰背景下寻找弱分量。
加窗后必须做幅度补偿,否则谱峰幅度会因窗函数能量损失而偏低。MATLAB中可用相干增益修正:
w = hanning(N)'; % 汉宁窗
xw = x .* w; % 加窗
Xw = fft(xw);
Pw2 = abs(Xw)/N;
Pw1 = Pw2(1:N/2+1);
Pw1(2:end-1) = 2*Pw1(2:end-1);
CG = sum(w)/N; % 相干增益
Pw1 = Pw1 / CG; % 幅度补偿
plot(f1, Pw1); grid on;
若不做补偿,汉宁窗下50 Hz谱峰幅度会明显低于0.8;补偿后应重新接近设定值。这就是判断窗函数使用是否正确的一个可操作依据。
三、工程信号频谱解读
得到频谱后,工程解读通常关注四类信息:谱峰频率(对应哪些周期分量)、谱峰幅度(各分量强度)、谱底噪声(本底噪声水平)、谐波与边带(是否存在非线性或调制)。例如电机振动信号中,转频及其倍频往往成组出现;若在转频两侧出现间隔等于某特征频率的边带,则提示存在调制或故障特征。
解读时还要注意几个工程约束。第一,频率分辨率 df = fs/N 决定了能否分开两个靠近的谱峰,若两分量间隔小于 df,它们会合并成一个峰。第二,采样频率必须满足奈奎斯特条件 fs > 2fmax,否则高频分量会折叠到低频,产生虚假谱峰。第三,谱峰幅度受窗函数、采样时长和信号非平稳性影响,绝对幅度读数应结合标定系数换算为物理量。
fs 与 N 是否合理,再看单边谱归一化与窗补偿是否正确,最后才解读谱峰频率、幅度与边带结构。若谱峰位置与理论值偏差超过一个 df,优先检查频率轴构造与采样参数。综合来看,FFT频谱分析的关键不在于调用函数,而在于理解“截断—泄漏—加窗—补偿—解读”这条链路中每一步对结果的影响。只有把归一化、单边谱、窗函数补偿这些细节处理正确,频谱图才能真正成为工程判断的依据。