Python 中的帕塞瓦尔定理

2024-04-07

我试图掌握 Python 的 fft 功能,我偶然发现的奇怪的事情之一是帕塞瓦尔定理 http://en.wikipedia.org/wiki/Parseval%27s_theorem似乎不适用,因为它现在给出的差异约为 50,而它应该是 0。

import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack as fftpack

pi = np.pi

tdata = np.arange(5999.)/300
dt = tdata[1]-tdata[0]

datay = np.sin(pi*tdata)+2*np.sin(pi*2*tdata)
N = len(datay)

fouriery = abs(fftpack.rfft(datay))/N

freqs = fftpack.rfftfreq(len(datay), d=(tdata[1]-tdata[0]))

df = freqs[1] - freqs[0]

parceval = sum(datay**2)*dt - sum(fouriery**2)*df
print parceval

plt.plot(freqs, fouriery, 'b-')
plt.xlim(0,3)
plt.show()

我很确定这是一个标准化因子,但我似乎无法找到它,因为我能找到的有关此函数的所有信息都是scipy.fftpack.rfft 文档 http://docs.scipy.org/doc/scipy/reference/generated/scipy.fftpack.rfft.html.


Your 归一化因子来自尝试将帕塞瓦尔定理应用于连续信号到离散序列的傅里叶变换。在侧面板上维基百科关于离散傅里叶变换的文章 http://en.wikipedia.org/wiki/Discrete_Fourier_transform对傅里叶变换、傅里叶级数、离散傅里叶变换和采样之间的关系进行了一些讨论狄拉克梳子 http://en.wikipedia.org/wiki/Dirac_comb.

使长话短说,帕塞瓦尔定理应用于 DFT 时 http://en.wikipedia.org/wiki/Discrete_Fourier_transform#The_Plancherel_theorem_and_Parseval.27s_theorem,不需要积分,而是求和:a2*pi你通过乘以来创造dt and df你的总结。

另请注意,因为您正在使用scipy.fftpack.rfft http://docs.scipy.org/doc/scipy/reference/generated/scipy.fftpack.rfft.html,您得到的并不是数据的 DFT,而只是数据的正半部分,因为负数将与其对称。因此,由于您只添加了一半的数据,再加上0在 DC 术语中,缺少2到达4*pi@unutbu 发现的。

无论如何,如果datay保存你的序列,你可以验证帕塞瓦尔定理如下:

fouriery = fftpack.rfft(datay)
N = len(datay)
parseval_1 = np.sum(datay**2)
parseval_2 = (fouriery[0]**2 + 2 * np.sum(fouriery[1:]**2)) / N
print parseval_1 - parseval_2

Using scipy.fftpack.fft http://docs.scipy.org/doc/scipy/reference/generated/scipy.fftpack.fft.html#scipy.fftpack.fft or numpy.fft.fft http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.fft.html#numpy.fft.fft第二个求和不需要采用如此奇怪的形式:

fouriery_1 = fftpack.fft(datay)
fouriery_2 = np.fft.fft(datay)
N = len(datay)
parseval_1 = np.sum(datay**2)
parseval_2_1 = np.sum(np.abs(fouriery_1)**2) / N
parseval_2_2 = np.sum(np.abs(fouriery_2)**2) / N
print parseval_1 - parseval_2_1
print parseval_1 - parseval_2_2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的帕塞瓦尔定理 的相关文章

随机推荐