使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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