Parseval 定理说以下关系成立
∑n=1Na[n]a∗[n]=1N∑k=1NA[k]A∗[k]
在哪里A[k]是离散傅里叶变换a[n], 都假定为长度N(无填充)。这是因为从时域和频域计算的信号能量必须相等。有关此公式如何产生的更多详细信息,请参阅此答案。
如果要计算单侧频谱,则需要丢弃负频率(当信号为真实时,负频率是多余的)。但是,由于这些条目中包含一半能量,因此您需要将剩余 bin 中的能量乘以 2 - DC 和 Nyquist除外。我看到你已经正确地认识到奈奎斯特只存在于N是偶数,并且第一个条目是直流分量,无论N- 好的。但是,您将幅度乘以 2(直接在 FFT 之后),而不是能量 - 负频率区间包含能量的一半。
相反,一旦您使用 FFT 算法计算了离散傅立叶变换(您的变量A和B),然后我将首先获得信号的能谱密度a[n]使用
ESDa[k]=|A[k]|2=A[k]A∗[k]
然后从这个向量中丢弃负频率。这样你就可以正确地扔掉一半的能量,你可以自信地将剩余垃圾箱中的能量乘以2.
以下代码说明了这一点:
%% ODD
a = [1 2 3 4 5];
A = fft(a);
ESD_a = A.*conj(A);
ESD_a_onesided = [ESD_a(1) 2*ESD_a(2:3)];
E_a_timedomain = sum(a.^2)
E_a_twosided = sum(ESD_a)/5
E_a_onesided = sum(ESD_a_onesided)/5
%% EVEN
b = [1 2 3 4 5 6];
B = fft(b);
ESD_b = B.*conj(B);
ESD_b_onesided = [ESD_b(1) 2*ESD_b(2:3) ESD_b(4)];
E_b_timedomain = sum(b.^2)
E_b_twosided = sum(ESD_b)/6
E_b_onesided = sum(ESD_b_onesided)/6
结果是正确的
E_a_timedomain = 55
E_a_twosided = 55
E_a_onesided = 55
E_b_timedomain = 91
E_b_twosided = 91
E_b_onesided = 91
编辑 - - - - - - - - - - - - - -
实际上,能量值55和91仅当我们假设信号采集的采样周期为Ts=1.
连续信号的信号能量a(t)定义为
Es=∫+∞−∞|a(t)|2dt
然后它的采样版本的能量是
Es=∑n=1N|a[n]|2⋅Ts
您可以看到我们需要考虑信号采样周期才能获得正确的能量。
下面验证 Parseval 定理,如果我们例如在某个其他采样周期收集了信号Ts≠1
Ts = 0.05; % the sampling period of acquisition
Fs = 1/Ts; % the sampling frequency of the acquisition
%% ODD
a = [1 2 3 4 5];
N = 5
A = fft(a)*Ts;
ESD_a = A.*conj(A);
ESD_a_onesided = [ESD_a(1) 2*ESD_a(2:3)];
E_a_timedomain = sum(a.*conj(a))*Ts
E_a_twosided = sum(ESD_a)*Fs/N
E_a_onesided = sum(ESD_a_onesided)*Fs/N
%% EVEN
b = [1 2 3 4 5 6];
N = 6
B = fft(b)*Ts;
ESD_b = B.*conj(B);
ESD_b_onesided = [ESD_b(1) 2*ESD_b(2:3) ESD_b(4)];
E_b_timedomain = sum(b.^2)*Ts
E_b_twosided = sum(ESD_b)*Fs/N
E_b_onesided = sum(ESD_b_onesided)*Fs/N
与输出
E_a_timedomain = 2.75 [signal^2 sec]
E_a_twosided = 2.75 [signal^2 sec]
E_a_onesided = 2.75 [signal^2 sec]
E_b_timedomain = 4.55 [signal^2 sec]
E_b_twosided = 4.55 [signal^2 sec]
E_b_onesided = 4.55 [signal^2 sec]