在另一个信号中找到一个子信号

Gar*_* Mc -1 matlab signals signal-processing

假设我们有一个信号,例如:

x = [1 2 9 16 18 19 18 16 9 7 4 2 1 1 0 0];
Run Code Online (Sandbox Code Playgroud)

我们想找到信号的位置:

y = [10 8 4 3 1];
Run Code Online (Sandbox Code Playgroud)

[9 7 4 2 1]在此示例中,它靠近n = 9

您如何去寻找n

Eit*_*n T 5

回答原始问题:
要找到确切的子向量,可以使用findstr

n = findstr(y, x)
Run Code Online (Sandbox Code Playgroud)

修改后的问题的答案:
要找到最接近的匹配子信号,可以使用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))
Run Code Online (Sandbox Code Playgroud)

这依赖于将幅度和能量相关性都考虑在内的经验度量。
在大多数情况下,它工作得非常准确。在此示例中,它正确产生:

n =

    9
Run Code Online (Sandbox Code Playgroud)