前提・実現したいこと
下記のプログラムはwavファイルを読み込み時間信号、周波数信号のグラフをプロットするものです。今まで、サンプリングレート16000Hz、再生時間を3秒のwavファイルを用いていたが、機械学習させるプログラムの都合上、wavファイルのサンプリングレートを5500Hz、再生時間を1秒に短縮させた。しかし、下記のようなエラーが出てしまっている状態です。
発生している問題・エラーメッセージ
WavFileWarning: Chunk (non-data) not understood, skipping it. rate, data = scipy.io.wavfile.read(wav_filename) 20679 -24542 1.272705327081669 -1.5132643439954876 Traceback (most recent call last): File "bandpass3.py", line 62, in <module> plt.plot(time,data,label = 'f(n)') File "C:\Users\nakat\anaconda3\envs\bandpass\lib\site-packages\matplotlib\pyplot.py", line 2840, in plot return gca().plot( File "C:\Users\nakat\anaconda3\envs\bandpass\lib\site-packages\matplotlib\axes\_axes.py", line 1743, in plot lines = [*self._get_lines(*args, data=data, **kwargs)] File "C:\Users\nakat\anaconda3\envs\bandpass\lib\site-packages\matplotlib\axes\_base.py", line 273, in __call__ yield from self._plot_args(this, kwargs) File "C:\Users\nakat\anaconda3\envs\bandpass\lib\site-packages\matplotlib\axes\_base.py", line 399, in _plot_args raise ValueError(f"x and y must have same first dimension, but " ValueError: x and y must have same first dimension, but have shapes (6145,) and (6144,)
該当のソースコード
import sys import scipy.io.wavfile from scipy.io.wavfile import write from scipy.io.wavfile import read from scipy.fftpack import rfft,irfft,fftfreq import numpy as np import matplotlib.pyplot as plt #音声ファイル読み込み args = sys.argv wav_filename = args[1] rate, data = scipy.io.wavfile.read(wav_filename) print(np.max(data)) print(np.min(data)) #縦軸(振幅)の配列を作成 data = data / 32768 #横軸(時間)の配列を作成 #np.arange(初項, 等差数列の終点, 等差) time = np.arange(0, data.shape[0]/rate, 1/rate) #縦軸:dataを高速フーリエ変換する(時間領域から周波数領域に変換する) fft_data = np.fft.fft(data) #横軸:周波数の取得 #np.fft.fftfreq(データ点数, サンプリング周期) freqList = np.fft.fftfreq(data.shape[0], d=1.0/rate) # 正規化 fft_data = fft_data/2750 #サンプル数/2←今までは16000*3/2 # 配列fft_dataをコピー fft_data2 = fft_data.copy() # bandpass処理 #fft_data2[(freqList < 80)&(freqList > -80)] = 0 #highpass fft_data2[(freqList >2500)|(freqList < -2500)] = 0 #lowpass # 高速逆フーリエ変換(時間信号に戻す) data2 = np.fft.ifft(fft_data2) # 振幅を元のスケールに戻す data2 = np.real(data2*5500) #N = 5500*1←今まで16000*3 #data2ri = data2.real.astype(np.int16) print(max(data2)) print(min(data2)) ############################## #######グラフプロット省略###### ############################## plt.show()
補足情報(FW/ツールのバージョンなど)
anaconda3を使用
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/30 05:36
退会済みユーザー
2021/01/30 05:39
2021/01/30 05:45
退会済みユーザー
2021/01/30 05:51
2021/01/30 06:01
退会済みユーザー
2021/01/30 06:10