2017-05-18 4 views
0

生のオーディオに機械学習アルゴリズムを適用しようとしています。私の訓練は、オーディオ信号のフーリエ係数で行われます。 私はそれらを取得し、戻って私のオーディオを取得するためにIFFTを適用しようとしていたが、それはある、私の実装では動作しません:scipy.io fftと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ファイルの最初の10秒を果たすべきであるが、それはdoesnのなぜ私は本当に理解していない。私が得るのは高音です。私はscipyからfftとifftを使用しています。

答えて

1

あなたは非常に近くでした。ただ、逆フーリエ変換が本当に意味をなさないスペクトルの連結、上の変換を計算されて何がやっている

Z = ifft(X).flatten() 

Z = ifft(X.flatten()) 

を変更。私はあなたがむしろしたいと思うのは、逆フーリエ変換をスペクトルに連結することです。これが私がやったことであり、うまくいく信号を再構成することができました。

ifft(X)は、ケースのスペクトル次元である最後の次元に沿ってすべての配列に対してIFFTを実行し、同じ形状(40,11025)の配列を返します。その後、フラット化するとすべての行が連結され、合理的な信号になります。

+0

ありがとうございました!それは今完璧に動作します!また、あなたの説明をありがとう! – Tiffany

関連する問題