MATLAB中关于filter的使用和原理

Filter函数的使用和原理

在命令行下输入

>> help filter

弹出框会出现以下文档,点击查看关于filter的内容

在这里插入图片描述

filter是一维数字滤波器

y = filter(b,a,x) 使用由分子和分母系数 b 和 a 定义的有理传递函数 对输入数据 x 进行滤波。
如果 a(1) 不等于 1,则 filter 按 a(1) 对滤波器系数进行归一化。因此,a(1) 必须是非零值。

由于filter是一维的所以在输入多维或者矩阵时候会按照以下的进行处理

如果 x 为向量,则 filter 将滤波后数据以大小与 x 相同的向量形式返回。

如果 x 为矩阵,则 filter 沿着第一维度操作并返回每列的滤波后的数据。

如果 x 为多维数组,则 filter 沿大小不等于 1 的第一个数组维度进行计算。

当然也可以自行选择不同的进行处理:

y = filter(b,a,x,zi,dim) 沿维度 dim 进行计算。例如,如果 x 为矩阵,则 filter(b,a,x,zi,2) 返回每行滤波后的数据。

filter滤波的示例工程:

移动平均滤波:

移动平均滤波的原理在我上个博客有讲解可以观看:
Matlab信号处理(平滑滤波)
以下是filter的公式运算:

t = linspace(0,2*pi,100);
z = randn(size(t));
x = sin(2*pi*t)+z;          %%产生一个带有噪声的正弦信号

windows = 5;        %设置窗口数量        filter(b,a,x);
b = 1/windows*(ones(1,windows));              %移动平均滤波器
x1 = filter(b,1,x);
plot(t,x,t,x1,'r');

legend('Input Data','Filtered Data')

在这里插入图片描述

由公式可以看出在数据的起始位置会自动补上0(可能和实际结果有较大出入),其余部分则是对前(windows-1)数求一个平均值,达到平均滤波算法;
在这里插入图片描述

					由实验效果可以看出来使用filte滤波时候会产生时移

对矩阵进行滤波:

对矩阵进行滤波操作用到的函数:
在这里插入图片描述

%%
clc
clear
close all

x = rand(2,15);        %创建一个由随机输入数据组成的 2×15 矩阵。
t = 0:length(x)-1;     %

b = 1;
a = [1 -0.2];

% 沿着 x 的第二维度应用传递函数并返回每行的一维数字滤波结果。绘制原始数据的第一行对已滤波数据的图
%y = filter(b,a,x,zi,dim) 沿维度 dim 进行计算。例如,如果 x 为矩阵,则 filter(b,a,x,zi,2) 返回每行滤波后的数据。

y = filter(b,a,x,[],2);
subplot(211);
plot(t,x(1,:),t,y(1,:),'r');
subplot(212);
plot(t,x(2,:),t,y(2,:),'r');
x(1,:)
y(1,:)
x(2,:)
y(2,:)
ndims(x)

在这里插入图片描述

对于以上函数中dim的使用在这里插入图片描述
在对以上数据中将生成的x[1:0 ],y[1:0]分别显示数值观察数值变化;
在这里插入图片	描述

				    可以看出对于x[1: ]数据滤波之后的效果和之前没有区别	

当dim > ndim(数组维度数目)会返回x值
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值