如何找到具有 Python 的值序列
How do I find a sequence of values with Python
我得到了描述无线电传输 header 的音调序列。我需要检测这个 header 来触发信号解码器功能。
信号图:
这是使用
绘制的列表
ax1.plot(range(len(inst_fr)),inst_fr)
每个音的长度相同,共有9个音,顺序如下(t1,t2,t1,t2,t3,t2,t3,t1)
检测这个问题的最佳方法是什么header考虑到
- 这是一个 9 音的序列
- 有 3 种不同的音调
- 每个音的长度相同
- 我正在使用 scipy.io 进行 audio/signal 处理。
我开始了一种方法来检测至少一个频率,比如 1500
,阈值为 50
。
threshold = 50
freq = 1500
for idx,i in enumerate(inst_fr):
if (freq - threshold) < i < (freq + threshold):
print("%s \t %s" % (idx, i))
这里的问题是我得到了很多“误报”(实际上是真正的肯定)。而且我不太确定如何继续检查频率 +/- 阈值是否在 ~1000 个样本范围内匹配
您可以通过多种不同程度的复杂性和可靠性来解决这个问题。
您可以对理想的样本列表进行互相关(即每个样本在正确的时间都处于正确的水平)并设置一些阈值来检测何时互相关足够高到您喜欢的程度。
我能想到的最简单的方法是在每个符号周期的中间找到一系列样本的平均值,并忽略噪声中的任何异常值(比如 > 2500,< 1250)。例如,您有一个以样本 8000 左右为中心的位,您可以平均 7900 到 8100 并找到最接近的音调。
我得到了描述无线电传输 header 的音调序列。我需要检测这个 header 来触发信号解码器功能。
信号图:
这是使用
绘制的列表ax1.plot(range(len(inst_fr)),inst_fr)
每个音的长度相同,共有9个音,顺序如下(t1,t2,t1,t2,t3,t2,t3,t1)
检测这个问题的最佳方法是什么header考虑到
- 这是一个 9 音的序列
- 有 3 种不同的音调
- 每个音的长度相同
- 我正在使用 scipy.io 进行 audio/signal 处理。
我开始了一种方法来检测至少一个频率,比如 1500
,阈值为 50
。
threshold = 50
freq = 1500
for idx,i in enumerate(inst_fr):
if (freq - threshold) < i < (freq + threshold):
print("%s \t %s" % (idx, i))
这里的问题是我得到了很多“误报”(实际上是真正的肯定)。而且我不太确定如何继续检查频率 +/- 阈值是否在 ~1000 个样本范围内匹配
您可以通过多种不同程度的复杂性和可靠性来解决这个问题。
您可以对理想的样本列表进行互相关(即每个样本在正确的时间都处于正确的水平)并设置一些阈值来检测何时互相关足够高到您喜欢的程度。
我能想到的最简单的方法是在每个符号周期的中间找到一系列样本的平均值,并忽略噪声中的任何异常值(比如 > 2500,< 1250)。例如,您有一个以样本 8000 左右为中心的位,您可以平均 7900 到 8100 并找到最接近的音调。