30、matlab现代滤波:维纳滤波/LMS算法滤波/小波变换滤波

2024-06-08 00:20

本文主要是介绍30、matlab现代滤波:维纳滤波/LMS算法滤波/小波变换滤波,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、信号1和信号2的维纳滤波

实现代码

N = 2000; %采样点数
Fs = 2000; %采样频率
t = 0:1 / Fs:1 - 1 / Fs; %时间序列
Signal1= sin(2*pi*20* t) + sin(2*pi*40* t) + sin(2*pi*60* t);
Signal2=[2*ones(1,50),zeros(1,50),-1*ones(1,100),zeros(1,50),-2*ones(1,50),zeros(1,50),1*ones(1,100),zeros(1,50),2*ones(1,50),zeros(1,50),-1*ones(1,100),zeros(1,50),-2*ones(1,50),zeros(1,50),1*ones(1,100),zeros(1,50),2*ones(1,50),zeros(1,50),-1*ones(1,100),zeros(1,50),-2*ones(1,50),zeros(1,50),1*ones(1,100),zeros(1,50),2*ones(1,50),zeros(1,50),-1*ones(1,100),zeros(1,50),-2*ones(1,50),zeros(1,50),1*ones(1,100),zeros(1,50),];
NoiseGauss= [randn(1,2000)]; %高斯分部白噪声
NoiseWhite= [rand(1,2000)]; %均匀分布白噪声
NoiseSignal1= Signal1+NoiseGauss; %设计混合信号1
NoiseSignal2= Signal1+NoiseWhite; %设计混合信号2
NSignal1= Signal2+NoiseGauss; %设计混合信号3
NSignal2= Signal2+NoiseWhite; %设计混合信号4
%混合信号1维纳滤波
Rxx=xcorr(NoiseSignal1,NoiseSignal1);%混合信号的自相关函数
M=50;%维纳滤波器阶数
for i=1:M %得到混合信号的自相关矩阵for j=1:Mrxx(i,j)=Rxx(abs(j-i)+N);end
end
Rxy=xcorr(NoiseSignal1,Signal1); %混合信号和原信号的互相关函数
for i=1:M%得到混合信号和原信号的互相关向量rxy(i)=Rxy(i+N-1);
end                                                          
h = inv(rxx)*rxy'; %得到所要涉及的维纳滤波器系数
Signal_Filter1=filter(h,1,NoiseSignal1); %输入信号通过维纳滤波器
%混合信号2维纳滤波
Rxx=xcorr(NoiseSignal2,NoiseSignal2); %混合信号的自相关函数
M=50;                                                            
for i=1:M %得到混合信号的自相关矩阵for j=1:Mrxx(i,j)=Rxx(abs(j-i)+N);end
end
Rxy=xcorr(NoiseSignal2,Signal1); %混合信号和原信号的互相关函数
for i=1:Mrxy(i)=Rxy(i+N-1);
end %混合信号和原信号的互相关向量
h=inv(rxx)*rxy'; %得到所要涉及的维纳滤波器系数
Signal_Filter2=filter(h,1,NoiseSignal2);%将输入信号通过维纳滤波器
figure(1);
subplot(3,2,1);                                                 
plot(Signal1);%原始信号
title('原始信号1');
subplot(3,2,3);                         
plot(NoiseSignal1);%信号1
title('信号1');
subplot(3,2,5);  
plot(Signal_Filter1);%维纳滤波后的信号
title('维纳滤波后高斯的信号');
subplot(3,2,2);                                                 
plot(Signal1);%原始信号
title('原始信号1');
subplot(3,2,4);                         
plot(NoiseSignal2);%信号1
title('信号1');
subplot(3,2,6);  
plot(Signal_Filter2);%维纳滤波后的信号
title('维纳滤波后白的信号');

视图效果

 

2、信号3和信号4的维纳滤波 

实现代码

%混合信号3维纳滤波
Rxx=xcorr(NSignal1,NSignal1);%混合信号的自相关函数
M=400;%维纳滤波器阶数
for i=1:M %得到混合信号的自相关矩阵for j=1:Mrxx(i,j)=Rxx(abs(j-i)+N);end
end
Rxy=xcorr(NSignal1,Signal2); %混合信号和原信号的互相关函数
for i=1:M%得到混合信号和原信号的互相关向量rxy(i)=Rxy(i+N-1);
end                                                          
h = inv(rxx)*rxy'; %得到所要涉及的维纳滤波器系数
Signal_Filter1=filter(h,1,NSignal1); %输入信号通过维纳滤波器
%混合信号2维纳滤波
Rxx=xcorr(NSignal2,NSignal2); %混合信号的自相关函数
M=400;                                                            
for i=1:M %得到混合信号的自相关矩阵for j=1:Mrxx(i,j)=Rxx(abs(j-i)+N);end
end
Rxy=xcorr(NSignal2,Signal2); %混合信号和原信号的互相关函数
for i=1:Mrxy(i)=Rxy(i+N-1);
end %混合信号和原信号的互相关向量
h=inv(rxx)*rxy'; %得到所要涉及的维纳滤波器系数
Signal_Filter2=filter(h,1,NSignal2);%将输入信号通过维纳滤波器
figure(2);
subplot(3,2,1);                                                 
plot(Signal2);%原始信号
title('原始信号2');
subplot(3,2,3);                         
plot(NSignal1);%信号3
title('信号3');
subplot(3,2,5);  
plot(Signal_Filter1);%维纳滤波后的信号
title('维纳滤波后高斯的信号');
subplot(3,2,2);                                                 
plot(Signal2);%原始信号
title('原始信号2');
subplot(3,2,4);                         
plot(NSignal2);%信号4
title('信号4');
subplot(3,2,6);  
plot(Signal_Filter2);%维纳滤波后的信号
title('维纳滤波后白的信号');

视图效果

 

3、 混合信号1和信号2LMS算法滤波

实现代码

k=300; %时域LMS(最小均方)算法滤波器阶数
u=0.001;%步长因子
yn_1=zeros(1,N);%output signal
yn_2=zeros(1,N);%output signa2
yn_1(1:k)=NoiseSignal1(1:k);%将输入信号1的前k个值作为输出yn_1的前k个值
yn_2(1:k)=NoiseSignal2(1:k);%将输入信号2的前k个值作为输出yn_2的前k个值
w=zeros(1,k);%设置加权初值
w1=zeros(1,k);%设置加权初值
e=zeros(1,N);%误差信号
e1=zeros(1,N);%误差信号
%用LMS算法迭代滤波
for i=(k+1):NXN=NoiseSignal1((i-k+1):(i));XN1=NoiseSignal2((i-k+1):(i));yn_1(i)=w*XN';yn_2(i)=w1*XN1';e(i)=Signal1(i)-yn_1(i);e1(i)=Signal1(i)-yn_2(i);w=w+2*u*e(i)*XN;w1=w1+2*u*e1(i)*XN1;
end
subplot(3,2,1);
plot(Signal1); %Signal1信号
axis([k+1,2000,-4,4]);
title('原始信号1');
subplot(3,2,3);
plot(NoiseSignal1); %NoiseSignal1信号
axis([k+1,2000,-4,4]);
title('信号1');
subplot(3,2,5);
plot(yn_1);%NoiseSignal1自适应滤波后信号
% axis([k+1,2000,-4,4]);
title('自适应滤波后信号1');
subplot(3,2,2);
plot(Signal1); %Signal1信号
axis([k+1,2000,-4,4]);
title('原始信号1');
subplot(3,2,4);
plot(NoiseSignal2); %NoiseSignal1信号
axis([k+1,2000,-4,4]);
title('信号2');
subplot(3,2,6);
plot(yn_2);%NoiseSignal1自适应滤波后信号
% axis([k+1,2000,-4,4]);
title('自适应滤波后信号2');

视图效果

4、 混合信号3和信号4LMS算法滤波

实现代码

k=100; %时域LMS(最小均方)算法滤波器阶数
u=0.001;%步长因子
yn_1=zeros(1,N);%output signal
yn_2=zeros(1,N);%output signa2
yn_1(1:k)=NSignal1(1:k);%将输入信号1的前k个值作为输出yn_1的前k个值
yn_2(1:k)=NSignal2(1:k);%将输入信号2的前k个值作为输出yn_1的前k个值
w=zeros(1,k);%设置加权初值
w1=zeros(1,k);%设置加权初值
e=zeros(1,N);%误差信号
%用LMS算法迭代滤波
for i=(k+1):NXN=NSignal1((i-k+1):(i));XN1=NSignal2((i-k+1):(i));yn_1(i)=w*XN';yn_2(i)=w1*XN1';e(i)=Signal2(i)-yn_1(i);e1(i)=Signal2(i)-yn_2(i);w=w+2*u*e(i)*XN;w1=w1+2*u*e1(i)*XN1;
end
subplot(3,2,1);
plot(Signal2,'r'); %Signal1信号
axis([k+1,2000,-4,4]);
title('原始信号2');
subplot(3,2,3);
plot(NSignal1,'g'); %NoiseSignal1信号
axis([k+1,2000,-4,4]);
title('信号3');
subplot(3,2,5);
plot(yn_1,'b');%NoiseSignal1自适应滤波后信号
axis([k+1,2000,-4,4]);
title('自适应滤波后信号3');
subplot(3,2,2);
plot(Signal2); %Signal1信号
axis([k+1,2000,-4,4]);
title('原始信号2');
subplot(3,2,4);
plot(NSignal2); %NoiseSignal1信号
axis([k+1,2000,-4,4]);
title('信号4');
subplot(3,2,6);
plot(yn_2);%NoiseSignal1自适应滤波后信号
axis([k+1,2000,-4,4]);
title('自适应滤波后信号4');

试图效果

5、信号1和信号2 小波滤波

实现代码

%混合信号1/2/3/4小波变换滤波
[xd1,cxd1,lxd1] = wden(NoiseSignal1,'sqtwolog','s','one',6,'db3');%NoiseSignal1小波滤波 S为软阈值H为硬阈值
[xd2,cxd2,lxd2] = wden(NoiseSignal2,'sqtwolog','h','sln',6,'db3');%NoiseSignal2小波滤波 
[xd3,cxd3,lxd3] = wden(NSignal1,'sqtwolog','s','one',6,'db3');%NSignal1小波滤波
[xd4,cxd4,lxd4] = wden(NSignal2,'sqtwolog','h','sln',6,'db3');%NSignal2小波滤波
figure(1)
subplot(3,2,1);
plot(Signal1);
title('原始信号1');
subplot(3,2,3);
plot(NoiseSignal1);
title('信号1');
subplot(3,2,5);
plot(xd1);
title('小波滤波信号1');
subplot(3,2,2);
plot(Signal1);
title('原始信号1');
subplot(3,2,4);
plot(NoiseSignal2);
title('信号2');
subplot(3,2,6);
plot(xd2);
title('小波滤波信号2');

视图效果 

6、信号3和信号4小波滤波

实现代码

%混合信号1/2/3/4小波变换滤波
[xd1,cxd1,lxd1] = wden(NoiseSignal1,'sqtwolog','s','one',6,'db3');%NoiseSignal1小波滤波 S为软阈值H为硬阈值
[xd2,cxd2,lxd2] = wden(NoiseSignal2,'sqtwolog','h','sln',6,'db3');%NoiseSignal2小波滤波 
[xd3,cxd3,lxd3] = wden(NSignal1,'sqtwolog','s','one',6,'db3');%NSignal1小波滤波
[xd4,cxd4,lxd4] = wden(NSignal2,'sqtwolog','h','sln',6,'db3');%NSignal2小波滤波
figure(2)
subplot(3,2,1);
plot(Signal2);
title('原始信号1');
subplot(3,2,3);
plot(NSignal1);
title('信号1');
subplot(3,2,5);
plot(xd3);
title('小波滤波信号1');
subplot(3,2,2);
plot(Signal2);
title('原始信号1');
subplot(3,2,4);
plot(NSignal2);
title('信号2');
subplot(3,2,6);
plot(xd4);
title('小波滤波信号2');

视图效果

这篇关于30、matlab现代滤波:维纳滤波/LMS算法滤波/小波变换滤波的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040723

相关文章

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系