スペクトログラムからデータを取り出す方法について

8 ビュー (過去 30 日間)
K0144
K0144 2021 年 3 月 19 日
コメント済み: takemoto 2021 年 3 月 30 日
現在、MATLABを用いて倍音についての研究を行っている高校生です。採取した音のデータをMATLABに取り込みスペクトログラムとして表示することは出来ました。この後いくつかの楽器の音や音程によるスペクトログラムの比較を行いたいと考えています。そこでデータを定量的に比較したいのですが図示したスペクトログラムから座標を取り出す方法が分かりません。その方法について知りたいです。MATLABは使い始めた程度でプログラムについてあまり詳しくないので詳しく教えていただけるとありがたいです。

採用された回答

takemoto
takemoto 2021 年 3 月 22 日
spectrogramという関数をお使いなら、実行時に時間と周波数の情報を獲得できますので、それを利用してはいかがでしょうか?例えば、スペクトログラムの最大値をとる座標(時間と周波数の値)を得たければ、以下の様に書けそうです。
load mtlb
[~,f,t,p] = spectrogram(mtlb,100,80,100,Fs);
surf(t,f,10*log10(p),'edgecolor','none'),view([0,90]);
[C,I] = max(10*log10(p(:)));
[ii,jj] = ind2sub(size(p),I);
fmax = f(ii)
tmax = t(jj)
pmax = 10*log10(p(ii,jj))
hold on
plot3(tmax,fmax,pmax,'r*')
hold off
  2 件のコメント
K0144
K0144 2021 年 3 月 22 日
ありがとうございます。この回答を参考にしたところ値を取ることが出来ました。
取り出したところで一つ質問なのですが図示したスペクトログラムでは音の値は パワー/周波数(dB/Hz) となっています。元の値に10*log10(p)をするとそれに変換できる意味やパワー周波数の意味について数値を比較するうえで必要な部分だけでも教えていただけないでしょうか。
重ねての質問で申し訳ありませんがよろしくお願いします。
takemoto
takemoto 2021 年 3 月 30 日
ご紹介した例で得られる"p"は、パワースペクトル密度です。周波数による除算により、信号の単位周波数当たりのパワーを求めています。10*log10(p)の演算は、デシベルへの換算です。デシベル換算により、パワーを対数軸で観測することになり、「ノイズ」と「信号」等、対象信号に微小な信号と大きな信号が混在する様なケースで、双方を効率よく観測できる、というメリットがあります。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange信号の機械学習および深層学習 についてさらに検索

製品


リリース

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!