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
?
回答原始问题:
要找到确切的子向量,可以使用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)
归档时间: |
|
查看次数: |
1319 次 |
最近记录: |