日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

主动降噪开发之四——多通道算法实现

發布時間:2023/12/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 主动降噪开发之四——多通道算法实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、次級路徑的辨識
  • 二、濾波器階數的選擇
  • 三、多通道算法
    • 3.1、陷波濾波器
    • 3.2、多通道算法
  • 總結


前言

噪聲主動控制在實際應用的過程中其實存在很多的問題,比如說次級路徑辨識時激勵源噪聲選擇問題,濾波器階數等諸多問題的選擇和優化。


一、次級路徑的辨識

在主動降噪開發之一中并未考慮次級次級路徑的問題,但在實際中,揚聲器到麥克風之間是存在一定的距離,揚聲器到我們耳朵之間也存在一定的距離,那么聲音在傳播的過程中就會存在一定的衰減。
假設,傳遞路徑上的傳遞函數為h(t),那么在揚聲器輸出的信號f(t)和mic接收到的信號g(t)就存在以下關系:
g(t) = f(t)*h(t)
兩者為卷積的關系,表現在頻域上就是相乘。那么問題來了,怎么獲得g(t)??,其準確性對后續噪聲的控制影響極大。目前存在三種激勵方式,分別為白噪聲,線性正弦掃頻和指數正弦掃頻,白噪聲自不用說,后兩者對應的頻譜如下:
實際上,根據人耳朵的聲學特性,更符合指數正弦臊掃頻,但在實際應用中會根據實際情況(揚聲器頻響,時間的長短,降噪頻帶范圍等)進行選擇,一般來說,白噪聲的頻譜更為豐富,所需激勵時間也較短,得到的響應也含有較為豐富發頻譜特性,應用較廣。
部分代碼如下:

%% 線性掃頻 t1 = 1/fs:1/fs:t0; y2 = chirp(t,0,10,500,'quadratic'); % 自帶程序生成的掃頻; beta = (endFre-startFre)/t0; y1 = A*sin(2*pi*(0.5*beta*t1.^2+startFre*t1)); subplot(131) plot(t1,y1) xlabel('時間/s') ylabel('線性掃頻幅值') subplot(132) pspectrum(y1,fs,'spectrogram','FrequencyLimits',[10 1000],'TimeResolution',0.2, ...'OverlapPercent',99,'Leakage',0.85) subplot(133) pspectrum(y1,fs,'FrequencyLimits',[10 1000])

二、濾波器階數的選擇

根據激勵得出的響應,計算出對應的傳遞函數,這其實有兩種方法,第一,分別計算對應的頻譜特性,然后再逆傅里葉變化,第二,就是采樣LMS算法進行辨識,這是最簡單和最方便的,效率最高的一種方法,這兩種方法辨識的結果如下:
可見,其前128階趨勢基本一致,相對而言,LMS識別出的沖激響應幅值較大,而反變換則在0處存在一個極大值,這主要是由于信號存在直流分量引起的,需要在實際中進行甄別。
對識別出的傳遞函數的階數需要進行優化,優化的前提就是根據實際硬件的承受能力,也就是算力的問題,畢竟階數越大,延遲就會越大,DSP在計算FIR濾波器時需要的時間就越長,功耗也很大。不同濾波器階數的比較:

部分代碼:

% 初始化參數 en = zeros(itr,1); % 誤差序列,en(k)表示第k次迭代時預期輸出與實際輸入的誤差 W = zeros(M,itr); % 每一行代表一個加權參量,每一列代表-次迭代,初始為0% 迭代計算 for k = M:itr % 第k次迭代,保證輸入延遲后的信號有效,只有iter-M次迭代;x = xn(k:-1:k-M+1); % 將輸入信號延遲,使得濾波器的每個抽頭都有輸入y = W(:,k-1).' * x; % 濾波器的輸出en(k) = dn(k) - y ; % 第k次迭代的誤差 % 濾波器權值計算的迭代式W(:,k) =0.9* W(:,k-1) - 2*mu*en(k)*x ; % 濾波器系數更新向量,0.9的系數可以防止泄露; end

三、多通道算法

3.1、陷波濾波器

為什么會提到這濾波器???,主要是因為噪聲主動控制,特別是對于發動機噪聲主動控制技術,主要應用的是窄帶技術,簡單來說就是對單個頻率進行控制,那么陷波濾波器對應的頻響為:

對應的特性在點擊這里講的更清楚。
那么,既然是對單個頻率進行處理,我們應該怎么模擬這個信號呢,那肯定是正余弦信號,我們都知道任何信號都是有正余弦信號疊加而成,只要能夠疊加出對應的頻率就可以。

3.2、多通道算法

解決上述問題之后,已經完成80%,剩下的只剩20%了,現實告訴我們,任何事都存在二八分成,而這個“二”是占比最大的,那當然是最重要的了,多通道算法一般采用下面的框圖:
說簡單,其實也簡單,就是把向量數據轉換為矩陣數據而已。那么對于發動機噪聲,對應的結果為:
所控制的30Hz,130Hz和195Hz都實現了峰值降低的目的,總聲壓OA由53.43dB降到52.39dB。

部分代碼如下:

clc clear close all opengl software % load Sn.mat load DsIdle.mat % 第一個通道; load PsIdle.mat % 第二個通道; 通道的個數可以根據實際情況(需要降噪的個數進行添加)進行添加。 load IRF_GLOBAL_1.mat %% % Signal = Idle(1:end,2); t = DsIdle(1:40960,1); Sn1 = IRFGlobal(1:128)'; % 主駕傳遞函數,存在4個揚聲器 Sn2 = IRFGlobal(129:256)'; Sn3 = IRFGlobal(257:384)'; Sn4 = IRFGlobal(385:512)'; Ps1 = IRFGlobal(513:640)'; % 副駕傳遞函數,存在4個揚聲器; Ps2 = IRFGlobal(641:768)'; Ps3 = IRFGlobal(769:896)'; Ps4 = IRFGlobal(897:1024)'; fs = 40960; f1 = 32.5; % 目標頻率1; f2 = 130; % 目標頻率2; f3 = 195; % 目標頻率3; mu1 = 0.005; % 通過調節這些參數可以優化降噪后的效果; mu2 = 0.00082; % 分別對應不同的階次收斂步長; mu3 = 0.00081;% 可以根據實際情況進行調整; M = 128; % 濾波器階數; % t = 0:1/fs:11; x1 = sin(2*pi*f1*t); x2 = sin(2*pi*f2*t); x3 = sin(2*pi*f3*t);

總結

由于這是一個綜合多學科問題,噪聲主動控制技術在實際的應用中不僅存在上述問題,最主要還有硬件性能的問題,包括揚聲器頻響,DSP芯片算力問題,AD、DA 轉換問題。

總結

以上是生活随笔為你收集整理的主动降噪开发之四——多通道算法实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。