我正在尝试将机器学习算法应用于原始音频。我的训练将针对音频信号的傅立叶系数。
我试图获取这些并应用ifft来恢复音频,但是它与我的实现不兼容,这是:
fs, data = wavfile.read('dataset piano/wav/music (1).wav')
Te = 0.25
T = 40
a = data.T[0] #retrieve first channel
#put the information in a matrix, one row will contain the fourier coefficients of 0.25s of music.
#The whole matrix, which has 40 rows will contain information of 10s of the wav file.
X = np.array([fft(a[int(i*fs*Te):int((i+1)*fs*Te)]) for i in range(T)])
Z = ifft(X.flatten())
Z = Z.astype(data.dtype)
wavfile.write('test3.wav',fs,Z)
通常,它应该播放wav文件的前十个,但不会,而且我真的不明白为什么。我得到的只是高音。我正在使用来自scipy的fft和ifft。
最佳答案
你很亲近只是改变
Z = ifft(X.flatten())
至
Z = ifft(X).flatten()
您正在做的是对光谱的串联进行傅立叶逆变换,这实际上是没有意义的。我想您想做的是在频谱上串联傅里叶逆变换。这就是我所做的,并设法重新构造了听起来不错的信号。
ifft(X)
将沿最后一个维度(在您的情况下为频谱维度)在每个数组上运行IFFT,并返回相同形状的数组(40、11025)。然后展平将连接每一行,发出一个明智的信号。关于python - scipy.io fft和ifft的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44053110/