使用scipy.io的fft和ifft的问题

我正在尝试在原始音频上应用机器学习算法。我的训练将基于音频信号的傅里叶系数。我试图获取这些系数并应用ifft来恢复我的音频,但我的实现不起作用,代码如下:

fs, data = wavfile.read('dataset piano/wav/music (1).wav')Te = 0.25T = 40a = data.T[0] #获取第一个通道#将信息放入矩阵中,每一行包含0.25秒音乐的傅里叶系数。#整个矩阵有40行,包含wav文件10秒的信息。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文件的前10秒,但它没有播放,我实在不明白为什么。我得到的只是一个高音调的声音。我使用的是scipy中的fft和ifft。


回答:

你已经非常接近了。只需将

Z = ifft(X.flatten())

改为

Z = ifft(X).flatten()

你所做的是对一系列频谱的连接进行逆傅里叶变换,这实际上是没有意义的。我认为你真正想做的是对频谱进行逆傅里叶变换然后连接。这是我所做的,并且成功地重构了一个听起来不错的信号。

ifft(X) 将对最后一个维度上的每个数组(在你的例子中是频谱维度)进行IFFT,并返回一个相同形状的数组(40, 11025)。然后flatten会连接每一行,形成一个有意义的信号。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注