基于希爾伯特變換的頻移法實現(xiàn)嘯叫抑制

一误澳、什么是嘯叫(Howling)

在本地擴聲系統(tǒng)中兼蕊,麥克風拾取揚聲器播放的音頻后又傳回給揚聲器播放,當擴音的增益足夠大贸毕,在某些頻率就會產(chǎn)生自激振蕩郑叠,從而產(chǎn)生嘯叫。

圖1 聲音反饋回路崖咨,x(n)為麥克風采集的音頻锻拘,y(n)為揚聲器播放的音頻

\frac{Y(\omega)}{S(\omega)} =\frac{G(\omega)}{1-G(\omega)F(\omega)}
根據(jù)奈奎斯特穩(wěn)定判據(jù),在某些頻點滿足以下條件將產(chǎn)生自激振蕩:
G(\omega)F(\omega)>1 \measuredangle G(\omega)F(\omega)=2kπ
自激振蕩導致該頻點的信號幅度不斷增大,最終形成嘯叫署拟。
嘯叫抑制主要有相移/頻移法婉宰、陷波法和自適應法,下面介紹基于希爾伯特變換的相移/頻移法推穷。

二心包、相移器

相移器的原理圖如圖2所示,其中粗線代表復數(shù)信號馒铃。輸入信號是cos(ωt+?)蟹腾,希爾伯特變換(Hilbert transformer)會將輸入信號轉(zhuǎn)換為e^{j(ωt+?) } = cos(ωt+?) + jsin(ωt+?)。將該信號與e^{jθ}(θ是期望的相位偏移)相乘区宇,得到復數(shù)信號e^{j(ωt+?+θ)}娃殖。取該復數(shù)信號的實部就得到我們想要的輸出:y= cos(ωt+?+θ)

圖2 相移器原理

將希爾伯特復數(shù)輸出表示為I+jQ议谷,可以得到y=Re\{(I+jQ)e^{jθ} \}=Re\{(I+jQ)(cosθ+jsinθ)\} y=Icosθ-Qsinθ \qquad \qquad (公式1) 從上式可得到相移器的實現(xiàn)(見圖3)炉爆。注意圖3中沒有出現(xiàn)“j”,這意味著處理的信號都是實信號卧晓!
圖3 相移器的實現(xiàn)

下面用Matlab代碼展示圖3所示的相移器的實現(xiàn)芬首。31抽頭的希爾伯特變換器的實現(xiàn)如下面代碼所示,對系數(shù)的理論值(第4節(jié)將介紹如何計算理論值)乘以Hamming窗后得到系數(shù)b1逼裆,b2是15個采樣點延遲(對應31抽頭希爾伯特變換器中心抽頭的延遲)郁稍。

    % 31-tap Hilbert transformer
    b= 2/pi * [-1/15 0 -1/13 0 -1/11 0 -1/9 0 -1/7 0 -1/5 0 -1/3 0 -1 0 1 0 … 
                1/3 0 1/5 0 1/7 0 1/9 0 1/11 0 1/13 0 1/15];
    b1= b.*hamming(31)';                          % window the coefficients
    b2= [0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 1];     % delay of 15 (center tap of HT)

接下來創(chuàng)建一個6Hz的正弦輸入信號x,其采樣率為100Hz:

    fs= 100;                    % Hz sample frequency
    Ts= 1/fs;
    N= 128;
    n= 0:N-1;
    f0= 6;                       % Hz freq of input signal
    x= cos(2*pi*f0*n*Ts);        % input signal

現(xiàn)在對x執(zhí)行希爾伯特變換:

    I= filter(b2,1,x);        % I= center tap of HT
    Q= filter(b1,1,x);        % Q= output of HT

最后根據(jù)公式1得到相移–π/3的輸出:

    theta= -pi/3;                          % rad phase shift with respect to I
    y= I*cos(theta) - Q*sin(theta);        % phase shifter output

在圖3中我們假設希爾伯特變換不會引起相移胜宇,但事實上在實現(xiàn)中會引入15個采樣點的延遲耀怜,換句話說我們是在希爾伯特轉(zhuǎn)換輸出的I的基礎上增加–π/3的相移得到輸出y。圖4打印了yI的32個樣點掸屡,可以看到yI相位相差π/3封寞。

圖4 相移器的輸入和輸出,f0=6Hz仅财,fs=100Hz狈究,?= - π/3,藍線=I盏求,綠線=y

三抖锥、頻移器

頻移器的實現(xiàn)如圖5所示,它和相移器類似碎罚,只是我們用dω*t替換公式1中的θ磅废,其中dω為期望的頻率偏移。

圖5 頻移器的實現(xiàn)

下面展示將中心頻率為12Hz的輸入信號頻移+3Hz的Matlab代碼荆烈。首先將相移器例子中展示的希爾伯特變換器的Hamming窗替換為Blackman窗拯勉。與Hamming窗相比竟趾,Blackman窗有更精確的通帶相應,代價則是犧牲了低頻的分辨率宫峦。接下來將參數(shù)量化到小數(shù)點后12bits岔帽。

    % 31-tap Hilbert transformer
    b= 2/pi * [-1/15 0 -1/13 0 -1/11 0 -1/9 0 -1/7 0 -1/5 0 -1/3 0 -1 0 1 0 … 
               1/3 0 1/5 0 1/7 0 1/9 0 1/11 0 1/13 0 1/15];
    b1= b.*blackman(31)';                         % window the coefficients
    b1= round(b1*2^12)/2^12;                      % quantize coefficients
    b2= [0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 1];     % delay of 15 (center tap of HT)

生成輸入信號x,并對它執(zhí)行希爾伯特變換导绷。這次的輸入信號不用正弦信號犀勒,而是選擇有矩形頻譜的脈沖調(diào)制信號。

    fs= 100;                       % Hz sample frequency
    Ts= 1/fs;
    N= 2048;
    n= 0:N-1;
    fc= 12;                        % Hz carrier frequency
    bw= 2;                         % Hz -3 dB bandwidth of modulated pulse
    x= .5*modpulse(fc,bw,N,fs);    % modulated pulse with approx rect spectrum
    % Apply modulated pulse to Hilbert transformer
    I= filter(b2,1,x);             % I= center tap of HT filter
    Q= filter(b1,1,x);             % Q= output of HT filter

接著通過NCO(數(shù)字振蕩器)生成正弦信號與余弦信號妥曲,并利用它們實現(xiàn)頻移贾费。

    df= 3;                              % Hz desired frequency shift
    u= mod(df*n*Ts,1);                  % phase accumulator
    theta= 2*pi*u;                      % phase
    y= I.*cos(theta) –Q.*sin(theta);    % final output

現(xiàn)在我們已經(jīng)可以得到實數(shù)輸出y的頻譜了,但如果我們將圖5中所有的信號放在一起展示會看到更多有趣的內(nèi)容檐盟。圖5有實數(shù)信號x褂萧、y和三個復數(shù)信號:希爾伯特變換的輸出、NCO的輸出遵堵、這兩者相乘的輸出箱玷。這些復數(shù)信號可以通過以下代碼得到:

    xc= I + j*Q;            % complex Hilbert transformer output
    nco= exp(j*theta);      % complex nco output
    yc= xc.*nco;            % complex product

獲取這些信號的頻譜:

    X= fft(x,N);          XdB= 20*log10(abs(x));
    XC= fft(xc,N);        XCdB= 20*log10(abs(XC));
    YC= fft(yc,N);        YCdB= 20*log10(abs(YC));
    NCO= psd(nco,N,fs);   NCOdB= 10*log10(abs(NCO));
    Y= fft(y,N);          YdB= 20*log10(abs(Y));

這些頻譜在圖6中展示。其中圖6a是實數(shù)輸入x的頻譜陌宿。圖6b是希爾伯特變換的輸出xc,可看作解析信號(analytic signal波丰,沒有負頻率分量的復數(shù)信號)壳坪,它的負頻率分量幾乎可以忽略。圖6c是NCO信號e^{jθ}掰烟,同樣是個解析信號爽蝴,只在+3Hz處有值。圖6d是xce^{jθ}相乘的結(jié)果yc纫骑,可以看到兩者相乘的結(jié)果是xc的中心頻率從12Hz移到15Hz蝎亚。最后圖6e是實數(shù)輸出y,中心頻率為15Hz先馆。
假如我們只是對兩個實數(shù)信號相乘发框,而不是對兩個復數(shù)信號相乘,那得到的會是中心頻率為9Hz和15Hz的兩個信號疊加的頻譜煤墙,這并非我們期望的結(jié)果梅惯。

圖6 a.實數(shù)輸入X b.希爾伯特輸出XC c.NCO輸出 d.相乘的結(jié)果YC e.最終輸出Y

四、希爾伯特變換

下面介紹希爾伯特變換的基本原理和實現(xiàn)仿野。
一個理想的離散希爾伯特變換的頻率響應為:H(z)=-j,\qquad 0<f<f_{s}/2 \qquad \qquad \qquad \qquad=j,\qquad -f_{s}/2<f<0 \qquad (公式2)
該響應可以通過一個濾波器近似得到铣减,該濾波器的脈沖響應為:
h[n]=\frac{2}{πn}, \qquad n為奇數(shù) \qquad \qquad \qquad=0, \qquad n為偶數(shù) \qquad (公式3)
該脈沖響應是非因果的,但可以通過截斷來近似脚作,令n=-N/2:N/2-1葫哗,其中N為偶數(shù),且N+1為抽頭數(shù)。抽頭系數(shù)可以乘上一個窗函數(shù)劣针。圖7校镐、圖8顯示7抽頭希爾伯特變換器,其中圖7抽頭系數(shù)序號與公式3保持一致酿秸,而圖8重排了序號灭翔,讓抽頭系數(shù)從b_0開始。I通道在濾波器延遲網(wǎng)絡的正中間辣苏,對應著理想希爾伯特濾波器的t=0時刻肝箱。
Q通道的響應-j=e^{-jπ/2}對應π/2的相位滯后。因此對于I=cos(ωt)稀蟋,相位滯后π/2煌张,得到Qsin(ωt)。復數(shù)信號I + jQ = cos(ωt) +jsin(ωt) = e^{jωt}退客。與實數(shù)輸入信號不同骏融,該信號沒有負頻率分量,是一個解析信號萌狂。

圖7 抽頭系數(shù)序號與公式3保持一致

圖8 抽頭系數(shù)從b0開始

在前面的章節(jié)我們實現(xiàn)了一個31抽頭的希爾伯特變換器箫踩,代碼如下:

     % 31-tap Hilbert transformer
    b= 2/pi * [-1/15 0 -1/13 0 -1/11 0 -1/9 0 -1/7 0 -1/5 0 -1/3 0 -1 0 1 0 … 
               1/3 0 1/5 0 1/7 0 1/9 0 1/11 0 1/13 0 1/15];
    b1= b.*blackman(31)';                         % window the coefficients
    b1= round(b1*2^12)/2^12;                      % quantize coefficients
    b2= [0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 1];     % delay of 15 (center tap of HT)

這些濾波器系數(shù)如圖9所示察迟。下面計算頻率響應。為了得到一個可實現(xiàn)的濾波器,我們對輸入信號延遲了15個采樣點得到I通道磁椒,因此我們要計算的頻率響應也是延遲了15個采樣點的輸入信號的響應点额。下面Matlab代碼計算得到的頻率響應如圖10所示狈癞,可以看到在低頻和頻率接近f_s/2的地方夯到,頻率響應與公式2的理想希爾伯特變換的頻率響應有較大偏差,因此我們在執(zhí)行希爾伯特變換的時候售葡,要確保輸入信號的頻率落在圖10中頻率響應的平坦部分看杭。

    N= 1024;
    k= -N/2:N/2-1;
    f= k*fs/N;
    h_Q= fft(b1,N);            % h_Q = response of b1
    h_I= fft(b2,N);            % h_I = response at center tap (delay of 15 samples)
    h= h_Q./h_I;
    h= fftshift(h);            %shift dc to center (swap left and right halves of h)
    plot(f,imag(h))
圖9 31抽頭的希爾伯特變換器系數(shù)
圖10 31抽頭的希爾伯特變換器的頻率響應,fs=100Hz

參考文章
Phase or Frequency Shifter Using a Hilbert Transformer
嘯叫抑制之陷波法

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挟伙,一起剝皮案震驚了整個濱河市楼雹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌像寒,老刑警劉巖烘豹,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诺祸,居然都是意外死亡携悯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門筷笨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憔鬼,“玉大人龟劲,你說我怎么就攤上這事≈峄颍” “怎么了昌跌?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長照雁。 經(jīng)常有香客問我蚕愤,道長,這世上最難降的妖魔是什么饺蚊? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任萍诱,我火速辦了婚禮,結(jié)果婚禮上污呼,老公的妹妹穿的比我還像新娘裕坊。我一直安慰自己,他們只是感情好燕酷,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布籍凝。 她就那樣靜靜地躺著,像睡著了一般苗缩。 火紅的嫁衣襯著肌膚如雪饵蒂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天酱讶,我揣著相機與錄音苹享,去河邊找鬼。 笑死浴麻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的囤攀。 我是一名探鬼主播软免,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼焚挠!你這毒婦竟也來了膏萧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蝌衔,失蹤者是張志新(化名)和其女友劉穎榛泛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體噩斟,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡曹锨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了剃允。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沛简。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡齐鲤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出椒楣,到底是詐尸還是另有隱情给郊,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布捧灰,位于F島的核電站淆九,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏毛俏。R本人自食惡果不足惜炭庙,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拧抖。 院中可真熱鬧煤搜,春花似錦、人聲如沸唧席。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淌哟。三九已至迹卢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間徒仓,已是汗流浹背腐碱。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留掉弛,地道東北人症见。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像殃饿,于是被迫代替她去往敵國和親谋作。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容