仿射投影自适应滤波(APA)算法及matlab实现

算法代码如下

clc
clear all
close all

[x1,fs1]=audioread('handel.wav');
[d1,fs2]=audioread('handel_echo.wav');
x=x1';
d=d1';

p=25;           % 重用次数
n=20;           % 滤波器阶数
z=max(size(x));
wA=zeros(1,n)';  % 滤波器权系数初始化
size(wA);
Y=zeros(1,z)';

h=waitbar(0,'计算进度');
steps = (z-p+1);

for k=p+n-1:z
% 输入向量矩阵
    for i=1:n
        for j=1:p
            Xnp(i,j)=x(k-p-n+i+j);
        end
    end
    
    Y(k-p+1:k)=Xnp'*wA;     % n时刻,前p个输出组成的输出参考向量
    D=d(k-p+1:k)';          % n时刻,前p个期望输出信号组成参考向量
    E=D-Y(k-p+1:k);         % 后验误差,在让E=0(实际上应该是尽量小?)的前提下让wA(n+1)尽量接近wA(n)
    W(:,k)=wA;
    % 得到递推公式如下,加入收敛步长m(0-2之间),折中收敛速度与稳定性的矛盾,通过效果图可以看出,APA的收敛速度非常慢
    m=0.0001;
    wA=wA+m*Xnp*pinv(Xnp'*Xnp)*E;   % 更新滤波器权系数
    waitbar(k/steps);
end
close(h);

figure
plot(W(1,:))
legend('W(1,:)学习曲线')

figure
subplot(3,1,1);
plot(x);
title('原始语音信号');
hold on;
subplot(3,1,2);
plot(d);
title('被噪声污染的目标信号');
hold on;
subplot(3,1,3)
plot(Y);
title('合成回声输出信号');

matlab仿真效果如下(20000点左右实现了收敛)


  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值