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:M
        rxx(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:M
        rxx(i,j)=Rxx(abs(j-i)+N);
    end
end
Rxy=xcorr(NoiseSignal2,Signal1); %混合信号和原信号的互相关函数
for i=1:M
    rxy(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:M
        rxx(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:M
        rxx(i,j)=Rxx(abs(j-i)+N);
    end
end
Rxy=xcorr(NSignal2,Signal2); %混合信号和原信号的互相关函数
for i=1:M
    rxy(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):N
        XN=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):N
        XN=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');

视图效果

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 00:34:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 00:34:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 00:34:02       82 阅读
  4. Python语言-面向对象

    2024-06-08 00:34:02       91 阅读

热门阅读

  1. Spring的bean的生命周期

    2024-06-08 00:34:02       24 阅读
  2. C++中的智能指针

    2024-06-08 00:34:02       31 阅读
  3. LIMS系统在汽车第三方检测实验室的应用

    2024-06-08 00:34:02       35 阅读
  4. Pytorch常用函数用法归纳:创建tensor张量

    2024-06-08 00:34:02       31 阅读
  5. Pytorch中Tensor的类型对应表

    2024-06-08 00:34:02       27 阅读
  6. 油封包装的关键注意事项

    2024-06-08 00:34:02       30 阅读
  7. 行列视(RCV)系统由哪几部分组成?

    2024-06-08 00:34:02       25 阅读
  8. Log4j日志级别介绍

    2024-06-08 00:34:02       28 阅读
  9. 数据结构:哈夫曼树及其哈夫曼编码

    2024-06-08 00:34:02       27 阅读