传递函数_使用python计算麦克风阵列信号的传递函数
使用python寫(xiě)了一個(gè)測(cè)試麥克風(fēng)陣列傳遞函數(shù)的demo,有需要的自取。該代碼使用了第三方庫(kù)ThinkDSP。
1. 傳遞函數(shù)
首先解釋下什么是傳遞函數(shù):
把具有線性特性的對(duì)象的輸入與輸出間的關(guān)系,用一個(gè)函數(shù)(輸出波形的拉普拉斯變換與輸入波形的拉普拉斯變換之比)來(lái)表示的,稱為傳遞函數(shù)。
在麥克風(fēng)陣列測(cè)試中,傳遞函數(shù)的輸入和輸出通常指標(biāo)準(zhǔn)測(cè)試信號(hào)和各麥克風(fēng)接收到的信號(hào)。在音頻信號(hào)中,傳遞函數(shù)通常指頻域范圍,所以需要對(duì)時(shí)域信號(hào)進(jìn)行傅立葉變換(FFT)。
2.?python中的傳遞函數(shù)
在scipy庫(kù)中有一個(gè)函數(shù)類signal,其中有一個(gè)函數(shù)TransferFunction,該函數(shù)可用于計(jì)算兩個(gè)變量之間的傳遞函數(shù)。
具體使用方法參考以下官方解釋:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.TransferFunction.html3.?python實(shí)現(xiàn)
需要的庫(kù):
import thinkdspimport waveimport numpy as npimport matplotlib.pyplot as pltfrom scipy import signal思路:
生成兩個(gè)chirp信號(hào)s1和s2,把s1當(dāng)作輸入信號(hào),把s2當(dāng)作從某個(gè)mic獲得的輸出信號(hào)。兩個(gè)信號(hào)僅振幅有差異,s2的振幅是s1的2倍。所以根據(jù)信號(hào),傳遞函數(shù)=輸出/輸入,各頻率段的傳遞函數(shù)數(shù)值應(yīng)該為2。
第一步,生成兩個(gè)信號(hào)。信號(hào)頻率范圍100Hz~8kHz,采樣率16kHz。傅立葉變換后的矩陣元素是復(fù)數(shù)形式,而傳遞函數(shù)計(jì)算需要取實(shí)部。
s1 = thinkdsp.ExpoChirp(100,8000,1) #振幅為1wav1 = s1.make_wave(1,0,16000)w1 = wav1.make_spectrum()fs?=?w1.fshs1?=?w1.ampss2 = thinkdsp.ExpoChirp(100,8000,2) #振幅為2wav2 = s2.make_wave(1,0,16000)w2 = wav2.make_spectrum()hs2?=?w2.amps第二步,計(jì)算傳遞函數(shù)。
s12 = signal.TransferFunction(hs2,hs1)plt.figure('TransferFunction')plt.plot(fs,s12.num/s12.den)plt.ylim(0,3)plt.show()print('finish')生成圖像,整個(gè)頻率段的?「輸出/輸入」傳遞函數(shù)值均為2,符合預(yù)設(shè)。
注意,傳遞函數(shù)并不是簡(jiǎn)單的?輸出/輸入,其中做的信號(hào)處理都已經(jīng)在函數(shù)TransferFunction中完成,可在參考文檔中自行研究。
總結(jié)
以上是生活随笔為你收集整理的传递函数_使用python计算麦克风阵列信号的传递函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: lumen 配置数据库结果自动转数组_l
- 下一篇: python notebook右侧网页_