fft的結(jié)果是有復(fù)數(shù).
成都創(chuàng)新互聯(lián)公司成都網(wǎng)站建設(shè)按需求定制開發(fā),是成都網(wǎng)站維護(hù)公司,為房屋鑒定提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開發(fā)等。成都網(wǎng)站營銷推廣熱線:028-86922220
perl代碼運(yùn)行的結(jié)果也是復(fù)數(shù), 只不過實(shí)部虛部存儲(chǔ)方法不同.
你可以舉個(gè)你希望的python的輸入輸出的例子
你提問的問題,有點(diǎn)錯(cuò)誤。
波形是時(shí)域的,F(xiàn)FT變換就是為了將波形從時(shí)域轉(zhuǎn)換到頻域。
做了FFT 以后,得到的數(shù)據(jù)就是頻率分量。
如果你說的是python fft代碼如何寫。下面就是:
這邊演示的是語音波形。
wf?=?wave.open(wav_file,"rb")
params?=?wf.getparams()
nchannels,?sampwidth,?framerate,?nframes?=?params[:4]
str_data?=?wf.readframes(nframes)
wf.close()
#將波形數(shù)據(jù)轉(zhuǎn)化為數(shù)組
s?=?np.fromstring(str_data,?dtype=np.short)
#wave_data。?這里波形是語音波形
s?=?np.fft.fft(s)??#fft??獲得頻譜
1.傅利葉逆變換得到原始信號
注意fft的結(jié)果是個(gè)復(fù)數(shù),這時(shí)取絕對值得到頻率對應(yīng)的振幅。ifft的結(jié)果也是復(fù)數(shù),有正有負(fù),因?yàn)樵夹盘栆彩怯姓胸?fù),這時(shí)不能取絕對值,而應(yīng)取實(shí)數(shù)部分。虛數(shù)部分都接近于0.當(dāng)然如果原始信號沒有負(fù)數(shù),也可取絕對值。
2.模擬去除高頻噪聲
現(xiàn)在原始信號中加入了頻率為450,500的兩個(gè)小幅的高頻信號,模擬高頻噪聲,可以發(fā)現(xiàn)信號波形中有很多毛刺。fft的結(jié)果頻率是正頻率從0到最高,然后負(fù)頻率再從最高到0,所以去除高頻信號就是讓中間那部分為0。
二維FFT常用在圖像處理上,首先要能理解二維FFT的意義,否則很難明白它到底是怎么工作的。
第一列是原圖和對應(yīng)的頻率信息,第二列是去除低頻部分后,F(xiàn)FT逆變換得到的圖像。第三列是去除高頻部分后FFT逆變換得到的圖像。
從第二列可以看出高頻貢獻(xiàn)了圖像的細(xì)節(jié)。從白到黑的邊界保留了下來。而原圖中大片的白與大片的黑在這個(gè)圖中沒什么區(qū)別。
第三列中保留了原圖中的亮部與灰部,而由黑到白的臨界線卻很模糊。細(xì)小的白線黑線也沒能顯示。所以低頻貢獻(xiàn)了圖像的明暗。
2.工作原理理解
二維FFT就是先對行做次一維FFT,這樣每個(gè)元素都是關(guān)于行頻率信息了,然后再對列做一維FFT,這樣每個(gè)元素都包含了行和列的頻率信息。每個(gè)元素都是個(gè)復(fù)數(shù),取絕對值可得到振幅,從實(shí)部與虛部的比值可等到相位,在二維矩陣的位置信息包含了頻率大小和方向。方向在一維FFT中是不用考慮的。
FFT2的結(jié)果也是正頻率從0到高然后負(fù)頻率從高到0.fftshift()之后會(huì)將低頻放到中間位置。
第一幅圖的頻譜是中間一條白線,也就是說許多個(gè)正弦波沿橫向傳播??v向上沒有變化。
第三幅圖的頻譜是十字形加一條從左下角到右上角的直線。說明原圖在橫向,縱向都有變化,變化的方向從左下角到右上角。
從中心到頻譜圖上某一點(diǎn)構(gòu)成的向量方向就是這個(gè)波傳播的方向。
正負(fù)對稱才能消除虛部,這點(diǎn)與一維FFT原理一致。
FFT (Fast Fourier Transform, 快速傅里葉變換) 是離散傅里葉變換的快速算法,也是數(shù)字信號處理技術(shù)中經(jīng)常會(huì)提到的一個(gè)概念。用快速傅里葉變換能將時(shí)域的數(shù)字信號轉(zhuǎn)換為頻域信號,轉(zhuǎn)換為頻域信號后我們可以很方便地分析出信號的頻率成分。
當(dāng)我們把雙頻信號FFT示例中的 fft_size 的值改為 2**12 時(shí),這時(shí),基頻為 16Hz,不能被 1kHz整除,所以 1kHz 處發(fā)生了頻譜泄露,而它能被 4kHz 整除,所以 4kHz 可以很好地被采樣。
由于波形的前后不是連續(xù)的,出現(xiàn)波形跳變,而跳變處有著非常廣泛的頻譜,因此FFT的結(jié)果中出現(xiàn)了頻譜泄漏。
為了減小FFT所截取的數(shù)據(jù)段前后的跳變,可以對數(shù)據(jù)先乘以一個(gè)窗函數(shù),使得其前后數(shù)據(jù)能平滑過渡。常用的hanning窗函數(shù)的定義如下:
50Hz 正弦波與hann窗函數(shù)乘積之后的重復(fù)波形如下:
我們對頻譜泄漏示例中的1kHz 和 4kHz 信號進(jìn)行了 hann 窗函數(shù)處理,可以看出能量更加集中在 1kHz 和 4kHz,在一定程度上抑制了頻譜泄漏。
以 1kHz 三角波為例,我們知道三角波信號中含有豐富的頻率信息,它的傅里葉級數(shù)展開為:
當(dāng)數(shù)字信號的頻率隨時(shí)間變化時(shí),我們稱之為掃頻信號。以頻率隨時(shí)間線性變化的掃頻信號為例,其數(shù)學(xué)形式如下:
其頻率隨時(shí)間線性變化,當(dāng)我們在 [0,1] 的時(shí)間窗口對其進(jìn)行采樣時(shí),其頻率范圍為 0~5kHz。當(dāng)時(shí)間是連續(xù)時(shí),掃頻信號的頻率也是連續(xù)的。但是在實(shí)際的處理中,是離散的點(diǎn)采樣,因此時(shí)間是不連續(xù)的,這就使掃頻信號的快速傅里葉變換問題退化為多點(diǎn)頻信號快速傅里葉變換問題。其快速傅里葉變換得到的頻譜圖如下所示:
以 50Hz 正弦信號相位調(diào)制到 1kHz 的信號為例,其信號形式如下:
它的時(shí)域波形,頻率響應(yīng)和相位響應(yīng)如下圖所示:
以掃頻信號為例,當(dāng)我們要探究FFT中的能量守恒時(shí),我們要回歸到信號最初的形式:
用FFT(快速傅里葉變換)可以將時(shí)域的數(shù)字信號轉(zhuǎn)換為頻域信號,轉(zhuǎn)換為頻域信號之后就可以分析出信號的頻率成分,最后還可以將處理完畢的頻域信號通過IFFT(逆變換)轉(zhuǎn)換為時(shí)域信號。
這里使用Scipy模塊中的fft實(shí)現(xiàn)時(shí)域信號的FFT變換,如下:
時(shí)域信號:該信號為帶有噪聲的正弦信號經(jīng)過小波去噪后的圖像
轉(zhuǎn)換結(jié)果: