所有代码基本围绕三大类库展开:① NumPy —— 数值计算核心 ② SciPy —— 信号处理与音频 I/O ③ Matplotlib —— 可视化
NumPy 承担了绝大部分基础数值操作,所有压缩算法的数学实现,都依赖 NumPy 进行矢量化运算,而不是使用 Python for 循环做标量处理(除了 DPCM 的逐点预测部分),前几天实验课尝试对比了np.fft和手动for循环,速率相差极大。
SciPy.signal是信号处理核心函数,这一部分是语音压缩实验中最关键的外部依赖。
1️⃣ 滤波函数scipy.signal.lfilter,用于预加重,LPC 合成和IIR 结构实现
2️⃣ 频域分析scipy.signal.stft和scipy.signal.spectrogram,用于语谱图计算和LSD 指标计算(librosa也有语谱图的绘制函数,不过我用scipy多一些,后面会写一篇文章讨论下二者的区别)
3️⃣ 重采样scipy.signal.resample,用于不同采样率音频统一处理。
4️⃣ 频率响应计算scipy.signal.freqz用于绘制 LPC 全极点模型频响。
音频输入输出全部通过wavfile.read和wavfile.write完成。
特别地,无论是 STFT、自定义频域滤波,还是语谱图,本质都使用同一套 FFT 工具链:np.fft.rfft,np.fft.irfft和np.fft.rfftfreq.其典型流程是:分帧 → 加窗 → rfft → 频域处理 → irfft → Overlap-Add
关注公众号后回复【0308】获取源代码。