即時通訊使用python和scipy來了解窗口,我做了一個情節,看看如何在FFT下的窗口行爲,但結果不是我所指出的。 的劇情是: 錯誤的結果繪製窗口FFT
中間的地塊是純FFT的情節,這裏是我得到奇怪的東西。 然後我改變了trig。函數獲取泄漏,把一個1個直數組的300個項時,結果是:
代碼:
sign_freq=80
sample_freq=3000
num=np.linspace(0,1,num=sample_freq)
i=0
#wave data:
sin=np.sin(2*pi*num*sign_freq)+np.sin(2*pi*num*sign_freq*2)
while i<1000:
sin[i]=1
i=i+1
#wave fft:
fft_sin=np.fft.fft(sin)
fft_freq_axis=np.fft.fftfreq(len(num),d=1/sample_freq)
#wave Linear Spectrum (Rms)
lin_spec=sqrt(2)*np.abs(np.fft.rfft(sin))/len(num)
lin_spec_freq_axis=np.fft.rfftfreq(len(num),d=1/sample_freq)
#window data:
hann=np.hanning(len(num))
#window fft:
fft_hann=np.fft.fft(hann)
#window fft Linear Spectrum:
wlin_spec=sqrt(2)*np.abs(np.fft.rfft(hann))/len(num)
#window + sin
wsin=hann*sin
#window + sin fft:
wsin_spec=sqrt(2)*np.abs(np.fft.rfft(wsin))/len(num)
wsin_spec_freq_axis=np.fft.rfftfreq(len(num),d=1/sample_freq)
fig=plt.figure()
ax1 = fig.add_subplot(431)
ax2 = fig.add_subplot(432)
ax3 = fig.add_subplot(433)
ax4 = fig.add_subplot(434)
ax5 = fig.add_subplot(435)
ax6 = fig.add_subplot(436)
ax7 = fig.add_subplot(413)
ax8 = fig.add_subplot(414)
ax1.plot(num,sin,'r')
ax2.plot(fft_freq_axis,abs(fft_sin),'r')
ax3.plot(lin_spec_freq_axis,lin_spec,'r')
ax4.plot(num,hann,'b')
ax5.plot(fft_freq_axis,fft_hann)
ax6.plot(lin_spec_freq_axis,wlin_spec)
ax7.plot(num,wsin,'c')
ax8.plot(wsin_spec_freq_axis,wsin_spec)
plt.show()
編輯:如要求在評論,我繪製的以dB爲單位的函數,獲得更清晰的圖。非常感謝@SleuthEye!
對於神的愛,請解釋劇情中的每一個盒子是什麼,「純粹的FFT」意味着什麼,問題到底是什麼。 –
與您的預期有什麼不同?第二張圖顯示了插入1的直流分量的0處的峯值。不直接明顯的是遠離峯值的泄漏水平。如果以對數刻度(分貝)顯示頻譜幅度,則會更好。 – SleuthEye
@SleuthEye:來自正弦波和窗口+ sin的線性光譜似乎工作正常,問題是具有漢寧函數的問題,沒有顯示任何精確的,我猜測是這樣的:[link](https:/ /upload.wikimedia.org/wikipedia/commons/thumb/b/b3/Window_function_and_frequency_response_-_Hann.svg/500px-Window_function_and_frequency_response_-_Hann.svg.png).Greets! :) – tomzko