1 简介
自适应信号处理的理论和技术经过40多年的发展和完善,已逐渐成为人们常用的语音去噪技术.而Matlab的出现又为其提供了更为方便快捷的方法来对语音信号进行消噪处理.介绍了自适应滤波器中常用的几种算法,并通过实例介绍了基于Matlab的RLS自适应语音噪声对消系统的设计与实现.
2 部分代码
clear;
clc;
close all
Ts=0.1;
num=100;%?采样点数?
k=1:num;
x=10*cos(2*pi*k*Ts+0.25*pi);%正弦干扰
%s=0.5*randn(1,num);
%x=x+s;
xr=cos(2*pi*k*Ts);%参考信号
p=2;%滤波器长度
xita=zeros(p,num-p+1); %保存权值
err=zeros(1,num-p+1); %保存误差
kn=zeros(2,num-p+1);
lamda=0.99; %遗忘因子
diag_I=[1,0;0,1];
for i=1:num-p+1
);%输入含回声的信号??
inp=inp(:);
[d1,sr] = audioread('1.wav');%输入原始信号?
d=[d1;zeros(4000,1)]; %需要使得d和inp行数完全一致才能运算
d=d(:);
totallength=size(d,1);%步长,返回d的行数??
N=length(inp);
%k=0:1382493;??
k=0:691246;
%算法开始??
w=zeros(sysorder,1);%初始化??
w1=zeros(sysorder,1);%初始化??
error=zeros(N,1); %初始化??
EE=zeros(N,1);
Loop=15000;
RMSE=zeros(1,476000);
for n=sysorder:N
%u=inp(n:-1:n-sysorder+1);? ?? ?? ? %u的矩阵??
u=inp(n-sysorder+1:1:n);%u矩阵为输入的信号中的一小段??
%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);? ?? ?? ?? ?? ???%误差? ?? ?? ??
e=e(:);
e1=e1(:);
srr=srr(:);
srr1=srr1(:);
error=10*log10(error);
figure(1);
subplot(5,1,1);
plot(inp);
title('系统输出波形对比');
xlabel('样本n');
ylabel('混响9秒信号波形');
subplot(5,1,2);
plot(y,'r');
xlabel('样本n');
ylabel('NLMS输出信号波形');
subplot(5,1,3);
plot(y1,'g');
axis([0 476000 -1 1]);
xlabel('样本n');
ylabel('LMS输出信号波形');
subplot(5,1,4);
plot(d);
xlabel('样本n');
ylabel('原始信号波形');
figure;
plot(error);
figure;
plot(e)
%sound(inp,sr);
%sound(d,sr)
%sound(y,sr);??
%audiowrite(nlms.wav,y,sr);? ?
sound(y1,sr);
%audiowrite(lms.wav,y1,sr);?
3 仿真结果
4 参考文献
[1]陶青, and 谢勤岚. "基于RLS算法的脑电信号的去噪." 现代电子技术 29.11(2006):3.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。