【信号去噪】基于粒子群算法优化最小二乘法lms自适应滤波器实现语音去噪附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

个人主页:Matlab科研工作室

个人信条:格物致知。

更多Matlab仿真内容点击

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机

⛄ 内容介绍

在自适应滤波算法中,LMS算法是最常用的算法之一,因为具备结构简单,易于实现,性能稳定,计算复杂度低等特点.然而,LMS算法也存在缺点,比如,收敛速度较慢,收敛精度低的问题,这就影响LMs算法在收敛性要求较高的领域中的应用.使用粒子群算法对LMS算法进行改进,可以将LMS滤波设计变成对LMS滤波参数优化的问题,利用粒子群算法的优化能力,使得滤波参数得到全局最优解.以此可以提高LMS滤波算法的收敛性能,从而提高滤波性能.

⛄ 部分代码

clear all;

clc; 

close  all;

warning off

filename='hehe.wav';  

[s,fs] =audioread(filename);   %wavread函数在此版本后不能用了,改用audioread

S=max(abs(s));

s=s/S;     %将语音信号幅值归一化

N=length(s);         %求信号的长度

time=(0:N-1)/fs;     %设置横坐标的时间

ns=0.5*cos(2* pi* 50* time);   %计算出50Hz的工频信号

x=s+ns';      %语音信号和50Hz的工频信号叠加

snr1=SNR_singlech(s,x);     %计算叠加后50Hz工频信号之后的信噪比

x1=cos(2* pi * 50 * time);  %设置x1和x2

x2=cos(2* pi * 50 * time);

w1=0.1;        %初始化w1和w2

w2=0.1;

e=zeros(1,N);  %初始化e和y

y=zeros(1,N);

mu=0.05;       %设置mu

for i=1:N % 迭代计算

    y(i)=w1* x1(i)+ w2* x2(i);   %LMS自适应陷波器滤波

    e(i)=x(i)-y(i);   % 第k次迭代的误差

    w1=w1+mu* e(i) * x1(i); % 滤波器权值计算的迭代式

    w2=w2+mu* e(i) * x2(i);    % 滤波器权值计算的迭代式

end

output=e';    %陷波器输出

snr2=SNR_singlech(s,output);     %计算信噪比snr

snr=snr2-snr1;%去噪前后信噪比差

fprintf('去噪前后信噪比差=%5.4f  ,加噪后信号信噪比=%5.4f ,LMS算法去噪后信噪比=%5.4f\n',snr,snr1,snr2);

mse2 = MSE(s,output);%计算LMS算法去噪后的均方差

mse1 = MSE(s,x);%计算加噪后的均方差

mse=mse2-mse1;%去噪前后均方差

fprintf('去噪前后均方差差=%5.4f  ,加噪后信号均方差=%5.4f ,LMS算法去噪后均方差=%5.4f\n',mse,mse1,mse2);

psnr2 = PSNR(s,output);%计算LMS算法去噪后的峰值信噪比

psnr1 = PSNR(s,x);%计算加噪后的峰值信噪比

psnr=psnr2-psnr1;%去噪前后峰值信噪比差

fprintf('去噪前后峰值信噪比差=%5.4f  ,加噪后信号峰值信噪比=%5.4f ,LMS算法去噪后峰值信噪比=%5.4f\n',psnr,psnr1,psnr2);

audioplayer(output*S,fs);pause(10);

wavwrite(output,'hehe.wav');%保存lms去噪音频

%作图

figure(1)

subplot 311; plot(time,s,'b');

ylim([-1,1]); title('原始语音信号');

subplot 312; plot(time, x,'b');

ylim([-1,1]); title('带噪语音信号');

subplot 313; plot(time, output,'b');

ylim([-1,1]); title('PSO-LMS滤波输出语音信号');

xlabel('时间/s')

⛄ 运行结果

【信号去噪】基于粒子群算法优化最小二乘法lms自适应滤波器实现语音去噪附matlab代码_第1张图片

⛄ 参考文献

[1]李曼. 在Matlab中实现基于LMS算法语音信号去噪[J]. 电脑知识与技术, 2014(11X):3.

[2]黄媛媛, 王友仁, 崔江,等. 基于粒子群算法的自适应LMS滤波器设计及可重构硬件实现[J]. 佳木斯大学学报:自然科学版, 2010, 28(1):4.​

❤️ 关注我领取海量matlab电子书和数学建模资料

❤️部分理论引用网络文献,若有侵权联系博主删除

 

你可能感兴趣的:(信号处理,算法,最小二乘法,matlab)