LMS算法作为主动降噪与双麦降噪的基础算法,还是非常重要的,这里不多说原理了,后面我慢慢更这一部分。
直接上代码,建议感兴趣的朋友先看看原理再看代码:
clear all;close all;clc
%LMS算法的MATLAB实现
%用MATLAB实现LMS算法,将输入和输出信号进行对比,并给出均方误差的曲线。
%假设滤波器抽头个数位k,数据长度为N。
g=100; %统计仿真次数
N=1024; %输入信号抽样点数
k=128; %时域抽头LMS算法滤波器阶数
pp=zeros(g,N-k); %将每次独立循环的误差结果存于PP中,以便后面对其平均
u=0.0002;
for q=1:g
t=1:N;
a=1;
s=a*sin(0.05*pi*t); %输入单频信号s
figure(1);
subplot(311)
plot(t,real(s)); %信号s时域波形
title('信号s时域波形');
xlabel('n');
ylabel('s');
axis([0,N,-a-1,a+1]);
%设置初值
xn=awgn(s,5);
%加入均值为零的高斯白噪声,信噪比为5dB % y = awgn(x,snr)将白高斯噪声添加到向量信号x中。标量snr指定了每一个采样点信号与噪声的比率,单位为dB。
y=zeros(1,N); %输出信号y
y(1:k)=xn(1:k); %将输入信号xn的前k个值作为输出y的前k个值
w=zeros(1,k); %设置抽头加权初值
e=zeros(1,N);%误差