ANC主動降噪理論及Matlab代碼實現

根據系統是否有參考信號傳感器可將ANC系統大致的分爲前饋型和反饋型。

前饋控制是產生次級噪聲之前就通過傳感器測量初級噪聲的頻率以獲取參考信號。

反饋控制不需要測得參考信號就產生次級噪聲進行相消干涉

反饋型ANC系統 

反饋型 ANC 系統中沒有傳感器來測得參考輸入信號,僅通過誤差傳感器獲取經相消干涉後的殘餘噪聲並將其送入到反饋控制器,進而達到調節次級聲源$y_n$的目的,使其發出與初級噪聲幅值相等相位相反的次級噪聲

  反饋型ANC系統避免了對初級噪聲的提取,也就不存在FM問題,反饋系統因具有一定的主動阻尼而可以有效抑制系統的暫態信號。但是反饋型系統魯棒性較差,且對寬帶噪聲的處理能力較差,一般適用於無法安裝參考信號傳感器的場景。

前饋型ANC系統

  前饋型ANC系統相較於反饋型增加了一個獲取參考信號的傳感器。誤差傳感器測得的殘餘噪聲信號連同傳感器獲取的參考信號均作爲控制器的輸入。參考信號可由聲學傳感器獲取,也可由非聲學傳感器(如轉速計、加速度計等)獲得。但聲學傳感器的引入容易造成聲反饋現象,從而削弱系統的魯棒性。故而窄帶 ANC 系統中的參考信號一般由非聲學傳感器採集。通過非聲學傳感器可採集到噪聲源信號的同步信號(如轉速、加速度等),按照一定的線性關係可將其轉換爲頻率值,根據該頻率值可使信號發生器產生與窄帶噪聲頻率一致的參考信號。前饋型 ANC 系統的物理模型如圖 2.2 所示。

  其中,控制器以參考信號和殘餘噪聲爲輸入,產生並調節次級聲源信號$y_n$ ,驅動次級揚聲器發出次級噪聲,與初級聲源產生的噪聲進行相消干涉,最終使得誤差傳感器處的聲壓值最小。前饋型 ANC 系統具有很強的魯棒性,且不僅適用於窄帶噪聲信號,也可用於處理寬帶噪聲信號。

傳統ANC算法

  噪聲信號隨時間的推移而不斷變化,其特性無法進行預先估計,這一性質導致噪聲很難被實時跟蹤。ANC 技術要求對時變的噪聲輸入信號進行跟蹤,從而調節控制器使產生的次級噪聲信號能最大的削弱噪聲輸入信號自適應數字信號處理可以很好的跟蹤時變信號,通過某種優化誤差準則不斷調整產生所需信號。而這種優化誤差準則實際上就屬於 ANC 算法。

FXLMS算法

ANC系統傳統算法結構

  其中$W_n(z)$爲自適應濾波器,$S(z)$次級通道;$p(n)$爲初級噪聲;$e(n)$爲系統殘餘噪聲;x(n)爲參考噪聲。最小均方誤差(Least Mean Square, LMS)算法以最陡下降法爲奠基石,具有較爲出衆的迭代更新速度,應用非常廣泛。但在ANC系統中,次級通道$S(z)$的存在會導致殘餘信號和參考信號間存在延時,進而削弱ANC系統的穩定性。

  Morgan 在 LMS 的基礎上提出了 FXLMS,在參考信號$x(n)$送入 LMS 算法模塊前增加一個對次級通道傳遞函數的估計$S(z)$,從而解決次級通道所引起的相關延時問題,如圖 2.4 所示。FXLMS 算法應用在 ANC 系統中簡單且有效,在 ANC 算法中可謂歷久而彌新,得到了廣泛推廣。

FXLMS算法結構

次級通道在線辨識

  在ANC系統中,通常將數模轉換(D\A)、信號方法電路、模數轉換(A\D)、濾波電路、揚聲器、傳聲器等電子設備以及揚聲器到傳聲器之間的實際管道等物理通道的組合稱之爲次級通道。就實際應用而言,次級通道的傳遞函數顯然無法明確得知,而 ANC 系統中的自適應濾波器可對次級通道進行估計。當傳遞函數爲時變函數時,採用在線辨識算法,即在 ANC 系統運行的同時對次級通道進行估計。下圖給出了含在線辨識的 FXLMS 算法結構,自適應濾波器的輸出$y_n$引入線辨識系統,作爲LMS 算法的輸入。同時將系統中的殘餘噪聲信號與$y_n$經次級通道的估計之後得到的$\hat{y}_p(n)$相比較,將所得到的誤差也用作 LMS 算法的激勵,調節參數,不斷逼近次級通道傳遞函數,完成對次級通道的實時在線辨識。

含在線辨識的 FXLMS 算法結構

  次級通道的在線辨識應當滿足兩個基本要求:實現對次級通道較爲精準的估計;同時在線辨識不應該對主降噪系統產生影響。而圖 2.5 所示的次級通道的在線辨識對$y(n)$進行直接處理,使得這兩個基本要求相互矛盾。故而實際的 ANC 系統應在在線辨識不被幹擾與辨識不對主降噪系統產生干擾之間取得一個相對平衡。爲在這兩者間獲取更爲適宜的平衡點,Eriksson 提出增加輔助隨機噪聲作爲在線辨識系統的激勵,而在主降噪系統中$y(n)$減去輔助噪聲之後再驅動揚聲器產生聲音信號進入次級通道。但輔助噪聲又對殘餘噪聲造成了影響,Lan 在研究寬帶 ANC系統時提出了通過$|e(n)|$對輔助噪聲進行進一步的約束。劉在Lan 的基礎上針對窄帶前饋 ANC系統,改爲利用$|e(n-1)|$對送入系統的輔助噪聲進行約束,如圖2.6 所示。本文所展開的在線辨識採用的正是該方法。

  次級通道的在線辨識可對時變次級通道傳遞函數進行估計,但同時增加了整個 ANC 系統的負擔,此外,輔助噪聲的存在仍在一定程度上削弱了 ANC 系統的魯棒性。

帶自激的在線辨識FXLMS算法結構

次級通道離線辨識

  當次級通道環境不隨着時間而改變時,可以使用離線辨識算法。離線辨識是運行 ANC 系統進行降噪之前針對次級通道預先進行訓練估計,固定並保存作爲訓練結果的次級通道模型,再將該模型引入到 ANC 系統並啓動系統進行降噪。次級通道的離線辨識原理圖如圖 2.7 所示。

次級通道離線辨識原理圖

  其中,白噪聲信號$v(n)$作爲系統在第n 時刻的激勵,此刻次級通道的輸出爲$d(n)$,即離線辨識系統的期望信號。$y_v(n)$則是白噪聲激勵信號經過次級通道的估計函數$\hat{S}_n(z)$的輸出,$y_v(n)$與期望信號$d(n)$之差即爲辨識誤差$e_o(n)$,送入到 LMS 算法中。經過不斷迭代更新後當辨識誤差$e_o(n)$趨近於零時,$y_v(n)$與期望信號$d(n)$趨近於相同,則可知次級通道的估計函數$\hat{S}_n(z)$趨近於次級通道$S(z)$,實現了對次級通道的離線辨識。

  離線辨識是脫離 ANC 降噪系統,獨立進行系統辨識,不會給 ANC 降噪系統增加運行負擔,同樣不會損害 ANC 降噪系統的魯棒性。若 ANC 系統的次級通道傳遞函數時不變,則離線辨識具有一定的優勢,在本文後期具體實驗時會給出更爲直觀的說明。

FM 問題及非平穩

  在前饋型 ANC 系統中,對參考信號的提取採用非聲學傳感器時,若傳感器長時間工作將會累積損耗最終致使精度減削,採集到的參考信號頻率將與實際初級噪聲的頻率存在誤差。又或者,當信號發生器發出的信號不夠精確,與期望存在誤差。這些情況最終導致參考信號頻率與實際噪聲頻率間存在誤差,即所謂的 FM。

  FM 問題對窄帶前饋 ANC 具有致命性的影響力。哪怕系統中僅存在 1%的 FM 量,也將導致系統無法進行有效消噪。本文將在第三章和第六章分別從實時仿真以及實際實驗兩方面分析說明 FM 問題。

  另外,噪聲源設備的速度變化將直接表現爲初級噪聲信號頻率的變化,而頻率不穩定的初級噪聲對系統的魯棒性及跟蹤能力有着毀壞性的損傷。非平穩一直是存在於實際的 ANC 應用中不可避免的又一問題,當初級噪聲表現出非平穩時,採集參考信號的傳感器會有響應延時並最終引起非平穩的 FM。在本文的第三章將對非平穩的 FM 進行仿真分析。

本章小結

  本章對 ANC 技術的理論基礎進行了詳細介紹。首先,針對 ANC 系統分別從反饋型和前饋型兩種類型對 ANC 系統類型進行概要描述。其次,詳細描述了傳統 ANC 算法,對 FXLMS 算法的基礎 LMS 略有介紹,重點以 FXLMS 算法展開論述,繼而詳解了次級通道的在線辨識與離線辨識,並對在線辨識與離線辨識的應用場景進行了簡要說明。最後,針對存在於前饋型 ANC系統中的 FM 及非平穩問題進行簡要說明。

 

 

代碼實現

 

 

x(n):參考信號

u(n):控制信號

d(n):期望信號

y(n):輸出信號

r(n):x濾波後的信號

e(n):誤差信號

W(z):自適應濾波器

G(z):真實的次級通道

$\hat{G}(z)$:估計的次級通道

 

 

 

%              +-----------+                       +   
% x(k) ---+--->|   P(z)    |--yp(k)----------------> sum --+---> e(k)
%         |    +-----------+                          ^-   |
%         |                                           |    |
%         |        \                                ys(k)  |     
%         |    +-----------+          +-----------+   |    |
%         +--->|   C(z)    |--yw(k)-->|   S(z)    |---+    |
%         |    +-----------+          +-----------+        |
%         |            \                                   |
%         |             \----------------\                 |
%         |                               \                |
%         |    +-----------+          +-----------+        |
%         +--->|   Sh(z)   |--xs(k)-->|    LMS    |<-------+
%              +-----------+          +-----------+        

% LMS最小均方誤差
% S(z)次級通道傳遞函數      % ys(k)次級聲源
% P(z)主通道傳遞函數        % yp(k)初級聲源
% C(z)控制器               % yw(k)控制器
% Sh(z)傳感器函數          % xs(k)傳感器參考信號

clear
T=1000; % 仿真持續時間

% 我們不知道p(z)和S(z),所以我們必須建立dummy虛擬路徑
Pw=[0.01 0.25 0.5 1 0.5 0.25 0.01];
Sw=Pw*0.25;

x_iden=randn(1,T); % 產生shape=(1,1000)的白噪聲信號估計S(z)

% 送至actuator執行,在傳感器位置測量,
y_iden=filter(Sw, 1, x_iden);

% 然後,開始識別過程
Shx=zeros(1,16);       % 傳感器Sh(z)的狀態
Shw=zeros(1,16);       % 傳感器Sh(z)的權重
e_iden=zeros(1,  T);   % 識別錯誤的數據緩衝區

%LMS 算法
% [Shy,Shw]=lms(Shx,y_iden,x_iden,Shw,e_iden,T);
mu=0.1;                         % 學習率
for k=1:T                      % 離散時間 k
    Shx=[x_iden(k) Shx(1:15)];  % 更新傳感器的狀態
    Shy=sum(Shx.*Shw);            % 計算傳感器Sh(z)的輸出
    e_iden(k)=y_iden(k)-Shy;    % 計算誤差     
    Shw=Shw+mu*e_iden(k)*Shx;   % 調整權重
end

% 檢查結果
subplot(2,1,1)
plot((1:T), e_iden)
ylabel('Amplitude');
xlabel('Discrete time k');
legend('Identification error');
subplot(2,1,2)
stem(Sw) 
hold on 
stem(Shw, 'r*')
ylabel('Amplitude');
xlabel('Numbering of filter tap');
legend('S(z)係數', 'Sh(z)係數')


% 第second task二個任務是主動控制
X=randn(1,T);

% 測量傳感器位置接收的噪聲,
Yd=filter(Pw, 1, X);

% 啓動系統
Cx=zeros(1,16);       % C(z)的狀態
Cw=zeros(1,16);       % C(z)的權重
Sx=zeros(size(Sw));   % secondary次路徑的虛擬狀態
e_cont=zeros(1,T);    % 控制錯誤的數據緩衝區
Xhx=zeros(1,16);      % 過濾後x(k)的狀態

% FxLMS 算法
% [Cy,Cw]=FxLMS(X,Cx,Cw,Sx,Sw,Shx,Shw,e_cont,Xhx,T,Yd);
mu=0.1;                            % 學習率
for k=1:T                          % 離散時間 k
    Cx=[X(k) Cx(1:15)];            % 更新控制器狀態 
    Cy=sum(Cx.*Cw);                % 計算控制器輸出
    Sx=[Cy Sx(1:length(Sx)-1)];    % 傳播到secondary path
    e_cont(k)=Yd(k)-sum(Sx.*Sw);   % 測量殘差
    Shx=[X(k) Shx(1:15)];          % 更新Sh(z)的狀態
    Xhx=[sum(Shx.*Shw) Xhx(1:15)]; % 計算過濾後的x(k)
    Cw=Cw+mu*e_cont(k)*Xhx;        % 調整controller的權重
end

% 結果
figure
subplot(2,1,1)
plot((1:T), e_cont)
ylabel('Amplitude');
xlabel('Discrete time k');
legend('Noise residue')
subplot(2,1,2)
plot((1:T), Yd) 
hold on 
plot((1:T), Yd-e_cont, 'r:')
ylabel('Amplitude');
xlabel('Discrete time k');
legend('噪聲信號', '控制信號')

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

參考文獻

窄帶主動噪聲控制系統實時仿真及硬件實現_毛夢菲

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章