Simulink中Matlab Function实现归一化LMS滤波器相位问题求助
归一化LMS滤波器Simulink实现的相位偏移问题
我在Simulink的Matlab Function模块中实现归一化最小均方(Normalized LMS)滤波器,模块结构如图所示。当前仿真结果显示滤波器虽有滤波效果,但存在恒定相位偏移,我期望实现无相位偏移的滤波效果。
实现代码
Matlab Function模块中的代码如下:
function b = lms_update(ref,cor,adapt,N,mu) % ref = reference signal, noise signal itself, for filter to produce % cor = corrupted signal, total signal, to be filtered % initialization persistent x w if isempty(x),x=zeros(N,1);end % input buffer if isempty(w),w=zeros(N,1);end % filter weights epsil = 2.2204460492503131e-016; % epsilon for divided-by-zero % read new input sample x(1:N-1,1) = x(2:N,1); x(N,1) = cor; if adapt % compute filter output xf = flip(x); % flip x y = w'*xf; e = ref - y; % update filter weights w = w + mu*e*xf/(xf'*xf + epsil); end b = w';
输入与参数
ref(期望信号):特定频率的正弦输入信号cor(输入信号):ref与Simulink LMS Filter输出的差值- 滤波器系数数量:20个
- 仿真步长:0.001秒
关键说明
代码基本遵循LMS Update模块的帮助文档,仅对persistent变量x进行了翻转操作(参考离线Matlab代码)。若需要模型文件,可告知上传方式。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

