重新采样数组很容易
a = numpy.array([1,2,3,4,5,6,7,8,9,10])
具有整数 _重采样因子_。例如,使用因子 2 :
b = a[::2] # [1 3 5 7 9]
但是使用非整数重采样因子,它就不会那么容易工作:
c = a[::1.5] # [1 2 3 4 5 6 7 8 9 10] => not what is needed...
它应该是(线性插值):
[1 2.5 4 5.5 7 8.5 10]
或(通过获取数组中的最近邻居)
[1 3 4 6 7 9 10]
如何使用非整数重采样因子对 numpy 数组进行重采样?
应用示例:音频信号重采样/重调
原文由 Basj 发布,翻译遵循 CC BY-SA 4.0 许可协议
由于
scipy.signal.resample
可能 非常慢,我搜索了其他适用于音频的算法。Erik de Castro Lopo 的 SRC (又名 Secret Rabbit Code 又名 libsamplerate)似乎是可用的最佳重采样算法之一。
它被 scikit 的
scikit.samplerate
使用,但是这个库安装起来似乎很复杂(我放弃了 Windows)。幸运的是,有一个易于使用且易于安装的
libsamplerate
的 Python 包装器,由 Tino Wagner 制作: https ://pypi.org/project/samplerate/。使用pip install samplerate
安装。用法:许多重采样解决方案的有趣阅读/比较:http: //signalsprocessed.blogspot.com/2016/08/audio-resampling-in-python.html
附录: 重采样频率扫描(20hz 到 20khz)的频谱图比较:
samplerate
模块重新采样3)用
numpy.interp
(“一维线性插值”)重新采样: