原文链接:http://tecdat.cn/?p=7620
可以将44.1kHz单通道.wav文件中的一秒读取到长度为44100的数组(称为b)中。给定矩阵A,我们寻求系统Ax = b的解。通过Gauss-Seidel的迭代,向量如果我们将b记录的录音,则将一些白噪声作为我们的初始猜测,并在每次交替中写出Ax,我们会观察到b中高音调的音符首先变得可听,而同时白噪声的音调分解。
最初的12秒.wav文件的音频(白噪声)initialAx.wav
初始Ax,残差和残差FFT的图:
经过一轮迭代,高音转化gauss_seidel_out000000.wav
在光谱中可以看到一些结构:
第二次迭代:gauss_seidel_out000001.wav
第三次迭代:gauss_seidel_out000002.wav
第四次迭代:gauss_seidel_out000003.wav
这一切都在python中完成。将.wav文件加载到数组中,在scipy中还不错。为了避免缓存问题,必须使用稀疏矩阵类,因为12秒的.wav文件需要一个大小为12 * 44100的数组。这是我使用的TridiagonalMatrix类代码片段:
这是处理读取/写入.wav文件然后使用Gauss-Seidel转换为线性系统的代码片段。