主要内容

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= medFilt (x计算输入信号的移动中位数,x,使用滑动窗口法。

输入参数

全部展开

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

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

数据类型:|

输出参数

全部展开

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

数据类型:|

对象的功能

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

发行版(obj)

全部展开

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

例子

全部折叠

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

初始化

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

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

过滤有噪声的正弦波

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

我= 1:50 0 hfn = 3 *(兰德(FrameLength, 1) < 0.02);x = sin () + 1e-2 * randn(FrameLength,1) + hfn;日元= 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,...“SampleRate”, 119,...“YLimits”(-300 300),...“ChannelNames”, {“输入”“过滤输出”},...“TimeSpanSource”“属性”...“时间间隔”现年60岁的“ShowLegend”,真正的);

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

i = 1:10 gyroData = reader();filteredData = medFilt (gyroData);范围([gyroData (:, 3), filteredData (:, 3)));结束

原始数据包含几个异常值。放大数据,确认中值过滤器删除了所有的离群值。

算法

全部展开

参考文献

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

扩展功能

介绍了R2016b