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

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
注册配置 MSE Nacos/ZooKeeper,182元/月
云原生网关 MSE Higress,422元/月
简介: 【信号去噪】基于粒子群算法优化最小二乘法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')

⛄ 运行结果

image.gif编辑

⛄ 参考文献

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

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

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

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


相关文章
|
7天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
4天前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
103 6
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
7天前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
83 14
|
8天前
|
算法 计算机视觉
【MPDR & SMI】失配广义夹角随输入信噪比变化趋势、输出信干噪比随输入信噪比变化趋势研究(Matlab代码实现)
【MPDR & SMI】失配广义夹角随输入信噪比变化趋势、输出信干噪比随输入信噪比变化趋势研究(Matlab代码实现)
|
8天前
|
编解码 人工智能 算法
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
|
8天前
|
机器学习/深度学习 编解码 并行计算
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
|
8天前
|
机器学习/深度学习 传感器 边缘计算
【故障诊断】基于时滞反馈随机共振的增强型旋转电机故障诊断(Matlab代码实现)
【故障诊断】基于时滞反馈随机共振的增强型旋转电机故障诊断(Matlab代码实现)
|
8天前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
|
8天前
|
运维 算法
【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
|
7天前
|
机器学习/深度学习 算法
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)

热门文章

最新文章