Matlab中的简单滑动窗口过滤器

Wis*_*saF 3 matlab filter sliding-window

我没有包nlfilter,我没有完全遵循这个例子.

我有一个非常简单的功能fun,我想将它应用到一个移动的数组窗口.数组是Nx1,我想查看长度k间隔,比方说.因此,对于N=10k=3fun = @(x) min(x);我会得到

A = [13 14 2 14 10 3 5 9 15 8];

filter(A,k,fun) = [2 2 2 3 3 3 5 8];
Run Code Online (Sandbox Code Playgroud)

在这里我只想查看索引1,2,3然后2,3,4然后......然后是8,9,10,所以最后的序列是长度7.我可以用for循环轻松完成这个,但是我不知道如何为Matlab进行矢量化.请帮忙.谢谢.

Joh*_*lby 6

这是一个非常简单快速的方法:

>> min([A(1:(end-2)); A(2:(end-1)); A(3:end)], [], 1)

ans =

     2     2     2     3     3     3     5     8
Run Code Online (Sandbox Code Playgroud)

编辑:既然你想要一个完整的功能......

function running_min = running_min(x, k)

xrep = repmat(x, 1, k);
xrep = reshape([xrep zeros(1, k)], length(x)+1, k);
running_min = min(xrep, [], 2)';
running_min = running_min(1:end-k);
Run Code Online (Sandbox Code Playgroud)