离散傅里叶变换中的能量守恒公式(帕斯瓦尔定理)及其程序举例验证
一、 离散傅里叶变换中的能量守恒公式
离散傅里叶变换中的能量守恒公式:
∑ n = 0 N − 1 ∣ x [ n ] ∣ 2 = 1 N ∑ k = 0 N − 1 ∣ X [ k ] ∣ 2 (1) \sum\limits_{n = 0}^{N - 1} {|x[n]{|^2}} = \frac{1}{N}\sum\limits_{k = 0}^{N - 1} {|X[k]{|^2}} \tag1 n=0∑N−1∣x[n]∣2=N1k=0∑N−1∣X[k]∣2(1)
其中, x [ n ] x[n] x[n]是原始信号的离散时间域表示, X [ k ] {X[k]} X[k]是信号离散傅里叶变换后的频域表示, N N N是信号的长度。
该公式表示了信号在时间域和频率域中的能量之间的关系。
左侧是原始信号的能量,通过计算每个样本值的平方后求和。
右侧是信号的频率域表示的能量,通过计算每个频率分量的平方求和,并除以信号长度。两者之间存在一个归一化因子 1 N \frac{1}{N} N1,用于保持能量守恒。
这个公式的意义在于,它表明信号在时间域和频率域中的能量总量是相等的,即信号的能量在傅里叶变换过程中保持不变。
在该公式中暗含了 n ∈ [ 0 , N − 1 ] , k ∈ [ 0 , N − 1 ] n \in [0,N - 1],k \in [0,N - 1] n∈[0,N−1],k∈[0,N−1].
二、基于短长度信号程序的验证
2.1 问题描述
通过编写matlab程序来简单验证,该能量守恒公式。假设时域信号x=[6,2,5],根据式(1)可得,时间域能量=6×6+2×2+5×5=65。
2.2 通过matlab程序验证
所编写的程序如下:
clc
clear all
close all
% 1.构建一个序列x
x=[6,2,5];
N=length(x);% 2.计算时间域能量energy_time
energy_time=x*x'% 3.计算频率域能量energy_frequency
X=fft(x,N);
X_module=abs(X);
energy_frequency=sum(X_module.^2)/N
运行结果:
图1 运行结果比较
根据运行结果(图1),可以很看到时频域能量相等,公式准确。
三、基于大长度信号程序的验证
3.1 问题描述
通过编写matlab程序来验证较长尺度信号的时频域能量守恒公式。
比如长度为2001采样率为1000的信号:
x = 10 sin ( 2 π ⋅ 300 ⋅ t ) x = 10\sin (2\pi \cdot 300 \cdot t) x=10sin(2π⋅300⋅t)
的时频域能量守恒。
3.2 通过matlab程序验证
clc
clear all
close all% 1.构建一个序列x
fs=1000;
dt=1/fs;
t=0:dt:2;
x=10*sin(2*pi*300*t) ;% 2.计算时间域能量energy_time
N=length(x);
energy_time=x*x'% 3.计算频率域能量energy_frequency
X=fft(x,N);
X_module=abs(X);
energy_frequency=sum(X_module.^2)/N
运行结果
图2 运行结果比较
根据运行结果(图2),可以很看到时频域能量相等,公式准确。