首页 > 解决方案 > 重写 medfilt1 MATLAB 函数以支持 codegen

问题描述

我正在编写一个使用 medfilt1 函数的 MATLAB 脚本。下面是一个使用 100 阶的示例:

  median_filter_results = medfilt1(my_data, 100);

尝试通过 codegen 导出 MATLAB 代码时,一条错误消息指出不支持 medfilt1。查看MATLAB 文档网站,我可以看出它不存在,而 medfilt2 存在。这使我认为该功能可能很容易重现。

阅读这篇文章时,作者发表了以下评论:

您可以使用 median() 函数。然后你只需要把它放在一个 for 循环中,这是非常微不足道的。

但是,我不完全确定我知道这意味着什么,因为中函数返回一个数字而不是 medfilt1 函数的向量。维基百科走得更远,他们展示了一个滑动窗口,人们可以通过它使用中值函数。但是,我不太确定这就是 MATLAB 正在做的事情。

如何以代码生成安全的方式重写 medfilt1 函数(数据向量和 100 的顺序)?

标签: matlab

解决方案


如果支持 2d 过滤器,您可以重新调整它的用途。

x=rand(100,1);
y1=medfilt1(x,11);
y2=medfilt2(x,[11,1]);
all(y1==y2)

否则,请阅读中值滤波器的作用。它将元素替换为它的中位数及其周围的邻居。邻域的大小是您的参数 n。


推荐阅读