轉載_ANC降噪學習

版權聲明:轉載請註明出處 https://blog.csdn.net/weixin_42183571/article/details/80615660

概述

      ANC,英文名稱:Active Noise Control,主動降噪。其原理是降噪系統電路產生降噪MIC接收的外界環境噪音相等的反相信號,將噪聲抵消。

 

核心算法

     ANC降噪實現核心算法爲:FxLMS(最小均方差算法)。最小均方差算法以均方誤差爲代價函數,並使誤差降到最小的算法。 具體算法推導這裏不做具體介紹,這裏直接列出表達式:

                                                    

 

      其中, x(k)爲輸入信號矩陣,W(k)爲調整權值矩陣,d(k)爲目標(理想)輸出信號矩陣,y(k)爲實際輸出信號矩陣,e(k)爲誤差信號矩陣,第3個公式爲權值調整公式,mu爲收斂因子(值爲隨機的,0<mu<x(k)的相關矩陣最大特徵值的倒數)

 

Matlab仿真LMS濾波器

根據表達式設計濾波器


 
  1. function [yn,W,en]=LMS(xn,dn,M,mu,itr)

  2. % LMS(Least Mean Squre)算法

  3. % 輸入參數:

  4. % xn 輸入的信號序列 (列向量)

  5. % dn 所期望的響應序列 (列向量)

  6. % M 濾波器的階數 (標量) 濾波器的階數,就是指過濾諧波的次數,其階數越高,濾波效果就越好

  7. % mu 收斂因子(步長) (標量) 要求大於0,小於xn的相關矩陣最大特徵值的倒數

  8. % itr 迭代次數 (標量) 默認爲xn的長度,M<itr<length(xn)

  9. % 輸出參數:

  10. % W 濾波器的權值矩陣 (矩陣)

  11. % 大小爲M : itr,

  12. % en 誤差序列(itr : 1) (列向量)

  13. % yn 實際輸出序列 (列向量)

  14.  
  15. % 參數個數必須爲4個或5個

  16. if nargin == 4 % 4個時遞歸迭代的次數爲xn的長度

  17. itr = length(xn);

  18. elseif nargin == 5 % 5個時滿足M<itr<length(xn)

  19. if itr>length(xn) || itr<M

  20. error('迭代次數過大或過小!');

  21. end

  22. else

  23. error('請檢查輸入參數的個數!');

  24. end

  25.  
  26. % 初始化參數

  27. en = zeros(itr,1); % 誤差序列,en(k)表示第k次迭代時預期輸出與實際輸入的誤差

  28. W = zeros(M,itr); % 每一行代表一個加權參量,每一列代表-次迭代,初始爲0

  29.  
  30. % 迭代計算

  31. for k = M:itr % 第k次迭代

  32. x = xn(k:-1:k-M+1); % 濾波器M個抽頭的輸入

  33. y = W(:,k-1).' * x; % 濾波器的輸出

  34. en(k) = dn(k) - y ; % 第k次迭代的誤差

  35. % 濾波器權值計算的迭代式

  36. W(:,k) = W(:,k-1) + 2*mu*en(k)*x;

  37. end

  38.  
  39. % 求最優時濾波器的輸出序列

  40. yn = inf * ones(size(xn));

  41. for k = M:length(xn)

  42. x = xn(k:-1:k-M+1);

  43. yn(k) = W(:,end).'* x;

  44. end

調用LMS函數仿真


 
  1. close all

  2. % 正弦信號的產生

  3. t=0:199;

  4. xs=5*sin(0.3*t);

  5. figure;

  6. subplot(2,1,1);

  7. plot(t,xs);grid;

  8. ylabel('幅值');

  9. title('{輸入正弦波信號}');

  10.  
  11. % 隨機噪聲信號的產生

  12. randn('state',sum(100*clock));

  13. xn=randn(1,200);

  14. zn=randn(1,200);

  15. xn=xn+zn;

  16. subplot(2,1,2);

  17. plot(t,xn);grid;

  18. ylabel('幅值');

  19. xlabel('時間');

  20. title('{輸入隨機噪聲信號}');

  21.  
  22. % 信號濾波

  23. xn = xs+xn;

  24. xn = xn.' ; % 輸入信號序列

  25. dn = xs.' ; % 預期理想結果序列

  26. M = 23 ; % 濾波器的階數

  27. rho_max = max(eig(xn*xn.')); % 輸入信號相關矩陣的最大特徵值

  28. mu = rand()*(1/rho_max) ; % 收斂因子 0 < mu < 1/rho_max

  29. [yn,W,en] = LMS(xn,dn,M,mu);

  30.  
  31. % 繪製濾波器輸入信號

  32. figure;

  33. subplot(2,1,1);

  34. plot(t,xn);grid;

  35. ylabel('幅值');

  36. xlabel('時間');

  37. title('{濾波器輸入信號}');

  38. % 繪製自適應濾波器輸出信號

  39. subplot(2,1,2);

  40. plot(t,yn);grid;

  41. ylabel('幅值');

  42. xlabel('時間');

  43. title('{自適應濾波器輸出信號}');

  44. % 繪製自適應濾波器輸出信號,預期輸出信號和兩者的誤差

  45. figure

  46. plot(t,yn,'b',t,dn,'g',t,dn-yn,'r',t,xn,'m');grid;

  47. legend('自適應濾波器輸出','預期輸出','誤差','自適應濾波器輸入');

  48. ylabel('幅值');

  49. xlabel('時間');

  50. title('{自適應濾波器}');

  51. %繪製最優權值點

  52. figure

  53. mm=0:M-1;

  54. plot(mm,W(:,end)','m*');grid;

  55. title('{最優權值點}');

實驗效果圖

                    

                     

                     

 

結果分析

      輸入信號爲正弦信號加噪聲的混合信號,可見正弦信號受噪聲影響失真較大;實驗輸出信號失真較小,噪聲信號已經很小,這裏可以調節M濾波器階數來調節ANC降噪效果。可見,LMS算法可實現ANC降噪功能。

 

際應用分析   

      實際應用中,ANC降噪對2KHZ以下的信號噪聲降噪效果比較好,對高頻噪聲降噪效果很差。原因爲高頻信號波長短,對相位偏差也比較敏感,導致ANC對高頻噪聲降噪效果差。一般高頻噪聲可以被耳機物理的遮蔽屏蔽掉,這種降噪被稱爲被動降噪。       總結,一般2KHz噪聲信號使用ANC,高頻信號沒有必要使用ANC。實際測試中的應用,測試步驟:1.關閉ANC時,聲學測試軟件測試聲學參數FR;2.打開ANC時,聲學測試軟件測試聲學參數FR,這裏通過調節gain值,來調節降噪效果,使降噪效果適中。因爲降噪效果差,達不到降噪的目的;降噪效果如果太好,噪聲信號趨近於0,會使耳機產生自激。

    通過書籍資料及網上資源學習,以上就是我對ANC的理解,如有什麼不妥之處,還請指正。

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