⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 echo_cancellation_lms.m

📁 基于LMS算法的回声消除仿真
💻 M
字号:
clear;clc;

%采样点数
 N=25000;

%系统采样频率fs=8kHz
Ts=125e-6;

%以下为网络响应h(n)
n=10;hn=2:n;hn=1./hn;

A=1;
Choice=menu('请选择信号形式','  1KHz正弦信号  ',' [0,1]均匀分布信号 ','     EXIT     ');
if Choice==1;
    %输入为正弦信号u(n)
    f=1000;
    t=1:N;
    v=A*sin(2*pi*f*t*Ts);
  
elseif Choice==2;
    %输入为随机信号
    v=rand(1,N);
else
    return;
end;

%滤波器参数初始化
M=9;%滤波器阶数
step=0.09;%步长

SNR=0:5:20;
MSE=zeros(length(SNR),N-M+1);
dn_cap=zeros(length(SNR),N-M+1);
ERLE=zeros(length(SNR),N-M+1);
for i=1:length(SNR);
	%加入噪声
	E=1/2*A^2;
	snr=10.^(SNR(i)/10);
	sigma=sqrt(E/snr);
	randn('state',10);
	Noise=sigma*randn(size(v));
	u=v+Noise;
	%网络输出d(n)
	dn=conv(u,hn);
	%系数初始值	
	w=zeros(M,1);
	s2=0;e2=0;
	%LMS算法
	for num=M:N;
        un=u(num:-1:num-M+1);
        un=un.';
        dn_cap(i,num)=w'*un;
        en=dn(num)-dn_cap(i,num);
        MSE(i,num-M+1)=en.^2;
        %迭代
        w=w+step.*un.*en;
        %求ERLE 
        s2=s2+dn(num).^2;
        e2=e2+en.^2;
        ERLE(i,num-M+1)=10*log10(s2/e2);
	end;
end;

figure
semilogy(1:20000,abs(MSE(:,1:20000)))
axis([0 20000 10^(-40) 1])
xlabel('n')
ylabel('MSE')
if Choice==1;
    title('输入为f=1000Hz正弦信号时的LMS回波抵消器性能');
else
    title('输入为[0,1]均匀分布信号时的LMS回波抵消器性能');
end;
legend('SNR=0dB','SNR=5dB','SNR=10dB','SNR=15dB','SNR=20dB')
grid on

figure
plot(1:20000,ERLE(:,1:20000))
xlabel('n')
ylabel('ERLE(dB)')
axis([0 20000 10 40])
legend('SNR=0dB','SNR=5dB','SNR=10dB','SNR=15dB','SNR=20dB',4)
grid on

% figure
% plot(u);
% axis([0 500 -1.5 1.5])
% 
% figure
% subplot(2,1,1)
% plot(dn)
% axis([0 500 -1.5 1.5])
% 
% subplot(2,1,2)
% plot(dn_cap)
% axis([0 500 -1.5 1.5])

% figure
% axis([M 500  10^(-3) 1]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -