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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

957閲覧

周波数解析から平均を求めたい

sezaki_H

総合スコア41

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/12/09 03:54

音声ファイルの周波数を解析し、平均と全体の分散を求めたいのですが、正しい平均の求め方がわかりません。
現在は周波数*振幅の平均を取る形で行なっているのですが、正しいのでしょうか?

python

1sound = AudioSegment.from_file(audio_path, format='mp3') 2 3# 情報の取得 4time = sound.duration_seconds # 再生時間(秒) 5rate = sound.frame_rate # サンプリングレート(Hz) 6channel = sound.channels # チャンネル:mono(1)/stereo(2) 7 8 9# 曲の最初4秒を切り取る 10stime=0 11etime=seg_point_list[0]*4+4 12 13sound1 = sound[stime*1000:etime*1000] 14sound1.export("tmp.wav", format="wav") 15 16 17data,rate = librosa.load('tmp.wav') 18 19 20#(振幅)の配列を作成 21data = data / 32768 22 23##### 周波数成分を表示する ##### 24#縦軸:dataを高速フーリエ変換する(時間領域から周波数領域に変換する) 25fft_data = np.abs(np.fft.fft(data)) 26#横軸:周波数の取得  #np.fft.fftfreq(データ点数, サンプリング周期) 27freqList = np.fft.fftfreq(data.shape[0], d=1.0/rate) 28#データプロット 29plt.plot(freqList, fft_data) 30plt.xlim(0, 8000) #0~8000Hzまで表示 31plt.show() 32 33 34positive_freq = freqList[:44100] 35positive_fft = fft_data[:44100] 36 37 38mean = statistics.mean(positive_freq*positive_fft) 39mean 40#OUT:0.16214748943907212

また現在ほとんど鳴っていない周波数域の値も利用しているのですが、閾値を設けて鳴っている周波数のみを利用した方がよろしいのでしょうか?

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

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

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

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

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

jeanbiego

2019/12/09 04:02

何のためにその処理をしたいかによるのではないでしょうか。 普通に平均というと振幅の合計値を周波数ポイントで割るのではないでしょうか。振幅に周波数を掛けるのは、そういう重み付けが必要な場合だけと思います。 周波数は、可聴域とかMP3帯域とか目的によって制限するか、サンプリング周波数によって制限されるか。 いずれにせよ、プログラミングの質問ではないような気がするのですが…
sezaki_H

2019/12/09 04:24

なるほど・・・単純にこの音声内の音が平均して高いのか低いのかを出したいだけなのですが、間違ってはいないのでしょうか。。。 すいません、手法の質問でした。気をつけます。
jeanbiego

2019/12/09 05:58

・データ内の音の高低を知りたいのでしたら、「周波数×振幅」というだけでは不足しています。 大きい音声データ「周波数(低)×振幅(大)」と、高い音声データ「周波数(高)×振幅(小)」が区別できないからです。ですので、「Σ(周波数×振幅)/Σ(振幅)」とやるか、振幅の合計値が1になるように規格化してあげてから「周波数×振幅」の平均とるかいずれかでやった方が適切です。 ・あと、フォーマットがMP3のようなので、少なくとも16 kHz以上は要らないのではないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問