Tôi đang cố gắng nắm bắt chức năng fft của Python, và một trong những điều kỳ lạ mà tôi đã vấp phải là Parseval's theorem dường như không áp dụng, vì nó mang lại sự khác biệt khoảng 50 bây giờ, trong khi nó phải được 0.Định lý của Parseval trong Python
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()
tôi khá chắc chắn rằng đó là một yếu tố bình thường, nhưng tôi dường như không thể tìm thấy nó, như tất cả các thông tin mà tôi có thể tìm thấy về chức năng này scipy.fftpack.rfft documentation.
Cảm ơn bạn đã sửa! – unutbu
Để lưu ý: một phần đây là khía cạnh của vấn đề chung mà các số dấu phẩy động không giống với số thực. – Marcin
@Marcin Yep, đã thay đổi '==' thành '-' trong séc ... – Jaime