• 大小: 2KB
    文件类型: .m
    金币: 2
    下载: 1 次
    发布日期: 2021-06-09
  • 语言: Matlab
  • 标签: matlab  LMS  NLMS  

资源简介

基于NLMS和LMS算法,用matlab实现了 对语音信号中的回声进行消除,完成了课程设计,其中NLMS的效果要优于LMS的效果.

资源截图

代码片段和文件信息

clear all
close all
clc
hold off    
sysorder=50; %抽头数
[inpsr]=audioread(‘recordlms_new.wav‘);       %输入
inp=inp(:);
inp(225718:) = 0;
[dsr] =  audioread(‘record01.wav‘);
d=d(:);
d(225718:) = 0;



totallength=size(d1);                 %步长
N=length(inp);
%k=0:1382493;
k=0:225717;
 
%算法开始
w=zeros(sysorder1);                   %初始化
w1=zeros(sysorder1);                  %初始化
error=zeros(N1);                  %初始化
EE=zeros(N1);
Loop=15000;
   
for n=sysorder:N
    u=inp(n:-1:n-sysorder+1);          %u的矩阵
    %u=inp(n-sysorder+1:n); 
    %NLMS算法
    y(n)=w‘*u;                         %系统输出
    r(n)=u‘*u;                         %自相关矩阵
    e(n)=d(n)-y(n);                    %误差
    srr(n)=10*log10(d(n)/(inp(n)-d(n)));
    srr1(n)=10*log10(d(n)/(y(n)-d(n)));
    %e(n)=inp(n)-y(n);                 %误差        
    fai=1e-10;                         %修正参数,防止r(n)过小导致步长值太大
    if n<2000
        mu=0.32;
    else
        mu=0.15;
    end
    w=0.8*w+mu*u*e(n)/(r(n)+fai);      %NLMS迭代方程
    error(n)=error(n)+e(n)^2;
   
    %LMS算法
    y1(n)=w1‘*u;
    e1(n)=d(n)-y1(n);
    w1=0.8*w1+0.1*u*e1(n

评论

共有 条评论