假设我们有一个信号,例如:
x = [1 2 9 16 18 19 18 16 9 7 4 2 1 1 0 0];
我们希望找到信号的位置:
y = [10 8 4 3 1];
靠近[9 7 4 2 1]
,在此示例中为n = 9
。
如何查找n
?
答案 0 :(得分:4)
回答原始问题:
要查找完全子向量,您可以使用findstr
:
n = findstr(y, x)
回答修订后的问题:
要查找最接近匹配的子信号,您可以使用conv2
:
M = conv2(A(:), flipud(B(:)), 'valid');
NA = conv2(A(:) .^ 2, ones(size(B(:))), 'valid');
NB = round(norm(B(:)) ^ 2);
D1 = abs(NA - NB);
D2 = abs(M .^ 2 - NA * NB);
idx = find(D1 == min(D1));
n = idx(find(D2(idx) == min(D2(idx)), 1))
这取决于考虑振幅和能量相关性的经验指标 在大多数情况下,它非常准确。在这个例子中,它正确地产生:
n =
9
答案 1 :(得分:4)
正如您所说,您需要使用某种成本或可能性函数。这是一个for循环开始,我会让你自己找到成本函数:
x = [1 2 9 16 18 19 18 16 9 7 4 2 1 1 0 0];
y = [10 7 4 3 1];
cor = 9999;
n=0;
for i=1:(length(x)-length(y))
% Complete this line to check if x matches y at this point
score = SomeFunctionChecking( x(i : (i+length(y)-1) ), y ));
if (score < cor)
cor = score;
n = i;
end
end
display(n);