国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換

瀏覽:5日期:2022-06-17 18:05:29

傅里葉變換是在高數(shù)是一個很重要的知識點,今天將結(jié)合Python代碼實現(xiàn)傅立葉變換。

傅立葉變換

我們平時是如何去分解一個復(fù)雜的問題呢?一個經(jīng)典的方法就是把這個復(fù)雜的問題分解成為多個簡單的可操作的子問題, 傅立葉變換也是基于這個思想。

傅里葉分析是研究如何將數(shù)學(xué)函數(shù)分解為一系列更簡單的三角函數(shù)的領(lǐng)域。傅里葉變換是該領(lǐng)域的一種工具,用于將函數(shù)分解為其分量頻率。

在本教程中,傅立葉變換是一種工具,可以獲取信號并查看其中每個頻率的功率。看一看該傅立葉變換中的重要術(shù)語:

信號:信號是隨時間變化的信息。例如,音頻,視頻和電壓走線都是信號的示例。 頻率:頻率是某物重復(fù)的速度。例如,時鐘以1赫茲(Hz)的頻率滴答,或每秒重復(fù)1次。 功率:功率表示每個頻率的強度。

下圖是一些正弦波的頻率和功率的直觀演示:

Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換

第一個是低頻正弦波,第二個是高頻正弦波,第三個是低頻低功率正弦波,因此低功率正弦波比其它兩個正弦波的峰較小。

時域與頻域

時域與頻域是查看信號的兩種不同方式,即信號的組成頻率或隨時間變化的信息。

在時域中,信號是隨時間(x軸)幅度(y軸)變化的波。您最有可能在時域中查看圖表,例如:

Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換

這是一些音頻的圖像,它是一個時域信號。橫軸表示時間,縱軸表示振幅。

在頻域中,信號表示為一系列頻率(x軸),每個頻率都具有關(guān)聯(lián)的功率(y軸)。下圖是經(jīng)過傅立葉變換后的上述音頻信號:

Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換

代碼實現(xiàn)正弦波

音頻本質(zhì)上是正弦波。

下面是產(chǎn)生正弦波的代碼:

import numpy as npfrom matplotlib import pyplot as pltSAMPLE_RATE = 44100 # 赫茲DURATION = 5 # 秒def generate_sine_wave(freq, sample_rate, duration): x = np.linspace(0, duration, sample_rate * duration, endpoint=False) frequencies = x * freq y = np.sin((2 * np.pi) * frequencies) return x, y# 產(chǎn)生持續(xù)5秒的2赫茲正弦波x, y = generate_sine_wave(2, SAMPLE_RATE, DURATION)plt.plot(x, y)plt.show()

Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換

x軸以秒為單位表示時間,并且由于每秒鐘的時間都有兩個峰值,因此可以看到正弦波每秒振蕩兩次。

混合音頻

下面將兩個正弦波,混合音頻信號僅包括兩個步驟:

將正弦波加在一起,然后進行歸一化的操作。

具體實現(xiàn)的代碼如下。

_, nice_tone = generate_sine_wave(400, SAMPLE_RATE, DURATION)_, noise_tone = generate_sine_wave(4000, SAMPLE_RATE, DURATION)noise_tone = noise_tone * 0.3mixed_tone = nice_tone + noise_tone

下一步是歸一化,或縮放信號以適合目標(biāo)格式。由于以后將如何存儲音頻,目標(biāo)格式為16位整數(shù),范圍為-32768到32767:

normalized_tone = np.int16((mixed_tone / mixed_tone.max()) * 32767)plt.plot(normalized_tone[:1000])plt.show()

Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換

看到的正弦波是生成的400 Hz音調(diào),將上面的正弦波轉(zhuǎn)化為音頻,最簡單的方法是使用SciPy的wavfile.write方法將其存儲在WAV文件中。16位整數(shù)是WAV文件的標(biāo)準(zhǔn)數(shù)據(jù)類型,因此需要將信號標(biāo)準(zhǔn)化為16位整數(shù):

from scipy.io.wavfile import write# 記住,采樣率=44100赫茲是我們的播放率write('mysinewave.wav', SAMPLE_RATE, normalized_tone)

Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換

這個音頻聽起來音調(diào)很高。

完成此步驟后,就當(dāng)作音頻樣本了。下一步是使用傅立葉變換消除高音調(diào)!

傅立葉變換

現(xiàn)在對生成的音頻上使用FFT了。FFT是一種算法,可實現(xiàn)傅立葉變換并可以在時域中為信號計算頻譜。

from scipy.fft import fft, fftfreq# 標(biāo)準(zhǔn)化音調(diào)中的樣本數(shù)N = SAMPLE_RATE * DURATIONyf = fft(normalized_tone)xf = fftfreq(N, 1 / SAMPLE_RATE)plt.plot(xf, np.abs(yf))plt.show()

Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換我們可以在正頻率中看到兩個峰值,正頻率峰值位于400 Hz和4000 Hz,與之前生成的音頻的頻率相對應(yīng)。

計算傅里葉變換

yf = fft(normalized_tone)xf = fftfreq(N, 1 / SAMPLE_RATE)

上面代碼的功能

fft() 計算轉(zhuǎn)換本身。 fftfreq()計算的輸出中每個倉中心的頻率fft()。沒有這個,就無法在頻譜上繪制x軸

fft()輸出的頻譜圍繞y軸反射,因此負(fù)半部分是正半部分的鏡像,我們一般只需計算一半對稱值,即可更快地進行傅立葉變換。scipy.fft以的形式實施此速度駭客rfft()。

from scipy.fft import rfft, rfftfreq# 注意前面多余的“r”yf = rfft(normalized_tone)xf = rfftfreq(N, 1 / SAMPLE_RATE)plt.plot(xf, np.abs(yf))plt.show()

Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換

過濾信號

傅里葉變換的一大優(yōu)點是它是可逆的,我們可以利用此優(yōu)勢來過濾音頻并擺脫高音調(diào)頻率。

# 最大頻率為采樣率的一半points_per_freq = len(xf) / (SAMPLE_RATE / 2)# 我們的目標(biāo)頻率是4000赫茲 將44100變成4000target_idx = int(points_per_freq * 4000)

然后,您可以將其設(shè)置yf為0目標(biāo)頻率附近的index來擺脫它:

yf[target_idx - 1 : target_idx + 2] = 0plt.plot(xf, np.abs(yf))plt.show()

Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換

由于只有一個高峰,下面應(yīng)用傅立葉逆變換返回時域。

應(yīng)用逆FFT與應(yīng)用FFT相似:

from scipy.fft import irfftnew_sig = irfft(yf)plt.plot(new_sig[:1000])plt.show()

由于您正在使用rfft(),因此需要使用irfft()來應(yīng)用反函數(shù)。但是,如果您使用過fft(),則反函數(shù)將是ifft()。現(xiàn)在,您的繪圖應(yīng)如下所示:

Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換

現(xiàn)在有一個以400 Hz振蕩的正弦波,并且您已經(jīng)成功地消除了4000 Hz的噪聲。

對信號進行歸一化,然后再將其寫入文件。

norm_new_sig = np.int16(new_sig * (32767 / new_sig.max()))write('clean.wav', SAMPLE_RATE, norm_new_sig)

Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換

到此這篇關(guān)于Python使用scipy.fft進行大學(xué)經(jīng)典的傅立葉變換的文章就介紹到這了,更多相關(guān)Python 傅立葉變換內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 亚洲精品国产第一区二区多人 | 99青青| 成人合成mv福利视频网站 | 国内精品成人女用 | 在线视频中文 | 免费又黄又爽视频 | 美女又黄又免费的视频 | 自拍视频在线观看视频精品 | 久久国产精品无码网站 | 久久亚洲精品tv | 日韩在线视频网址 | 性久久久久久久久久 | 免费人成黄页网站在线观看 | 欧美精选欧美极品 | 精品视频h | 久久99国产乱子伦精品免 | 成人在线免费网站 | 兔子先生节目在线观看免费 | 成人三级在线播放 | 国产区精品在线 | 免费va国产高清不卡大片 | 亚洲国产欧美日韩 | 91精品国产免费网站 | 国产真实一区二区三区 | 国产福利微拍精品一区二区 | 亚洲国产福利精品一区二区 | 看性过程三级视频在线观看 | 久久精品视频一区 | 怡红院成人永久免费看 | 国产精品色午夜视频免费看 | 国产全部理论片线观看 | 黄网在线观看免费网站台湾swag | 亚洲精品色一区二区三区 | 美国一级毛片片aa成人 | 国产成人精品免费午夜 | 国产精品美女免费视频大全 | 欧美日韩ay在线观看 | 国产成人综合网在线观看 | 亚洲天堂久久新 | 国产亚洲自在精品久久 | 久久99国产精一区二区三区 |