天天看点

matlab对信号滤波,matlab对信号的滤波方法

https://blog.csdn.net/colapin/article/details/52840075;

关于信号的滤波方法:

1.巴特沃斯低通滤波器去噪

在[B,A]=butter(n,wn)中,n是滤波器的阶数,Wn是截止频率,Wc = 截止频率*2/采样频率

Wc=2*50/Fs;                                          %截止频率 50Hz

[b,a]=butter(4,Wc);

Signal_Filter=filter(b,a,Mix_Signal_1);

2.FIR低通滤波器去噪

F   =  [0:0.05:0.95];

A  =  [1    1      0     0     0    0      0     0     0    0     0     0     0     0     0     0    0   0   0   0] ;

b  =  firls(20,F,A);

Signal_Filter = filter(b,1,Mix_Signal_1);

3. 移动平均滤波去噪

b  =  [1 1 1 1 1 1]/6;

Signal_Filter = filter(b,1,Mix_Signal_1);

4. 中值滤波去噪

Signal_Filter=medfilt1(Mix_Signal_1,10);

5. 维纳滤波去噪

维纳滤波是以均方误差最小(LMS(Least MeanSquare)为准则的,它根据过去观测值和当前观测值来估计信号的当前值,因此它的解形式是系统的传递函数或单位脉冲响应。

Rxx=xcorr(Mix_Signal_1,Mix_Signal_1);              %得到混合信号的自相关函数

M=100;                                                             %维纳滤波器阶数

for i=1:M                                                           %得到混合信号的自相关矩阵

for j=1:M

rxx(i,j)=Rxx(abs(j-i)+N);

end

end

Rxy=xcorr(Mix_Signal_1,Signal_Original_1);       %得到混合信号和原信号的互相关函数

for i=1:M

rxy(i)=Rxy(i+N-1);

end                                                                  %得到混合信号和原信号的互相关向量

h = inv(rxx)*rxy';                                               %得到所要涉及的wiener滤波器系数

Signal_Filter=filter(h,1, Mix_Signal_1);               %将输入信号通过维纳滤波器

6. 自适应滤波去噪

维纳滤波器参数是固定的,适合于平稳随机信号。卡尔曼滤波器参数是时变的,适合于非平稳随机信号

N=1000;                                             %输入信号抽样点数N

k=100;                                                  %时域抽头LMS算法滤波器阶数

u=0.001;                                             %步长因子

%设置初值

yn_1=zeros(1,N);                                  %output signal

yn_1(1:k)=Mix_Signal_1(1:k);                 %将输入信号SignalAddNoise的前k个值作为输出yn_1的前k个值

w=zeros(1,k);                                        %设置抽头加权初值

e=zeros(1,N);                                        %误差信号

%用LMS算法迭代滤波

for i=(k+1):N

XN=Mix_Signal_1((i-k+1):(i));

yn_1(i)=w*XN';

e(i)=Signal_Original_1(i)-yn_1(i);

w=w+2*u*e(i)*XN;

end

7. 小波去噪

[xd,cxd,lxd] = wden(Mix_Signal_1,'sqtwolog','s','one',2,'db3');

plot(xd);                                                 %Mix_Signal_1 小波滤波后信号