我很难理解将 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
我还遇到了另一个获取能量的方程式,但是如果我将近似和除以它的长度,它的范围与原始信号能量完全不同:方程式 Link2
我在处理傅立叶变换时理解了 Parseval 定理,但在处理 DWT 时却迷失了这些方程。
PS:我知道有更多的 Pythonic 方式来编写代码,但我也打算用不同的语言应用它。