用离散小波变换理解 Parseval 定理

信息处理 离散信号 Python 小波 转换 解析
2022-02-04 08:43:37

我很难理解将 Python 中的 Parseval 定理实现到 DWT 所得到的结果。我在 python 中通过傅里叶变换和时间序列获得了很好的结果:

# Parseval theorem energy
def ParsevalTheorem(data):
    energy_sum = 0
    for i in range(len(data)):
        energy_sum += abs(data[i])**2
    return energy_sum

# dwt_data[0] => approximation component at final level, dwt_data[1:] => detail components
def DWTParseval(dwt_data):
    details_sum = 0
    for i in range(len(dwt_data)-1):
        details_sum += ParsevalTheorem(dwt_data[i+1])
    approx_sum = ParsevalTheorem(dwt_data[0])
    final_sum = approx_sum + details_sum
    return final_sum

fourierTransform = np.fft.fft(short_signal)
print("fourier energy: ", ParsevalTheorem(np.abs(fourierTransform))/len(fourierTransform))
print("Org energy: ", ParsevalTheorem(short_signal))
print("DWT energy: ", DWTParseval(app1)) # app1 is haar discrete wavelet transform using pywt.wavedec(data, "haar", level = 3)

结果:

fourier energy:  1305035.7546624008
Org energy:  1305035.7546624022
DWT energy:  1309077.6827128115

我从方程中收集了有关使用 Parseval 定理的信息:方程 Link1

https://cnx.org/contents/EQurkhlI@6.9:8jovwc5A@4/Generalizations-of-the-Basic-Multiresolution-Wavelet-System

我还遇到了另一个获取能量的方程式,但是如果我将近似和除以它的长度,它的范围与原始信号能量完全不同:方程式 Link2

在此处输入图像描述

我在处理傅立叶变换时理解了 Parseval 定理,但在处理 DWT 时却迷失了这些方程。

PS:我知道有更多的 Pythonic 方式来编写代码,但我也打算用不同的语言应用它。

1个回答

Parseval 的恒等式Plancherel 的定理最终归结为正交性。当人们通过标量积将数据(带有样本)分解为正交序列(产生系数)时,样本和系数之间存在一定的能量保留(相等,直到比例因子)有一些技术条件,在某些情况下,只能得到不等式(参见贝塞尔不等式)或框架界限。

关于索引,离散小波变换 (DWT) 的方程可能不完整。例如,我认为在 RHS 的第二个任期内,比例因子应该是Nj, 不是NJ(这在一定程度上取决于离散小波的实现方式)。基本上,正交小波变换将数据投影到被称为子带的组中收集的基本元素上。每个小波子带来自Nj向量,有一个额外的NJ近似的向量。通常,向量的总数应该是(大约,老实说,这取决于信号扩展)样本数N, 换句话说:N=NJ+j=1JNj.