在下面的代码中,我从音频样本(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]
我将非常感谢您提供有关如何解决此问题的帮助和建议。
答案 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
的图像