簡體   English   中英

雙耳音頻的頭部相關脈沖響應

[英]Head related impulse response for binaural audio

我正在處理音頻數字信號處理和雙耳音頻處理。 我還在學習基礎知識。 現在,想法是進行反卷積並獲得脈沖響應。

請參閱隨附的屏幕截圖在此處輸入圖像描述

正在發生的事情的詳細描述:

在這里,指數掃描信號被獲取並通過揚聲器回放。 使用麥克風錄制回放。 使用零填充(可能是原始長度的兩倍)擴展記錄的信號,並且原始指數掃描信號也被擴展。 兩者都采用 FFT(擴展記錄和擴展原始),它們的 FFT 被划分,我們得到房間轉移 function。 最后,采用逆 FFT 並執行一些加窗以獲得脈沖響應。

我的問題:

我很難在 python 中實現這個圖。 你將如何划分兩個 FFT? 可能嗎? 我可能可以執行所有步驟,例如零填充和 fft,但我想我沒有走正確的路。 我不明白窗口和丟棄后半部分選項。

請任何有他/她知識的人告訴我如何在 python 中使用掃描信號實現這個? 只是一個小例子也有助於用很少的情節獲得一個想法。 請幫忙。

圖片來源: http://www.four-audio.com/data/MF/aes-swp-english.pdf

提前致謝, Sanket Jain

這有點過頭了,但也許以下一些建議會有所幫助。

首先,我在 Steve Smith 的書The Scientist and Engineer's Guide to Digital Signal Processing中看到了非常有用的示例代碼。 這包括范圍操作,從卷積基礎到 FFT 算法本身。 示例代碼是 BASIC,而不是 Python。 但是 BASIC 是完全可讀的,應該很容易翻譯。

我不完全確定您描述的具體計算,但是這個 realm 中的許多操作(在處理多個信號時)結果只是簡單地使用了構成元素的加法或減法。 要獲得權威答案,我認為您將在 Stack Overflow 的信號處理論壇或DSP 相關的論壇之一上獲得更好的運氣。

如果您確實在其他地方得到了答案,最好在這里回顧一下或完全刪除這個問題以減少混亂。

是的,在 python 中划分兩個 FFT 光譜是可能的並且實際上很容易實現(但有一些警告)。 簡單地說:由於兩個時間信號的卷積對應於將它們的光譜相乘,反之亦然,可以通過划分光譜來實現反卷積。

下面是一個使用 numpy 進行簡單反卷積的示例:

x是您的激勵掃描信號, y是記錄的掃描信號,您希望從中獲得脈沖響應。)

import numpy as np
from numpy.fft import rfft, irfft

# define length of FFT (zero padding): at least double length of input
input_length = np.size(x)
n = np.ceil(np.log2(input_length)) + 1
N_fft = int(pow(2, n))

# transform 
# real fft: N real input -> N/2+1 complex output (single sided spectrum)
# real ifft: N/2+1 complex input -> N real output
X_f = rfft(x, N_fft)
Y_f = rfft(x, N_fft)

# deconvolve
H = Y_f / X_f

# backward transform
h = irfft(H, N_fft)

# truncate to original length
h = h[:input_length]

這個簡單的解決方案是一個實用的解決方案,但可以(並且應該)改進。 一個問題是,在 X_f 具有低幅度的那些頻率下,您將獲得本底噪聲的提升。 例如,如果您的指數正弦掃描從 100Hz 開始,對於低於該頻率的頻率區間,您會得到(幾乎)零的除法。 一個簡單的可能解決方案是首先反轉 X_f,應用帶限濾波器(高通+低通)以移除“增強區域”,然后將其與 Y_f 相乘:

# deconvolve
Xinv_f = 1 / X_f
Xinv_f = Xinv_f * bandlimit_filter
H = Y_f * Xinv_f

關於失真:指數正弦掃描的一個很好的特性是測量期間產生的諧波失真(例如,揚聲器中的非線性)將在反卷積后的“主”響應之前產生較小的“側”響應(有關更多詳細信息,請參閱) . 這些側面響應是失真產物,可以通過時間 window 簡單地消除。 如果“主要”響應沒有延遲(從 t=0 開始),這些側面響應將出現在整個 iFFT 的末尾,因此您可以通過將后半部分窗口化來刪除它們。

從信號理論的角度來看,我不能保證這是 100% 正確的,但我認為它說明了這一點並且有效;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM