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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FXLMS主动降噪的simulink建模与仿真

發(fā)布時(shí)間:2023/12/8 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FXLMS主动降噪的simulink建模与仿真 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

**
**

FXLMS主動(dòng)降噪的Simulink建模與仿真

**
**

最近在研究關(guān)于主動(dòng)降噪的課題,在摸索學(xué)習(xí)的過程中,分享一些初步學(xué)到的知識(shí)。

**FXLMS算法是基于LMS算法在次級(jí)通道補(bǔ)償方向上做出的改進(jìn)算法,我在simulink中對(duì)其進(jìn)行了建模與仿真,希望對(duì)一起學(xué)習(xí)的小伙伴有所幫助。
**
以下是我的仿真圖:

其中用2個(gè)頻率分別為80HZ和110HZ的正弦信號(hào)疊加模擬噪音信號(hào),初級(jí)通道傳遞函數(shù)為假定值,用濾波器函數(shù)來代替。

次級(jí)通道傳遞函數(shù)也是用濾波器來假定的值。

而次級(jí)通道傳遞函數(shù)估計(jì)是對(duì)次級(jí)通道的估計(jì),實(shí)際情況下可以由在線辨識(shí)或離線辨識(shí)得到,在這里我假定理想狀態(tài)次級(jí)通道估計(jì)和次級(jí)通道相同。

FXLMS fliter 是用S函數(shù)塊編寫的自適應(yīng)濾波器,其中有三個(gè)輸入,兩個(gè)輸出。

輸入1:初始噪音信號(hào)
輸入2:經(jīng)過次級(jí)通道傳遞函數(shù)估計(jì)補(bǔ)償?shù)脑胍粜盘?hào)
輸入3:噪音抵消后的誤差信號(hào),理想狀態(tài)為0

輸出1:經(jīng)過LMS算法計(jì)算權(quán)重后的自適應(yīng)濾波器輸出,用來抵消噪音
輸出2:LMS算法計(jì)算的權(quán)重

function test(block)setup(block); %endfunctionfunction setup(block)%% Register dialog parameter: LMS step size block.NumDialogPrms = 1;block.DialogPrmsTunable = {'Tunable'};% block.DialogPrm(1).Name = 'StepSize';% block.DialogPrm(1).DataTypeId = 0;%% Regieste number of input and output portsblock.NumInputPorts = 3;block.NumOutputPorts = 2;%% Setup functional port properties to dynamically%% inherited.block.SetPreCompInpPortInfoToDynamic;block.SetPreCompOutPortInfoToDynamic;block.InputPort(1).Complexity = 'Real'; block.InputPort(1).DataTypeId = 0;block.InputPort(1).SamplingMode = 'Sample';block.InputPort(1).Dimensions = 1;block.InputPort(2).Complexity = 'Real';block.InputPort(2).DataTypeId = 0;block.InputPort(2).SamplingMode = 'Sample';block.InputPort(2).Dimensions = 1;block.InputPort(3).Complexity = 'Real';block.InputPort(3).DataTypeId = 0;block.InputPort(3).SamplingMode = 'Sample';block.InputPort(3).Dimensions = 1;block.OutputPort(1).Complexity = 'Real';block.OutputPort(1).DataTypeId = 0;block.OutputPort(1).SamplingMode = 'Sample';block.OutputPort(1).Dimensions = 1;block.OutputPort(2).Complexity = 'Real';block.OutputPort(2).DataTypeId = 0;block.OutputPort(2).SamplingMode = 'Sample';block.OutputPort(2).Dimensions = 1;%% Set the block simStateCompliance to default (i.e., same as a built-in block)block.SimStateCompliance = 'DefaultSimState';%% Register methodsblock.RegBlockMethod('CheckParameters', @CheckPrms);block.RegBlockMethod('ProcessParameters', @ProcessPrms);block.RegBlockMethod('PostPropagationSetup', @DoPostPropSetup);block.RegBlockMethod('Start', @Start); block.RegBlockMethod('WriteRTW', @WriteRTW);block.RegBlockMethod('Outputs', @Outputs);%% Block runs on TLC in accelerator mode.block.SetAccelRunOnTLC(true);%endfunctionfunction CheckPrms(block)mu = block.DialogPrm(1).Data;if mu <= 0 || mu > 1error(message('simdemos:adapt_lms:stepSize'));end%endfunctionfunction DoPostPropSetup(block)%% Setup Dwork N = 32; %% Filter length block.NumDworks = 3;block.Dwork(1).Name = 'X'; %% u[n],...,u[n-31]block.Dwork(1).Dimensions = N;block.Dwork(1).DatatypeID = 0;block.Dwork(1).Complexity = 'Real';block.Dwork(1).UsedAsDiscState = true;block.Dwork(2).Name = 'H'; %% Filter coefficientsblock.Dwork(2).Dimensions = N;block.Dwork(2).DatatypeID = 0;block.Dwork(2).Complexity = 'Real';block.Dwork(2).UsedAsDiscState = true;block.Dwork(3).Name = 'l'; %% Filter coefficientsblock.Dwork(3).Dimensions = N;block.Dwork(3).DatatypeID = 0;block.Dwork(3).Complexity = 'Real';block.Dwork(3).UsedAsDiscState = true;%% Register all tunable parameters as runtime parameters.block.AutoRegRuntimePrms;%endfunctionfunction ProcessPrms(block)block.AutoUpdateRuntimePrms;%endfunctionfunction Start(block)%% Initialize Dwork block.Dwork(1).Data = zeros(1, 32);block.Dwork(2).Data = zeros(1, 32);block.Dwork(3).Data = zeros(1, 32);%endfunctionfunction Outputs(block)mu = block.RuntimePrm(1).Data;N = 32;u = block.InputPort(1).Data;e = block.InputPort(3).Data;r = block.InputPort(2).Data;X = block.Dwork(1).Data;H = block.Dwork(2).Data;l = block.Dwork(3).Data;%%%% H^(n+1)[i] = H^(n)[i]+mu*(d(n)-y(n))*u(n-i) %% X(2:N) = X(1:N-1);X(1) = u; l(2:N) = l(1:N-1);l(1) = r;y = X'*H; H = H+mu*e*l;block.Dwork(1).Data = X;block.Dwork(2).Data = H;block.Dwork(3).Data = l;block.OutputPort(1).Data = y;block.OutputPort(2).Data = norm(H);

運(yùn)行結(jié)果:

藍(lán)色為噪音信號(hào),黃色為降噪后信號(hào),可以看到明顯的降噪效果。


圖為LMS算法計(jì)算的權(quán)重

同時(shí)面臨這一個(gè)問題,在負(fù)反饋時(shí),ERRO誤差信號(hào)在初始階段為0,所以在降噪的初始階段,會(huì)呈現(xiàn)不穩(wěn)定狀態(tài),加入延遲模塊最初是為了消除代數(shù)環(huán),可對(duì)初始的誤差狀態(tài)并未起改善作用,希望有人能提出中肯的指點(diǎn)與建議,第一次發(fā)文,不妥之處請(qǐng)見諒,謝謝。

總結(jié)

以上是生活随笔為你收集整理的FXLMS主动降噪的simulink建模与仿真的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。