提取由离散数据产生的采样波的波长

时间:2018-09-26 13:48:27

标签: python

在下面的代码中,我从音频样本(1000Hz信号)中提取了一个数据窗口。在代码中,我尝试获取信号的波长。 https://paste.pound-python.org/show/HRVqQNy3w9Sr73q4oY8g/

sample = data[100:200]
x = 0
i = 1
num_occur = 0
while num_occur <2:
    if sample[i] == sample[0]:
        x = i
        i += 1
        num_occur += 1
    else:
        i += 1
wavelen = sample[:x]

但是成功较少... 样本的图片:(https://pasteboard.co/HFFXGxW.png

嗯,我确实知道问题出在哪里;即使matplotlib将波形绘制为连续波形(由于采样频率较高),该波形还是由离散数据组成,因此可能有也可能没有满足以下条件的数据值:

sample[i] == sample[0]

我将非常感谢您提供有关如何解决此问题的帮助和建议。

1 个答案:

答案 0 :(得分:0)

有人启发我如何找到答案。这是一种简单但合乎逻辑的方法。 因此,我只需要提取将切为0的点,并且在第1个和第3个这样的连续点之间的波动会给我一个波长。

这是我写的代码:

sample = data[100:200]
i = 1
num_occur = 0
cut_zero = []
x = 0
while num_occur < 3:
    if sample[x] == abs(sample[x]):
        if sample[i] == abs(sample[i]):
            i +=1
    else:
        cut_zero.append(i)
        num_occur += 1
        i += 1
        x = i
    elif sample[x] != abs(sample[x]):
        if sample[i] == abs(sample[i]):
            cut_zero.append(i)
            i += 1
            num_occur += 1
            x = i
        else:
            i += 1
print(cut_zero)
a = cut_zero[0]
b = cut_zero[2]
wavelen = sample[a:b]

也许我可以更有效地做到这一点:),如果是这样,请告诉我。 这是波长https://pasteboard.co/HFLtOmr.png

的图像