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

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

新規登録して質問してみよう
ただいま回答率
85.35%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

解決済

2回答

2249閲覧

音声特徴量MFCCを12次元だけ表示したい

blkpnk1015

総合スコア2

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

0グッド

0クリップ

投稿2021/05/24 14:06

前提・実現したいこと

音声解析初心者です。
raspberrypi4でlibrosaを用いてMFCCの抽出を行なっています。
機械学習に用いるため下のコード(他webページ参照)で表示されているように12次元で表示させたいのですが、n_mfccで返すmfccの数を設定しているにも関わらず、print(mfccs)では大量のデータが取れてします。

また、調べているとprint(mfccs[0])で表示されている方法が多いのですがそれは[0]はmfccの何を表している部分になるのでしょうか?
ご教授いただけますと幸いです。

表示させたい形式

from scipy.fftpack.realtransforms import dct ceps = dct(10 * log10(mspec), type=2, norm="ortho", axis=-1) nceps = 12 mfcc = ceps[:nceps] print(mfcc) [46.02737864 32.79920243 4.57031165 -2.94696774 -1.54742386 -1.26479934 -5.16211103 -0.62832775 5.74186803 4.19594078 0.79866862 -1.76984708]

現在のソースコード

python

1import librosa 2import soundfile as sf 3 4file_name='/home/pi/myEnv/hello2.wav' 5x,fs=sf.read(file_name) 6mfccs=librosa.feature.mfcc(x,sr=fs,n_mfcc=12,dct_type=2) 7print(mfccs.shape) 8print(mfccs)

現在の出力結果

イメージ説明

補足情報(FW/ツールのバージョンなど)

参照したサイト
MFCC入門

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

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

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

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

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

guest

回答2

0

ベストアンサー

12次元で表示させたいのですが、n_mfccで返すmfccの数を設定しているにも関わらず、print(mfccs)では大量のデータが取れてします。

MFCC(メル周波数ケプストラム係数)入門
の「LibrosaでMFCCを求める」には、「上では音声データ全体の中の1フレームのみを用いてMFCCを求めましたが、Librosaを使うと簡単に各フレームごとのMFCCを求めることができます。」と書かれてますよね
「print(mfcc)」は音声ファイルから一部を切り出してから計算したもので、「print(mfccs)」は音声ファイル全体から計算したものです

上記Webページの「1. 波形を適当な長さに分割し、窓関数をかけてFFTを行う」と書かれてるところのすぐ下のコード中に「# 音声波形の中心部分(定常部)を切り出す」と書かれてますので、「print(mfccs.shape)」の結果「(12, 194)」より、「print(mfccs[:, 97])」あたりが近い結果になるのではないですかね (194/2=97なので)

投稿2021/05/24 15:10

jbpb0

総合スコア7653

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

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

blkpnk1015

2021/05/24 15:27

ご回答ありがとうございます。 求める形での表示には切り出さないといけなかったのですね。 おかげさまで解決しました。
guest

0

きちんと12次元分が抽出されています。shape=(mfccの次元、時間軸)です。

参考: librosaのドキュメントのmfccの部分
Returns M: np.ndarray [shape=(n_mfcc, t)]

ちなみにmfcc[0](0次元目)は、パワーを意味します。音声の波形を解析する際は、絶対的なパワーはあまり意味をなしませんので、捨てる場合が多いです。

なお、librosaを使った音声解析の記事を私も書いております。
参考: Pythonで長い会議を見える化〜特徴量mfccを採用して全面リライト〜

投稿2021/05/24 14:59

toast-uz

総合スコア3266

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

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

blkpnk1015

2021/05/24 15:23

ご回答ありがとうございます。 ではmfcc[0]を表示してもあまり意味はないのですね。 0次成分についてなかなか情報がないので勉強になりました。 Qiitaの記事も拝見させて頂きました。 参考にさせていただきます。
toast-uz

2021/05/24 22:17 編集

既に12次元で出力されていることは、認識されていたのでしょうか?ご質問内容から、認識されていない(12次元を超えて出力されていると勘違いされている)と思って「すでに12次元で出力されています(ただし、表示の横ではなく縦が12次元)」と、回答記述したのですが、私の思い違いでしたか? 12次元で出力されているのはご理解されていて、時間軸1つ分だけ((12,1)だけ)表示したい、というのが題意だったのでしょうか?
blkpnk1015

2021/05/25 11:32

n_mfcc=12で設定していたので12次元で出力しているつもりが認識されずに12次元を超えて出力されていると思い質問していました。その上で時間軸一つ分で表示したいという意味でした。 ですので、12次元分が抽出されていることを教えて頂き助かりました。 伝わりにくい表現になってしまい申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問