[医]信号
使用相似性搜索查找信号的位置。
库::`工程师`
语法
函数调用
-
istart, istop,dist=findsignal(data,signal,Name,Value)— 使用由一个或多个参数指定的其他参数Name,Value. 参数包括使用的归一化、报告的分段数和使用的距离度量。
争论
名称-值输入参数
指定格式中的可选参数对 名称,值,在哪里 姓名 -参数的名称,以及 价值 -适当的值。 名称-值参数应该放在其他参数之后,但对的顺序无关紧要。
使用逗号分隔名称和值,以及 姓名 把它放在引号里。
例子: n.签名([10,12,3,4], [10.3,12.3], "最大电阻",0.2).
# 正常强度 — 归一化长度
+
标量,标量
Details
归一化长度,设置为整数标量。 该值表示每个样本在数据和信号中归一化的最小样本数。 如果信号是矩阵,则 [医]正常强度 表示列数。
| 数据类型 |
|
# 时间安排 — 时间对齐方法
+
"固定" (默认情况下)| "dtw"
Details
时间对齐方法:
-
"固定"-不要拉伸或重复计数以最小化距离; -
"dtw"-试图通过拉伸时间轴并重复数据或信号中的计数来缩短距离。
# 公制 — 距离度量
+
"平方" (默认情况下)| "绝对" | "欧几里德" | "symmkl"
Details
设置为值之一的距离度量: "平方", "绝对", "欧几里德" 或 "symmkl". 如果 和 是 -测量信号,然后度量设置 -之间的距离 -m倒计时 和 -m倒计时 .
-
"平方"-欧几里德度量的平方,由差的平方和组成: -
"欧几里德"-差异平方和的根,也称为欧几里德度量或 : -
"绝对"-绝对差异的总和,也称为城市街区的距离,曼哈顿度量,出租车度量,或 : -
"symmkl"-对称Kullback-Leibler度量。 此度量仅适用于实数和正数。 和 :
例子:
在数据中查找信号
Details
我们将生成一个由高斯脉冲组成的数据集,其频率为 5 带带宽的Hz 50%,采样半秒,频率为 1 千赫。 让我们创建一个由正弦波的一个半周期组成的信号,频率为 10 赫兹。 让我们绘制数据集和信号。
import EngeeDSP.Functions: findsignal
import EngeeDSP.Functions: gauspuls
fs = 1e3
t = 0:1/fs:0.5
ts = 0:1/fs:0.15
data_result = gauspuls(t, 5, 0.5)
data = data_result.yc
signal = cos.(2π * 10 * ts)
p1 = plot(t, data, title="Data", legend=false)
p2 = plot(ts, signal, title="Signal", legend=false)
plot(p1, p2, layout=(2,1))

让我们找到与信号的欧几里德距离平方最小的数据段。 让我们绘制数据图并突出显示此段。
result = findsignal(data, signal)
plot(t, data, label="Data", linewidth=2)
plot!(t[result[1]:result[1]+length(signal)-1], data[result[1]:result[1]+length(signal)-1],
label="Signal", linewidth=3)
title!("Signal Matches Found")

让我们向数据集中添加两个明显缺失的部分。 让我们找到最接近信号的段(就最小的绝对距离而言)。 让我们绘制数据图并突出显示此段。
dt = data
dt[(t .> 0.31) .& (t .< 0.32)] .= 2.1
dt[(t .> 0.32) .& (t .< 0.33)] .= -2.1
result = findsignal(dt,signal,"Metric","absolute")
plot(t, data, label="Data", linewidth=2)
plot!(t[result[1]:result[1]+length(signal)-1], data[result[1]:result[1]+length(signal)-1],
label="Signal", linewidth=3)
title!("Signal Matches Found")

让轴 x 如果拉伸导致最近的数据段与信号之间的绝对距离较小,则拉伸。
result = findsignal(dt,signal,"TimeAlignment", "dtw", "Metric","absolute")
plot(t, data, label="Data", linewidth=2)
plot!(t[result[1]:result[1]+length(signal)-1], data[result[1]:result[1]+length(signal)-1],
label="Signal", linewidth=3)
title!("Signal Matches Found")
