传递函数_使用python计算麦克风阵列信号的传递函数
使用python寫了一個測試麥克風陣列傳遞函數的demo,有需要的自取。該代碼使用了第三方庫ThinkDSP。
1. 傳遞函數
首先解釋下什么是傳遞函數:
把具有線性特性的對象的輸入與輸出間的關系,用一個函數(輸出波形的拉普拉斯變換與輸入波形的拉普拉斯變換之比)來表示的,稱為傳遞函數。
在麥克風陣列測試中,傳遞函數的輸入和輸出通常指標準測試信號和各麥克風接收到的信號。在音頻信號中,傳遞函數通常指頻域范圍,所以需要對時域信號進行傅立葉變換(FFT)。
2.?python中的傳遞函數
在scipy庫中有一個函數類signal,其中有一個函數TransferFunction,該函數可用于計算兩個變量之間的傳遞函數。
具體使用方法參考以下官方解釋:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.TransferFunction.html3.?python實現
需要的庫:
import thinkdspimport waveimport numpy as npimport matplotlib.pyplot as pltfrom scipy import signal思路:
生成兩個chirp信號s1和s2,把s1當作輸入信號,把s2當作從某個mic獲得的輸出信號。兩個信號僅振幅有差異,s2的振幅是s1的2倍。所以根據信號,傳遞函數=輸出/輸入,各頻率段的傳遞函數數值應該為2。
第一步,生成兩個信號。信號頻率范圍100Hz~8kHz,采樣率16kHz。傅立葉變換后的矩陣元素是復數形式,而傳遞函數計算需要取實部。
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第二步,計算傳遞函數。
s12 = signal.TransferFunction(hs2,hs1)plt.figure('TransferFunction')plt.plot(fs,s12.num/s12.den)plt.ylim(0,3)plt.show()print('finish')生成圖像,整個頻率段的?「輸出/輸入」傳遞函數值均為2,符合預設。
注意,傳遞函數并不是簡單的?輸出/輸入,其中做的信號處理都已經在函數TransferFunction中完成,可在參考文檔中自行研究。
總結
以上是生活随笔為你收集整理的传递函数_使用python计算麦克风阵列信号的传递函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lumen 配置数据库结果自动转数组_l
- 下一篇: 大学捕2000斤鱼请师生吃全鱼宴 免费福