3

scipy.fftpack.fft() を使用していくつかのサンプルの離散フーリエ変換を行い、これらの大きさをプロットした後、元の信号の振幅と等しくないことに気付きました。両者の間に関係はありますか?

変換を逆にせずにフーリエ係数から元の信号の振幅を計算する方法はありますか?

振幅 7.0、fft 振幅 3.5 の正弦波の例を次に示します。

from numpy import sin, linspace, pi
from pylab import plot, show, title, xlabel, ylabel, subplot
from scipy import fft, arange

def plotSpectrum(y,Fs):
 """
 Plots a Single-Sided Amplitude Spectrum of y(t)
 """
 n = len(y) # length of the signal
 k = arange(n)
 T = n/Fs
 frq = k/T # two sides frequency range
 frq = frq[range(n/2)] # one side frequency range

 Y = fft(y)/n # fft computing and normalization
 Y = Y[range(n/2)]

 plot(frq,abs(Y),'r') # plotting the spectrum
 xlabel('Freq (Hz)')
 ylabel('|Y(freq)|')

Fs = 150.0;  # sampling rate
Ts = 1.0/Fs; # sampling interval
t = arange(0,1,Ts) # time vector

ff = 5;   # frequency of the signal
y = 7.0 * sin(2*pi*ff*t)

subplot(2,1,1)
plot(t,y)
xlabel('Time')
ylabel('Amplitude')
subplot(2,1,2)
plotSpectrum(y,Fs)
show()
4

1 に答える 1

7

はい、Parseval の定理は、周波数ドメインの合計パワーが時間ドメインの合計パワーに等しいことを示しています。

ただし、表示されるのは、順方向 FFT のスケーリング係数の結果です。このスケーリング係数のサイズは慣例の問題ですが、最も一般的なのは N の係数です。N はデータ ポイントの数です。ただし、1 または sqrt(N) に等しい場合もあります。これについては、FFT のドキュメントを確認してください。

また、周波数領域のビンの半分からのみ電力を取得する場合 (時間領域の信号が純粋に実数であり、周波数領域に複素共役対称性がある場合に一般的に行われます)、2 倍の係数が必要になることにも注意してください。

于 2012-11-14T15:06:01.063 に答える