質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4559閲覧

Python3を使い、wavファイルの周波数スペクトルを表示したい

15219e

総合スコア14

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/07/16 02:35

編集2019/07/16 05:13
コード```# -*- 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/ツールのバージョンなど) ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/07/16 04:38

このままではコードが読めないので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
15219e

2019/07/16 05:13

ご指摘ありがとうございます
guest

回答1

0

ベストアンサー

フリー音源にある声を解析した場合はどうなるでしょうか。下記サイトに有るkatou.wav.zip/1.6MBを、私が再現したコードで解析したとき、解析結果のピークは数百Hz(すなわち正常)になりました。

サンプルボイス「生の声」

フリー音源を解析して正常なら録音の仕方に問題があるでしょう。

あるいは、自分の声が含まれている部分をサンプルとして取り込んでいるでしょうか。

フリー音源を解析する場合でも、声が含まれていない部分のみを対象に解析すると、10000Hz以上の周波数帯にピークが現れます。

逆に、声が含まれている部分のみサンプルとすれば、解析精度は上がります。

音源自体の波形(コードで言うとgの部分)を一度確認してみるといいかと思います。

投稿2019/07/20 08:10

amahara_waya

総合スコア1029

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問