コード```# -*- coding: utf-8 -*- import wave import matplotlib.pyplot as plt import numpy as np def main(): wf = wave.open("sinwave_440hz.wav") fs = 44100 # サンプリング周波数 g = wf.readframes(wf.getnframes()) g = np.frombuffer(g, dtype= "int16")/32768.0 # -1~1に正規化 wf.close() n0 = 0 # サンプリング開始位置 N = 8192 # サンプル数 G = np.abs(np.fft.fft(g[n0:n0+N])) # 高速フーリエ変換 ampmax=max(G) #振幅最大値 amp=20*np.log10(G/ampmax) #振幅をデシベルに変換 G[0] = G[0] / 2 flist = np.fft.fftfreq(N, d=1.0/fs) # 周波数リスト plt.figure() # 波形サンプルを描画 plt.rcParams['font.size'] = 17 plt.subplot(122) plt.plot(flist,amp) plt.xlabel('Frequency', fontsize=20) plt.ylabel('Amplitude', fontsize=20) plt.xlim(0,1000) plt.ylim(-80,0) plt.grid() leg = plt.legend(loc=1, fontsize=25) leg.get_frame().set_alpha(1) plt.yscale('log') plt.show() if __name__ == '__main__': main() コード
Pythonを使い、自分で録音したwavファイルの周波数スペクトルをグラフ表示しようとしています。 試しにインターネット上からダウンロードした440Hzの正弦波でプログラムを実行したところ、440Hzのところにピークが来たため、プログラムは正しいと思っています。 ### 発生している問題・エラーメッセージ 自分で録音したファイル(iphoneのSiriの声)で試したところ、周波数のピークが13000Hz付近になってしまいました。どう考えてもそんなに高い周波数はでていないと思うのですが、、、
エラーメッセージ
### 該当のソースコード ```python3.7 ### 試したこと 他の言葉や自分の声などで試しましたが結果は変わりませんでした。 また、ノイズ除去をしても同様の結果になりました。 録音の仕方に問題があるのでしょうか。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー