matlab数据序列的几种滤波器

一维数据序列滤波的matlab代码,

其实和之前做的图像滤波大同小异,

只是图像的噪声情况复杂得多,

而且是二维的。

做这个主要是手上有个心电的的mens传感器,

蓝牙把数据传过来做一个数据的100Hz左右的带通滤波,

用butterworht做个带通滤波,

再用c语言重构一下。

 1 %****************************************************************************************
 2 %
 3 %                      创建两个信号Mix_Signal_1 和信号 Mix_Signal_2
 4 %
 5 %***************************************************************************************
 6
 7 Fs = 1000;                                                                        %采样率
 8 N  = 1000;                                                                        %采样点数
 9 n  = 0:N-1;
10 t   = 0:1/Fs:1-1/Fs;                                                            %时间序列
11 Signal_Original_1 =sin(2*pi*10*t)+sin(2*pi*20*t)+sin(2*pi*30*t);
12 Noise_White_1    = [0.3*randn(1,500), rand(1,500)];           %前500点高斯分部白噪声,后500点均匀分布白噪声
13 Mix_Signal_1   = Signal_Original_1 + Noise_White_1;        %构造的混合信号
14
15 Signal_Original_2  =  [zeros(1,100), 20*ones(1,20), -2*ones(1,30), 5*ones(1,80), -5*ones(1,30), 9*ones(1,140), -4*ones(1,40), 3*ones(1,220), 12*ones(1,100), 5*ones(1,20), 25*ones(1,30), 7 *ones(1,190)];
16 Noise_White_2     =  0.5*randn(1,1000);                                 %高斯白噪声
17 Mix_Signal_2        =  Signal_Original_2 + Noise_White_2;      %构造的混合信号

一、butterworth filter

 1 %****************************************************************************************
 2 %
 3 %                信号Mix_Signal_1 和 Mix_Signal_2  分别作巴特沃斯低通滤波。
 4 %
 5 %***************************************************************************************
 6
 7 %混合信号 Mix_Signal_1  巴特沃斯低通滤波
 8 figure(1);
 9 Wc=2*50/Fs;                                          %截止频率 50Hz
10 [b,a]=butter(4,Wc);
11 Signal_Filter=filter(b,a,Mix_Signal_1);
12
13 subplot(4,1,1);                                        %Mix_Signal_1 原始信号
14 plot(Mix_Signal_1);
15 axis([0,1000,-4,4]);
16 title(‘原始信号 ‘);
17
18 subplot(4,1,2);                                        %Mix_Signal_1 低通滤波滤波后信号
19 plot(Signal_Filter);
20 axis([0,1000,-4,4]);
21 title(‘巴特沃斯低通滤波后信号‘);
22
23 %混合信号 Mix_Signal_2  巴特沃斯低通滤波
24 Wc=2*100/Fs;                                          %截止频率 100Hz
25 [b,a]=butter(4,Wc);
26 Signal_Filter=filter(b,a,Mix_Signal_2);
27
28 subplot(4,1,3);                                        %Mix_Signal_2 原始信号
29 plot(Mix_Signal_2);
30 axis([0,1000,-10,30]);
31 title(‘原始信号 ‘);
32
33 subplot(4,1,4);                                       %Mix_Signal_2 低通滤波滤波后信号
34 plot(Signal_Filter);
35 axis([0,1000,-10,30]);
36 title(‘巴特沃斯低通滤波后信号‘);

二、FIR

 1 %****************************************************************************************
 2 %
 3 %                信号Mix_Signal_1 和 Mix_Signal_2  分别作FIR低通滤波。
 4 %
 5 %***************************************************************************************
 6
 7 %混合信号 Mix_Signal_1  FIR低通滤波
 8 figure(2);
 9 F   =  [0:0.05:0.95];
10 A  =  [1    1      0     0     0    0      0     0     0    0     0     0     0     0     0     0    0   0   0   0] ;
11 b  =  firls(20,F,A);
12 Signal_Filter = filter(b,1,Mix_Signal_1);
13
14 subplot(4,1,1);                                          %Mix_Signal_1 原始信号
15 plot(Mix_Signal_1);
16 axis([0,1000,-4,4]);
17 title(‘原始信号 ‘);
18
19 subplot(4,1,2);                                          %Mix_Signal_1 FIR低通滤波滤波后信号
20 plot(Signal_Filter);
21 axis([0,1000,-5,5]);
22 title(‘FIR低通滤波后的信号‘);
23
24 %混合信号 Mix_Signal_2  FIR低通滤波
25 F   =  [0:0.05:0.95];
26 A  =  [1    1      1     1     1    0      0    0     0    0     0     0     0     0     0     0    0   0   0   0] ;
27 b  =  firls(20,F,A);
28 Signal_Filter = filter(b,1,Mix_Signal_2);
29 subplot(4,1,3);                                          %Mix_Signal_2 原始信号
30 plot(Mix_Signal_2);
31 axis([0,1000,-10,30]);
32 title(‘原始信号 ‘);
33
34 subplot(4,1,4);                                          %Mix_Signal_2 FIR低通滤波滤波后信号
35 plot(Signal_Filter);
36 axis([0,1000,-10,30]);
37 title(‘FIR低通滤波后的信号‘);

三、移动平均滤波

 1 %****************************************************************************************
 2 %
 3 %                信号Mix_Signal_1 和 Mix_Signal_2  分别作移动平均滤波
 4 %
 5 %***************************************************************************************
 6
 7 %混合信号 Mix_Signal_1  移动平均滤波
 8 figure(3);
 9 b  =  [1 1 1 1 1 1]/6;
10 Signal_Filter = filter(b,1,Mix_Signal_1);
11
12 subplot(4,1,1);                                          %Mix_Signal_1 原始信号
13 plot(Mix_Signal_1);
14 axis([0,1000,-4,4]);
15 title(‘原始信号 ‘);
16
17 subplot(4,1,2);                                          %Mix_Signal_1 移动平均滤波后信号
18 plot(Signal_Filter);
19 axis([0,1000,-4,4]);
20 title(‘移动平均滤波后的信号‘);
21
22 %混合信号 Mix_Signal_2  移动平均滤波
23 b  =  [1 1 1 1 1 1]/6;
24 Signal_Filter = filter(b,1,Mix_Signal_2);
25 subplot(4,1,3);                                          %Mix_Signal_2 原始信号
26 plot(Mix_Signal_2);
27 axis([0,1000,-10,30]);
28 title(‘原始信号 ‘);
29
30 subplot(4,1,4);                                          %Mix_Signal_2 移动平均滤波后信号
31 plot(Signal_Filter);
32 axis([0,1000,-10,30]);
33 title(‘移动平均滤波后的信号‘);

四、中值滤波

 1 %****************************************************************************************
 2 %
 3 %                信号Mix_Signal_1 和 Mix_Signal_2  分别作中值滤波
 4 %
 5 %***************************************************************************************
 6
 7 %混合信号 Mix_Signal_1  中值滤波
 8 figure(4);
 9 Signal_Filter=medfilt1(Mix_Signal_1,10);
10
11 subplot(4,1,1);                                          %Mix_Signal_1 原始信号
12 plot(Mix_Signal_1);
13 axis([0,1000,-5,5]);
14 title(‘原始信号 ‘);
15
16 subplot(4,1,2);                                          %Mix_Signal_1 中值滤波后信号
17 plot(Signal_Filter);
18 axis([0,1000,-5,5]);
19 title(‘中值滤波后的信号‘);
20
21 %混合信号 Mix_Signal_2  中值滤波
22 Signal_Filter=medfilt1(Mix_Signal_2,10);
23 subplot(4,1,3);                                          %Mix_Signal_2 原始信号
24 plot(Mix_Signal_2);
25 axis([0,1000,-10,30]);
26 title(‘原始信号 ‘);
27
28 subplot(4,1,4);                                          %Mix_Signal_2 中值滤波后信号
29 plot(Signal_Filter);
30 axis([0,1000,-10,30]);
31 title(‘中值滤波后的信号‘);

五、维纳滤波

 1 %****************************************************************************************
 2 %
 3 %                信号Mix_Signal_1 和 Mix_Signal_2  分别作维纳滤波
 4 %
 5 %***************************************************************************************
 6
 7 %混合信号 Mix_Signal_1  维纳滤波
 8 figure(5);
 9 Rxx=xcorr(Mix_Signal_1,Mix_Signal_1);              %得到混合信号的自相关函数
10 M=100;                                                             %维纳滤波器阶数
11 for i=1:M                                                           %得到混合信号的自相关矩阵
12     for j=1:M
13         rxx(i,j)=Rxx(abs(j-i)+N);
14     end
15 end
16 Rxy=xcorr(Mix_Signal_1,Signal_Original_1);       %得到混合信号和原信号的互相关函数
17 for i=1:M
18     rxy(i)=Rxy(i+N-1);
19 end                                                                  %得到混合信号和原信号的互相关向量
20 h = inv(rxx)*rxy‘;                                               %得到所要涉及的wiener滤波器系数
21 Signal_Filter=filter(h,1, Mix_Signal_1);               %将输入信号通过维纳滤波器
22
23 subplot(4,1,1);                                                   %Mix_Signal_1 原始信号
24 plot(Mix_Signal_1);
25 axis([0,1000,-5,5]);
26 title(‘原始信号 ‘);
27
28 subplot(4,1,2);                                                   %Mix_Signal_1 维纳滤波后信号
29 plot(Signal_Filter);
30 axis([0,1000,-5,5]);
31 title(‘维纳滤波后的信号‘);
32
33 %混合信号 Mix_Signal_2  维纳滤波
34 Rxx=xcorr(Mix_Signal_2,Mix_Signal_2);              %得到混合信号的自相关函数
35 M=500;                                                             %维纳滤波器阶数
36 for i=1:M                                                           %得到混合信号的自相关矩阵
37     for j=1:M
38         rxx(i,j)=Rxx(abs(j-i)+N);
39     end
40 end
41 Rxy=xcorr(Mix_Signal_2,Signal_Original_2);       %得到混合信号和原信号的互相关函数
42 for i=1:M
43     rxy(i)=Rxy(i+N-1);
44 end                                                                  %得到混合信号和原信号的互相关向量
45 h=inv(rxx)*rxy‘;                                               %得到所要涉及的wiener滤波器系数
46 Signal_Filter=filter(h,1, Mix_Signal_2);             %将输入信号通过维纳滤波器
47
48 subplot(4,1,3);                                                  %Mix_Signal_2 原始信号
49 plot(Mix_Signal_2);
50 axis([0,1000,-10,30]);
51 title(‘原始信号 ‘);
52
53 subplot(4,1,4);                                                  %Mix_Signal_2 维纳滤波后信号
54 plot(Signal_Filter);
55 axis([0,1000,-10,30]);
56 title(‘维纳滤波后的信号‘);

六、自适应滤波

 1 %****************************************************************************************
 2 %
 3 %                信号Mix_Signal_1 和 Mix_Signal_2  分别作自适应滤波
 4 %
 5 %***************************************************************************************
 6
 7 %混合信号 Mix_Signal_1 自适应滤波
 8 figure(6);
 9 N=1000;                                             %输入信号抽样点数N
10 k=100;                                                  %时域抽头LMS算法滤波器阶数
11 u=0.001;                                             %步长因子
12
13 %设置初值
14 yn_1=zeros(1,N);                                  %output signal
15 yn_1(1:k)=Mix_Signal_1(1:k);                 %将输入信号SignalAddNoise的前k个值作为输出yn_1的前k个值
16 w=zeros(1,k);                                        %设置抽头加权初值
17 e=zeros(1,N);                                        %误差信号
18
19 %用LMS算法迭代滤波
20 for i=(k+1):N
21         XN=Mix_Signal_1((i-k+1):(i));
22         yn_1(i)=w*XN‘;
23         e(i)=Signal_Original_1(i)-yn_1(i);
24         w=w+2*u*e(i)*XN;
25 end
26
27 subplot(4,1,1);
28 plot(Mix_Signal_1);                               %Mix_Signal_1 原始信号
29 axis([k+1,1000,-4,4]);
30 title(‘原始信号‘);
31
32 subplot(4,1,2);
33 plot(yn_1);                                            %Mix_Signal_1 自适应滤波后信号
34 axis([k+1,1000,-4,4]);
35 title(‘自适应滤波后信号‘);
36
37 %混合信号 Mix_Signal_2 自适应滤波
38 N=1000;                                             %输入信号抽样点数N
39 k=500;                                                %时域抽头LMS算法滤波器阶数
40 u=0.000011;                                        %步长因子
41
42 %设置初值
43 yn_1=zeros(1,N);                                   %output signal
44 yn_1(1:k)=Mix_Signal_2(1:k);                  %将输入信号SignalAddNoise的前k个值作为输出yn_1的前k个值
45 w=zeros(1,k);                                        %设置抽头加权初值
46 e=zeros(1,N);                                        %误差信号
47
48 %用LMS算法迭代滤波
49 for i=(k+1):N
50         XN=Mix_Signal_2((i-k+1):(i));
51         yn_1(i)=w*XN‘;
52         e(i)=Signal_Original_2(i)-yn_1(i);
53         w=w+2*u*e(i)*XN;
54 end
55
56 subplot(4,1,3);
57 plot(Mix_Signal_2);                               %Mix_Signal_1 原始信号
58 axis([k+1,1000,-10,30]);
59 title(‘原始信号‘);
60
61 subplot(4,1,4);
62 plot(yn_1);                                            %Mix_Signal_1 自适应滤波后信号
63 axis([k+1,1000,-10,30]);
64 title(‘自适应滤波后信号‘);

七、小波滤波

 1 %****************************************************************************************
 2 %
 3 %                信号Mix_Signal_1 和 Mix_Signal_2  分别作小波滤波
 4 %
 5 %***************************************************************************************
 6
 7 %混合信号 Mix_Signal_1  小波滤波
 8 figure(7);
 9 subplot(4,1,1);
10 plot(Mix_Signal_1);                                 %Mix_Signal_1 原始信号
11 axis([0,1000,-5,5]);
12 title(‘原始信号 ‘);
13
14 subplot(4,1,2);
15 [xd,cxd,lxd] = wden(Mix_Signal_1,‘sqtwolog‘,‘s‘,‘one‘,2,‘db3‘);
16 plot(xd);                                                 %Mix_Signal_1 小波滤波后信号
17 axis([0,1000,-5,5]);
18 title(‘小波滤波后信号 ‘);
19
20 %混合信号 Mix_Signal_2  小波滤波
21 subplot(4,1,3);
22 plot(Mix_Signal_2);                                 %Mix_Signal_2 原始信号
23 axis([0,1000,-10,30]);
24 title(‘原始信号 ‘);
25
26 subplot(4,1,4);
27 [xd,cxd,lxd] = wden(Mix_Signal_2,‘sqtwolog‘,‘h‘,‘sln‘,3,‘db3‘);
28 plot(xd);                                                %Mix_Signal_2 小波滤波后信号
29 axis([0,1000,-10,30]);
30 title(‘小波滤波后信号 ‘);

时间: 2024-12-31 05:52:37

matlab数据序列的几种滤波器的相关文章

java:Hibernate框架(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态)

1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configurati

数据结构中的7种排序算法

数据结构中的7种排序算法 排序是将一个记录的任意序列重新排列成一个按键值有序的序列. 时间复杂度主要考虑元素的移动次数. 结构如下: 1.直接插入排序 1,定义:依次将待排序序列中的每一个记录插入到一个已经排好序的序列中,直到全部记录都排好序. 2,时间复杂度:在最好情况下,待排序序列为正序,时间复杂度为O(n):最坏情况下,待排序序列为逆序,时间复杂度为O(n^2);平均情况下,时间复杂度为O(n^2). 3,空间复杂度:O(1). public static void insertSort(

android 数据存储的几种方式

总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络传输到数据处理中心进行存储并进行处理. 对于Android平台来讲,它的存储方式也不外乎这几种,按方式总体来分,也是文件,数据库和网络.但从开发者的

java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例

package org.rui.io.xml; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.Arrays; import java.util.List; import nu.xom.Document; import nu.

java调用matlab函数接口的两种方案

Java 调用matlab 函数接口 Java调用matlab函数接口有两种方式: l 一种是通过matlab把函数打成jar包: l 一种是把matlab编译成dll后,用C++再封装成java能支持的数据类型的dll. 注意:不论用这两种方式中的哪一种,最终部署时都需要matlab环境(MCR,在matlab安装路径下有). 1. 方式一:matlab直接打jar包 1.1. 利用matlab自带工具打jar包 1.1.1. 建立jar包 在matlab的Commond Window中输入d

Android——数据存储(四种方式之一)SharedPrefereces

Android--数据存储(四种方式) 1.SharedPrefereces   轻量级.XML  存储文件名,数据保存在data/data/basepackage/shared_prefs/myopt.xml中   实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default)   2.读写SD卡  SD的根目录  适用于数据流读写 3.SQLite  轻量级.dp文件多用于手机

数据归一化的两种常用方法

数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性.原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价.以下是两种常用的归一化方法: 一.min-max标准化(Min-Max Normalization) 也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 - 1]之间.转换函数如下: 其中max为样本数据的最大

数据持久化的一种方式

/** *数据持久化的四种方式 * *1-------属性列表 * *2-------对象归档 * *3-------SQLite3 * *4-------Core Data * *下面是数据持久化的第一种方式-----写入文件 */ /** *写入文件思路 * *1-----获取需要写入的文件对象 * *2-----获取需要写入的文件对象的文件路径 * *3-----写入文件 * *4-----读取文件 */ NSString* string=@"Copyright (c) 2015年 妖精的

iOS数据存储的几种方式

iOS的数据存储是iOS应用开发的重要知识点: 关于这方面知识,网上有很多介绍,但对于代码层次的使用方式并未有系统全面介绍.此文章针对iOS稍熟悉的童鞋,需要对CoreData的原理有一定的了解.目前存储方式大概有以下几种: NSKeyedArchiver  适用简单数据加密 NSUserDefaults  适用配置参数 Write  文件操作,同NSKeyedArchiver SQLite3  操作较复杂,不建议使用. CoreData  取代SQLite3,但要遵循NSManagedObje