我有二维数组数字输入16(44100Hz)音频采样(其中1376个)。每个示例都有以下格式(示例值):
[-4 4-5-10-5-6-11-4-9-7-10 1-4-8-9-8-4-13 -14-11-12-4-14-13-9-2-2-16-5-5-4 3-5-4-8-11 -10-12-16-7-8-14-14-14-16-17-8-13-9-6-9-9-8 -12-1-4-8-2-2-2-8-8 2 1-8 3 2 0-6 0 9 0-2 0-1 0-3-1 1-2-2 0-6-1-2-3 5-3 1 -1-5-3 0-3 0-3-3-2-1-2 1-4 1-6-3-2-4 11-1-6 2-1-2-5-6-5-6-2-4-10-3-6-4 -5-3]
整个数组称为sample_list(是的,非常令人惊讶)
我试图对频域中的样本集执行带通滤波器,然后将其转换回上面的时域格式。下面的代码完美地将样本从时域转换到频域,然后再转换回时域,尽管我仍然需要对其应用带通滤波器:
import numpy as np
for samp in sample_list:
time = np.linspace(0,1,44100) # currently not using
float_samp = np.float32(samp)
fft_spectrum = np.fft.rfft(float_samp)
freqs = np.fft.rfftfreq(len(fft_spectrum), d=time[1]-time[0]) # currently not using
### need bandpass filter here (brickwall is fine) - 5000Hz to 8000Hz
time_domain = np.fft.irfft(fft_spectrum)
converted = np.int16(time_domain)
筛选后,我计划通过此页面上的代码运行筛选后的示例: Python frequency detection找到音调的基频。频率检测代码目前在我的未过滤样本上工作得很好-虽然它会给我最响亮的音调的频率,不一定是我要找的音调的频率。。。所以我需要过滤。在
一个砖墙过滤器是好的,因为我在寻找我的测试音调的时间和存在,而不一定是质量。我还担心额外的处理周期,如果不需要的话。在
不幸的是,我不能使用Scipy及其fft/过滤库,因为我在Android上运行代码,而Scipy不适用于我使用的代码平台(Kivy)。我必须严格使用纽比图书馆。在
非常感谢任何帮助/指导。在
如果砖墙过滤器是可以接受的,你可以使用
我应该更好地使用,例如
scipy.signal.butter
,但是由于您没有访问scipy
的权限,重新实现它可能需要时间。在相关问题 更多 >
编程相关推荐