他让我看重采样
昨天写的重采样文章被一个大佬看到了,给我发了消息如下
大佬是个技术原厂Linux方向的负责人,我在工作上遇到的好几次疑难杂症都是在他的指点下得到解决,而且平时讨论技术的时候,能感觉到他对技术问题理解很深。
从他的话语里面可以知道,如果要降采样只是单单的去掉一些采样点的话,势必会导致混叠问题。
什么是混叠现象
下图为时域混叠的体现,输入信号的频率为900k,采样的频率只有1M,图中的每个黑点代表一个采样点,将这些点集合起来就是一个100k的信号,发现由于采样频率低缘故把一个900k的信号看成了100k,这个100k信号就是混叠信号,实际任何超过采样频率一半的信号都会产生混叠信号,这个一半的限制频率就是奈奎斯特频率,超过奈奎斯特频率的信号都会产生混叠。
我们在观察混叠的时候,是可以从频谱上看出来
所以,我们在做降采样的时候,需要做两件事情:滤波-做插值
有一个python刚好可以做这方面的测试,用不同的滤波器长度也会有不同的效果。
https://pytorch.org/tutorials/beginner/audio_resampling_tutorial.html
需要安装的一些环境,可以参考之前的文章
oh,我这个大佬盆友教我整机器学习
之后就可以跑他里面的demo了「有些需要的库亲测可以用pip安装,就不说了」
https://github.com/weiqifa0/python_resample
我们生成一个48K的扫频文件
如果直接降低采样率到32K
可以看到上面有混叠产生,这样一定会导致声学测试失败。
然后我们增加一个128的低通滤波器后再进行重采样
可以看到,这样重采样的波形是正常的。
同样的,升采样也需要滤波器的参与,文章中除了讨论滤波器的作用外,还提到了rolloff 「截止衰减频率」,设置这个参数也可以解决因为重采样导致的抗混叠问题。
今天还看到,除了我昨天说到的重采样c方法外,有一个外文网站专门讨论重采样的文章,而且里面也有提到重采样的代码方法。
https://ccrma.stanford.edu/~jos/resample/
这里面有很多关于这部分的资料
https://ccrma.stanford.edu/~jos/resample/Free_Resampling_Software.html