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

📄 rls.m

📁 RLS算法
💻 M
字号:
%RLS算法 
%用噪声训练滤波器权系数矢量,再进行滤波
%dxt
%EI,HUST
%2008.12
clear all                      %清除内存变量                      
clc                            %清除command框
%读取混合有噪声的语音信号
[xinit,Fs,nbits] = wavread('signalnoise.wav');
xinit = xinit';                 %转置
xn  = xinit(1,:);               %取混有噪声的语音信号的单声道
n  = wavread('noise.wav');      %读取噪声信号
n  = n';                        %转置
n  = n(1,:);                    %取噪声信号的单声道
  
N=length(n);					%噪声信号的长度
M=32;                           %滤波器的阶数
L=0.98;                        %遗忘因子
Ns = length(xn);                %有噪声的语音信号
d = 0.002*ones(1,N);             %期望输出
x1 = 10*n+d;                       %RLS滤波器输入信号

w=zeros(1,M);                   %权系数
x=zeros(1,M);                   %1*M,代表x(n)'
u=zeros(1,N);                   %临时数组u=x(n)*T(n-1)*x(n)'
T=200*eye(M);                   %T(-1)
k=zeros(M,1);                   %增益k(n)
e=zeros(1,N);                   %e(n|n-1)
e1=e;                           %平方误差
w1 = zeros(1,Ns-M+1);
for n=M:N
    x=x1(n:-1:n-M+1);           %x(n)
    u(n)=x*T*x';
    k=T*x'/(L+u(n));            %计算增益k(n)
    e(n)=d(n)-x*w';             %计算e(n|n-1)
    w=w+k'*e(n);                %计算权系数w(n)
    w1(N-n+1)=w(1);
    T=(T-x*k*T)/L;              %计算T(n)
    e1(n)=e(n)*e(n);
end
%利用训练的滤波器系数进行语音信号的滤波    
s = zeros(1,Ns-M+1);
for n=M:Ns
   s(n-M+1) = 0;
   for j=1:M
       s(n-M+1)= s(n-M+1)+w(j)*xn(n-j+1);
   end
end
 
subplot(2,1,1);                   %绘制原始语音信号
plot(xn);
title('混有噪声的原始语音信号');
subplot(2,1,2);                   %绘制滤波后的信号
plot(s,'k');
title('滤波后语音信号');
wavwrite(s,Fs,nbits,'filter.wav');
wavwrite(5*s,Fs,nbits,'filter5.wav');

⌨️ 快捷键说明

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