小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python科學(xué)計算——復(fù)雜信號FFT

 taotao_2016 2019-03-02

FFT (Fast Fourier Transform, 快速傅里葉變換) 是離散傅里葉變換的快速算法,也是數(shù)字信號處理技術(shù)中經(jīng)常會提到的一個概念。用快速傅里葉變換能將時域的數(shù)字信號轉(zhuǎn)換為頻域信號,轉(zhuǎn)換為頻域信號后我們可以很方便地分析出信號的頻率成分。

單頻信號FFT

# single frequency signalsampling_rate = 2**14fft_size = 2**12t = np.arange(0, 1, 1.0/sampling_rate)x = np.array(map(lambda x : x*1e3, t))y = np.sqrt(2)*np.sin(2*np.pi*1000*t)y = y + 0.005*np.random.normal(0.0,1.0,len(y))# fftys = y[:fft_size]yf = np.fft.rfft(ys)/fft_sizefreq = np.linspace(0,sampling_rate/2, fft_size/2+1)freqs = np.array(map(lambda x : x/1e3, freq))yfp = 20*np.log10(np.clip(np.abs(yf),1e-20,1e100))

Python科學(xué)計算——復(fù)雜信號FFT

在對單頻信號進行快速傅里葉變換的過程中,我們定義了兩個常數(shù): sampling_rate, fft_size,分別表示數(shù)字信號的采樣頻率和FFT的長度。由快速傅里葉變化的性質(zhì)可知:采樣頻率 (sampling_rate) 確定的情況下,取波形中的 fft_size 個數(shù)據(jù)進行 FFT 變換時,若這 fft_size 個數(shù)據(jù)包含整數(shù)個周期, FFT 所計算的結(jié)果是精確的。即當被采樣頻率 f 滿足如下公式時,F(xiàn)FT 的計算結(jié)果是精確的。

Python科學(xué)計算——復(fù)雜信號FFT

多頻信號FFT

<1>雙頻信號FFT

# dual frequency signalsampling_rate = 2**16fft_size = 2**14t = np.arange(0, 1, 1.0/sampling_rate)x = np.array(map(lambda x : x*1000, t))y = np.sqrt(2)*np.sin(2*np.pi*1000*t) + np.sqrt(2)*np.sqrt(2)*np.sin(2*np.pi*4000*t)y = y + 0.005*np.random.normal(0.0,1.0,len(y))# fftys = y[:fft_size]yf = np.fft.rfft(ys)/fft_sizefreq = np.linspace(0,sampling_rate/2, fft_size/2+1)freqs = np.array(map(lambda x : x/1e3, freq))yfp = 20*np.log10(np.clip(np.abs(yf),1e-20,1e100))

Python科學(xué)計算——復(fù)雜信號FFT

在對多頻信號進行快速傅里葉變換的過程中,為了保證被采樣數(shù)字信號的 FFT 計算結(jié)果精確,需要保證被采樣數(shù)字信號中所有頻率都是基頻 (fo) 的整數(shù)倍,即滿足如下公式:

Python科學(xué)計算——復(fù)雜信號FFT

相比于單頻數(shù)字信號的快速傅里葉變換而言,多頻數(shù)字信號的快速傅里葉變換有著更加苛刻的條件。除此之外,很多時候,我們并不知道被采樣數(shù)字信號的所有頻率成分,亦或我們只能在有限的時間段中對信號進行測量,無法知道在測量范圍之外的信號是怎樣的,因此只能對測量范圍之外的信號進行假設(shè)。而快速傅里葉的假設(shè)很簡單:測量范圍之外的信號是所測量信號的重復(fù)。這就會引起在 fft_size 個點的采樣范圍內(nèi)無法放下整數(shù)個所有被采樣頻率的波形而造成頻譜泄漏。<2>頻譜泄漏

Python科學(xué)計算——復(fù)雜信號FFT

當我們把雙頻信號FFT示例中的 fft_size 的值改為 2**12 時,這時,基頻為 16Hz,不能被 1kHz整除,所以 1kHz 處發(fā)生了頻譜泄露,而它能被 4kHz 整除,所以 4kHz 可以很好地被采樣。

<2.1>頻譜泄漏的原因

# 50Hz正弦波512點FFT采樣t = np.arange(0, 1.0, 1.0/8000)x = np.sin(2*np.pi*50*t)[:512]pl.plot(np.hstack([x,x,x]),linewidth=2)pl.xlabel('Sampling point')pl.ylabel('Amplitude[a.u.]')pl.ylim(-1.5,1.5)pl.show()

Python科學(xué)計算——復(fù)雜信號FFT

由于波形的前后不是連續(xù)的,出現(xiàn)波形跳變,而跳變處有著非常廣泛的頻譜,因此FFT的結(jié)果中出現(xiàn)了頻譜泄漏。

<2.2>頻譜泄漏的抑制

為了減小FFT所截取的數(shù)據(jù)段前后的跳變,可以對數(shù)據(jù)先乘以一個窗函數(shù),使得其前后數(shù)據(jù)能平滑過渡。常用的hanning窗函數(shù)的定義如下:

Python科學(xué)計算——復(fù)雜信號FFT

pl.figure(figsize=(8,3))pl.plot(signal.hann(512),linewidth=2)

Python科學(xué)計算——復(fù)雜信號FFT

512點 hann 窗函數(shù)

50Hz 正弦波與hann窗函數(shù)乘積之后的重復(fù)波形如下:

Python科學(xué)計算——復(fù)雜信號FFT

我們對頻譜泄漏示例中的1kHz 和 4kHz 信號進行了 hann 窗函數(shù)處理,可以看出能量更加集中在 1kHz 和 4kHz,在一定程度上抑制了頻譜泄漏。

Python科學(xué)計算——復(fù)雜信號FFT

<3>多點頻信號FFT

以 1kHz 三角波為例,我們知道三角波信號中含有豐富的頻率信息,它的傅里葉級數(shù)展開為:

Python科學(xué)計算——復(fù)雜信號FFT

Python科學(xué)計算——復(fù)雜信號FFT

<4>掃頻信號FFT

當數(shù)字信號的頻率隨時間變化時,我們稱之為掃頻信號。以頻率隨時間線性變化的掃頻信號為例,其數(shù)學(xué)形式如下:

Python科學(xué)計算——復(fù)雜信號FFT

其頻率隨時間線性變化,當我們在 [0,1] 的時間窗口對其進行采樣時,其頻率范圍為 0~5kHz。當時間是連續(xù)時,掃頻信號的頻率也是連續(xù)的。但是在實際的處理中,是離散的點采樣,因此時間是不連續(xù)的,這就使掃頻信號的快速傅里葉變換問題退化為多點頻信號快速傅里葉變換問題。其快速傅里葉變換得到的頻譜圖如下所示:

Python科學(xué)計算——復(fù)雜信號FFT

因上述掃頻信號的頻率隨時間是線性變化的,因此功率譜是一條直線,即數(shù)字信號被采樣頻段范圍內(nèi)各個頻率的功率是一樣的。

<5>相位調(diào)制信號的FFT

以 50Hz 正弦信號相位調(diào)制到 1kHz 的信號為例,其信號形式如下:

Python科學(xué)計算——復(fù)雜信號FFT

它的時域波形,頻率響應(yīng)和相位響應(yīng)如下圖所示:

Python科學(xué)計算——復(fù)雜信號FFT

<6>FFT中的能量守恒

以掃頻信號為例,當我們要探究FFT中的能量守恒時,我們要回歸到信號最初的形式:

Python科學(xué)計算——復(fù)雜信號FFT

Python科學(xué)計算——復(fù)雜信號FFT

從頻譜圖上我們可以看出,上述數(shù)學(xué)形式的單頻信號的功率為 -3dB。在掃頻信號FFT示例中 5kHz 范圍內(nèi)信號的功率為 -40dB。它們之間的關(guān)系為:

Python科學(xué)計算——復(fù)雜信號FFT

當功率為 -3dB 的信號擴展到5kHz頻譜范圍的掃頻信號時,其功率衰減到 -40dB,這也遵循了能量守恒定律。Stay hungry, Stay foolish. -- Steve Jobs

最后,想學(xué)習Python的小伙伴們!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多