主要内容

dsp。MedianFilter

中值滤波器

描述

这个dsp。MedianFilter系统对象™ 沿每个通道独立计算输入信号随时间的移动中值。对象使用滑动窗口方法计算移动中值。在该方法中,在每个通道上逐个采样移动指定长度的窗口,对象计算窗口中数据的中值。有关详细信息,请参阅算法

要计算输入的移动中值,请执行以下操作:

  1. 创建dsp。MedianFilter对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

创造

描述

medFilt= dsp。MedianFilter返回中值筛选器对象,medFilt,使用默认属性。

实例

medFilt= dsp。MedianFilter (Len)设置WindowLength财产Len

medFilt = dsp.MedianFilter(名称、值)指定WindowLength使用名称,值一对

例子:

movMin=dsp.MedianFilter(“WindowLength”,5);

性质

全部展开

除非另有说明,属性是nontunable,这意味着您不能在调用对象之后更改它们的值。对象在调用时锁定,而释放函数打开它们。

如果一个属性是可调,您可以随时更改其值。

有关更改特性值的详细信息,请参见基于系统对象的MATLAB系统设计

样本中滑动窗口的长度,指定为正标量整数。

使用

描述

实例

Y=医疗过滤器(x)计算输入信号的移动中值,x,使用滑动窗口方法。

输入参数

全部展开

数据输入,指定为向量或矩阵。如果x是矩阵,则每列被视为一个独立通道。沿每个通道计算移动中值。对象接受多通道输入,即,M——- - - - - -N大小的输入,M≥ 1,及N> 1。M是每个帧(或通道)的样本数量,和N是通道数。

对象还接受可变大小的输入。锁定对象后,可以更改每个输入通道的大小,但不能更改通道数。

数据类型:仅有一个的|

输出参数

全部展开

过滤后的信号,以向量或矩阵的形式返回。输出的大小和数据类型与输入的大小和数据类型相匹配。

数据类型:仅有一个的|

对象的功能

要使用对象函数,请将系统对象指定为第一个输入参数。例如,释放名为的系统对象的系统资源obj,使用下面的语法:

发行版(obj)

全部展开

一步 系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 使内部状态复位系统对象

例子

全部折叠

使用中值滤波器从带噪正弦波信号中过滤高频噪声。比较中值滤波器和平均滤波器的性能。

初始化

建立了一个dsp。MedianFilter对象,medFilt,及dsp.MovingAverage对象,movavgWin.这些对象使用窗口长度为7的滑动窗口方法。创建用于查看输出的时间范围。

Fs = 1000;medFilt = dsp.MedianFilter (7);movavgWin = dsp.MovingAverage (7);范围= timescope (“采样器”Fs,...“TimeSpanSource”,“属性”,...“TimeSpanOverrunAction”,“滚动”,...“时间跨度”, 1“ShowGrid”符合事实的...“YLimits”3 [3],...“LayoutDimensions”,[3 1],...“NumInputPorts”,3); scope.ActiveDisplay=1;范围.标题=“信号+噪声”;范围。ActiveDisplay = 2;范围。Title ='移动平均输出(窗口长度= 7)';范围。ActiveDisplay = 3;范围。Title ='中值滤波器输出(窗口长度= 7)';FrameLength = 256;数= 1;正弦= dsp。SineWave (“采样器”Fs,“频率”,10,...“SamplesPerFrame”, FrameLength);

滤除噪声正弦波

生成频率为10 Hz的带噪正弦波信号。对信号应用中值滤波器和移动平均对象。在时间范围上查看输出。

对于i=1:500 hfn=3*(rand(FrameLength,1)<0.02);x=sine()+1e-2*randn(FrameLength,1)+hfn;y1=movavgWin(x);y2=medFilt(x);范围(x,y1,y2);终止

中值滤波器比移动平均目标更有效地去除高频噪声。

这个例子展示了如何从流信号中去除高频异常dsp。MedianFilter系统对象?。

使用dsp。MatFileReader系统对象读取陀螺仪MAT文件。陀螺仪MAT文件包含3列数据,每列包含7140个样本。这三列代表X-轴心国,Y-轴线,以及Z-轴数据从陀螺仪运动传感器。选择714个样本的帧大小,使每一列数据包含10个帧。这个dsp。MedianFilter系统对象使用窗口长度为10。创建一个timescope对象以查看过滤后的输出。

读者= dsp。MatFileReader (“SamplesPerFrame”,714,“文件名”,“LSM9DS1gyroData73.mat”,...“VariableName”,“数据”);medFilt = dsp.MedianFilter (10);范围= timescope (“NumInputPorts”, 1“采样器”, 119,“YLimits”(-300 300),...“ChannelNames”,{“输入”,“过滤输出”},...“TimeSpanSource”,“属性”,“时间跨度”现年60岁的“ShowLegend”,对);

滤波陀螺仪数据使用dsp。MedianFilter系统对象。查看已筛选的Z-轴数据在时间范围内。

对于i=1:10 gyroData=reader();filteredData=medFilt(gyroData);scope([gyroData(:,3),filteredData(:,3)];终止

原始数据包含几个异常值。放大数据以确认中值滤波器删除了所有异常值。

算法

全部展开

参考文献

[1] Bodenham,院长。流数据的自适应过滤和变化检测博士论文。伦敦帝国理工学院,2012年。

扩展能力

R2016b中引入