计算频谱的方法

发布于:2025-05-13 ⋅ 阅读:(11) ⋅ 点赞:(0)

这两段代码在频谱分析方法上存在显著差异,导致生成的图形不同,主要原因如下:


1. 方法差异

% 执行FFT
N = length(signal_data); % 数据点数,影响频率分辨率
%(1:1e-3*fs)
Y = fft(signal_data,N);
P2 = abs(Y/N); % 双边频谱
P1 = P2(1:N/2+1); % 单边频谱
P1(2:end-1) = 2*P1(2:end-1); % 将双边频谱的非零频部分乘以2
f = fs*(0:(N/2))/N; % 频率轴

% 人为规定频率轴显示范围(例如0-1000 Hz)
f_min = 0;
f_max = 1.2e6;
idx = (f >= f_min) & (f <= f_max);

% 绘制FFT结果
figure;
%plot(f(idx), 20*log10(P1)) % 显示功率谱密度的对数值(dB)
plot(f(idx), 20*log10(P1(idx)));
xlabel('频率 (Hz)')
ylabel('|P1| (dB)')
title('单边幅度谱 (FFT)')
grid on;
  • FFT直接法
    • 原理:直接对信号进行FFT,计算幅度谱。通过调整得到单边频谱,并转换为分贝(dB)。
    • 特点
      • 无分段、无平均,单次FFT结果易受噪声影响,波动较大。
      • 频率分辨率由信号全长决定(Δf = fs/N),分辨率较高。
      • 未明确加窗(默认矩形窗),频谱泄漏可能较严重。
    • 单位:幅度谱的对数值(20log₁₀|幅度|),无功率归一化。
 % 计算功率谱密度
    [f, Pxx] = pwelch(signal_data, hann(optimal_window), round(optimal_window/2), [], fs);
    
    % 转换为dBm/Hz
    Pxx_dbm = 10 * log10(Pxx * 1000 / R);
    
    % 绘制频谱图
    figure('Position', [100, 100, 1200, 600]);
    plot(f/1e6, Pxx_dbm, 'LineWidth', 1);
    xlabel('频率 (MHz)');
    ylabel('功率谱密度 (dBm/Hz)');
    title([title_str, ' (窗口长度: ', num2str(optimal_window), '点)']);
    grid on;
  • Welch方法(pwelch)
    • 原理:将信号分段、加窗(如汉宁窗)、计算每段FFT并平均,估计功率谱密度(PSD)。
    • 特点
      • 分段和平均降低噪声方差,结果更平滑。
      • 频率分辨率由窗口长度决定(Δf = fs/窗口长度),分辨率可能较低。
      • 加窗减少频谱泄漏,但主瓣宽度增加。
    • 单位:功率谱密度(10log₁₀(功率/Hz)),转换为dBm/Hz(考虑负载电阻R)。

2. 图形差异原因

  • 纵轴单位与量纲

    • FFT图:显示幅度谱的对数值(dB),反映信号幅度分布。
    • Welch图:显示功率谱密度的dBm/Hz,反映功率在频域的分布(需考虑负载电阻R)。
    • 数值差异:幅度谱用20log₁₀,功率谱用10log₁₀,相同信号在两者中的dB值不同。
  • 频谱平滑度

    • FFT结果因单次计算包含噪声波动,曲线较“毛刺”。
    • Welch方法通过平均抑制噪声,曲线更平滑。
  • 频率分辨率

    • FFT分辨率由信号全长决定,可能更高(如Δf=1Hz)。
    • Welch方法分辨率由窗口长度决定,可能较低(如Δf=100Hz)。
  • 频谱泄漏与窗函数

    • FFT未加窗(矩形窗),泄漏明显,可能出现虚假频率成分。
    • Welch使用汉宁窗,泄漏减少,但主瓣变宽,峰值可能展宽。
  • 归一化处理

    • FFT仅简单除以N,未补偿窗函数影响。
    • Welch内部对窗函数功率归一化,确保PSD估计准确。

3. 应用场景

  • FFT直接法:适合分析瞬态信号或需要高频率分辨率的场景。
  • Welch方法:适合分析稳态信号,需平衡频率分辨率与估计方差。

总结

两段代码分别从幅度谱和功率谱密度两个角度分析信号,方法论的差异(单次FFT vs 分段平均、幅度 vs 功率、窗函数影响、单位转换)导致图形在平滑度、分辨率、纵轴量纲和数值上显著不同。选择哪种方法需根据具体需求(如关注幅度细节或功率分布)决定。

除了 FFT直接法Welch方法(pwelch),还有多种频谱分析方法,它们在噪声抑制、分辨率、计算复杂度等方面各有优劣。以下是几种常见方法的对比:


1. 周期图法 (Periodogram)

  • 原理:直接对信号做FFT并计算幅值平方(功率),等效于矩形窗的Welch方法(不分段、不平均)。
  • 特点
    • 优点:简单快速,频率分辨率最高(由信号全长决定)。
    • 缺点:方差大(噪声波动剧烈),频谱泄漏严重(未加窗)。
  • 图形表现:与FFT直接法类似,但纵轴是功率(而非幅度),曲线毛刺多。

2. 多窗口法(MTM, Multitaper Method)

  • 原理:使用多个正交窗函数(如Slepian序列)对信号加窗,分别计算功率谱后平均。
  • 特点
    • 优点:通过多窗口减少频谱泄漏,方差低于周期图法。
    • 缺点:主瓣宽度增加,频率分辨率降低,计算复杂度高。
  • 图形表现:比Welch方法更平滑,但分辨率可能略低。

3. 最大熵谱估计(MEM, Maximum Entropy Method)

  • 原理:基于自回归(AR)模型,假设信号由白噪声激励生成,通过模型参数外推频谱。
  • 特点
    • 优点:适合短数据,高频分辨率(可突破傅里叶极限)。
    • 缺点:模型阶数选择敏感,可能产生虚假峰值。
  • 图形表现:在短信号中分辨率高,但可能出现虚假尖峰。

4. 短时傅里叶变换(STFT)

  • 原理:将信号分帧加窗,逐帧做FFT,得到时频联合分布(频谱图)。
  • 特点
    • 优点:可分析非平稳信号的时变频谱。
    • 缺点:时间-频率分辨率受窗口长度制约(Heisenberg不确定性)。
  • 图形表现:以热图形式展示频率随时间变化。

5. 小波变换(Wavelet Transform)

  • 原理:用可变尺度的基函数(小波)分解信号,适合分析瞬态或非平稳信号。
  • 特点
    • 优点:多分辨率分析(低频高频率分辨率,高频高时间分辨率)。
    • 缺点:无统一频标(频率轴非线性),计算复杂。
  • 图形表现:时频图,频率轴为对数尺度。

对比总结

方法 核心思想 分辨率 方差(噪声) 泄漏抑制 适用场景
FFT直接法 单次FFT幅度谱 最高 高(无平均) 差(矩形窗) 瞬态信号、高分辨率需求
Welch方法 分段加窗+平均 低(平均抑制) 好(加窗) 稳态信号、平滑频谱需求
周期图法 单次FFT功率谱 最高 简单快速分析
多窗口法(MTM) 多正交窗平均 中低 较低 极好 低泄漏、低方差需求
最大熵(MEM) 自回归模型外推 极高 中高(依赖模型) 依赖模型 短数据、高频分辨率需求
STFT 时频联合分析 时-频权衡 非平稳信号
小波变换 多尺度分解 自适应 瞬态信号、多分辨率分析

为什么不同方法画出的图不同?

  1. 分辨率与平滑度的权衡

    • FFT直接法分辨率高但噪声大,Welch方法牺牲分辨率换取平滑性。
    • MEM可突破分辨率限制,但需要谨慎选择模型阶数。
  2. 泄漏抑制

    • 未加窗的FFT泄漏严重(如周期图法),加窗方法(Welch、MTM)泄漏少。
  3. 量纲与单位

    • FFT幅度谱单位是dB(20log₁₀|幅度|),功率谱密度单位是dBm/Hz(10log₁₀(功率/Hz))。
  4. 时频特性

    • STFT和小波变换展示时变特性,其他方法仅显示全局频谱。

如何选择方法?

  • 稳态信号:优先Welch方法(平衡分辨率与方差)。
  • 短数据/高频分辨率:尝试最大熵(MEM)。
  • 非平稳信号:使用STFT或小波变换。
  • 低泄漏需求:多窗口法(MTM)。
  • 快速粗略分析:FFT直接法或周期图法。

代码示例(其他方法)

1. 多窗口法(MTM)
% 使用pmtm函数
[f, Pxx] = pmtm(signal_data, 4, [], fs); % 4个Slepian窗
Pxx_dB = 10*log10(Pxx);
plot(f, Pxx_dB);
2. 最大熵法(MEM)
% 使用arcov函数估计AR模型
order = 30; % 模型阶数(需调试)
AR_model = arcov(signal_data, order);
[h, f] = freqz(1, AR_model, N/2, fs);
Pxx = abs(h).^2;
plot(f, 10*log10(Pxx));
3. 小波变换
% 使用cwt函数
[cfs, f] = cwt(signal_data, 'amor', fs);
t = 0:1/fs:(length(signal_data)-1)/fs;
contour(t, f, abs(cfs), 'LineWidth', 1.5);
set(gca, 'YScale', 'log');

最终结论

不同方法从不同角度揭示信号特性,选择需结合实际需求(如分辨率、平滑性、泄漏抑制、计算资源)。FFT和Welch是最基础的“黄金标准”,其他方法则针对特定场景优化。


网站公告

今日签到

点亮在社区的每一天
去签到