生活随笔
收集整理的這篇文章主要介紹了
FXLMS主动降噪的simulink建模与仿真
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
**
**
FXLMS主動降噪的Simulink建模與仿真
**
**
最近在研究關于主動降噪的課題,在摸索學習的過程中,分享一些初步學到的知識。
**FXLMS算法是基于LMS算法在次級通道補償方向上做出的改進算法,我在simulink中對其進行了建模與仿真,希望對一起學習的小伙伴有所幫助。
**
以下是我的仿真圖:
其中用2個頻率分別為80HZ和110HZ的正弦信號疊加模擬噪音信號,初級通道傳遞函數為假定值,用濾波器函數來代替。
次級通道傳遞函數也是用濾波器來假定的值。
而次級通道傳遞函數估計是對次級通道的估計,實際情況下可以由在線辨識或離線辨識得到,在這里我假定理想狀態次級通道估計和次級通道相同。
FXLMS fliter 是用S函數塊編寫的自適應濾波器,其中有三個輸入,兩個輸出。
輸入1:初始噪音信號
輸入2:經過次級通道傳遞函數估計補償的噪音信號
輸入3:噪音抵消后的誤差信號,理想狀態為0
輸出1:經過LMS算法計算權重后的自適應濾波器輸出,用來抵消噪音
輸出2:LMS算法計算的權重
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);
運行結果:
藍色為噪音信號,黃色為降噪后信號,可以看到明顯的降噪效果。
圖為LMS算法計算的權重
同時面臨這一個問題,在負反饋時,ERRO誤差信號在初始階段為0,所以在降噪的初始階段,會呈現不穩定狀態,加入延遲模塊最初是為了消除代數環,可對初始的誤差狀態并未起改善作用,希望有人能提出中肯的指點與建議,第一次發文,不妥之處請見諒,謝謝。
總結
以上是生活随笔為你收集整理的FXLMS主动降噪的simulink建模与仿真的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。