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