You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab FFT结果:属于功率谱密度还是振幅谱密度?

FFT振幅归一化与Matlab实现的疑问解析

背景知识

FFT的原始振幅结果与信号长度L直接相关,若要得到与长度无关的频域结果,通常会使用功率谱密度(PSD)或振幅谱密度(ASD),计算公式如下:

  • 原始FFT振幅:$Y$
  • 信号长度:$L$
  • 功率谱密度:$\text{PSD} = \frac{|Y|^2}{L}$
  • 振幅谱密度:$\text{ASD} = \frac{|Y|}{\sqrt{L}}$

问题描述

Matlab官方示例中,对时长50s和500s的同构信号执行FFT后,得到的振幅结果几乎一致。代码中使用了P2 = abs(FFTcomplex)/L进行归一化,再对单侧谱(除直流和奈奎斯特频率)做2倍修正,但这个归一化公式和PSD、ASD的公式均不相同,为何仍能得到与信号长度无关的振幅?

示例代码

% Signal 1    
sps = 1000;                    % 采样频率
T = 1/sps;                     % 采样周期
Frequency1 = 150;              % 频率1 [Hz]
SignalAmplitude1 = 1;          % mm/s
Frequency2 = 45;               % 主频率 [Hz]
SignalAmplitude2 = 1.2;        % mm/s
L = 50;                        % 信号时长,秒
L = L*1000;                    % 转换为毫秒
time = (0:L-1)*T;              % 时间向量
Signal = cos(2*pi*Frequency1*time)*SignalAmplitude1 + sin(2*pi*Frequency2*time)*SignalAmplitude2;

f = sps*(0:(L/2))/L;
FFTcomplex = fft(Signal);
P2 = abs(FFTcomplex)/L;
P1 = P2(:,round(1:L/2+1));
P1(:,2:end-1) = 2*P1(:,2:end-1);
Ampl_FFT_1 = P1;

% Signal 2
sps = 1000;                    % 采样频率
T = 1/sps;                     % 采样周期
Frequency1 = 150;              % 频率1 [Hz]
SignalAmplitude1 = 1;          % mm/s
Frequency2 = 45;               % 主频率 [Hz]
SignalAmplitude2 = 1.2;        % mm/s
L = 500;                        % 信号时长,秒
L = L*1000;                    % 转换为毫秒
time = (0:L-1)*T;              % 时间向量
Signal = cos(2*pi*Frequency1*time)*SignalAmplitude1 + sin(2*pi*Frequency2*time)*SignalAmplitude2;

f = sps*(0:(L/2))/L;
FFTcomplex = fft(Signal);
P2 = abs(FFTcomplex)/L;
P1 = P2(:,round(1:L/2+1));
P1(:,2:end-1) = 2*P1(:,2:end-1);
Ampl_FFT_2 = P1;

sum(Ampl_FFT_2)-sum(Ampl_FFT_1)

问题解析

1. 原始FFT的幅值特性

对于纯正弦信号 $x(t) = A\cos(2\pi ft)$,其N点FFT的双侧谱中,对应频率点的复数幅值为 $\frac{N \cdot A}{2}$。此时用abs(Y)/N归一化后,得到的是 $\frac{A}{2}$,再对单侧谱(除直流和奈奎斯特频率)乘以2,就直接还原了时域信号的真实振幅A——这个值仅由原始信号的振幅决定,和信号长度N无关。

2. 与PSD/ASD的本质区别

PSD和ASD的核心是描述信号功率/振幅在频域的密度分布,单位带有“每赫兹”的维度(例如PSD为$\text{mm}2/\text{s}2/\text{Hz}$,ASD为$\text{mm/s}/\sqrt{\text{Hz}}$),目的是让不同频率带宽下的谱特性具备可比性。而Matlab示例中的归一化逻辑,是还原时域信号的真实振幅,结果单位与原始信号一致(示例中为mm/s),和频率带宽无关,二者的设计目标完全不同。

3. 长度不影响结果的原因

无论信号长度是50s还是500s,原始信号的振幅A固定不变。FFT的幅值会随采样点数N线性增大(因为N越大,频域求和的累计值越高),因此除以N后刚好抵消了N的影响,再通过2倍修正还原单侧谱的振幅,最终结果自然与信号长度无关。

内容的提问来源于stack exchange,提问作者Daniele F.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:05:46