关于python:提取由离散数据产生的样本波的波长

extracting a wavelength of a sample wave produced with discrete data

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

1
2
3
4
5
6
7
8
9
10
11
12
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/hfxgxw.png)

好吧,我确实理解问题所在;尽管Matplotlib将波绘制为连续波(由于采样频率较高),但波是由离散数据组成的,因此可能存在或不存在满足以下条件的数据值:

1
sample[i] == sample[0]

对于如何解决这个问题,我将非常感谢任何帮助和建议。


有人教我如何找到答案。这是一种简单但合乎逻辑的方法。所以我只需要提取出切为0的点,第一个点和第三个点之间的波会给我一个波长。

这是我写的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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