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

16 vues (au cours des 30 derniers jours)
K0144
K0144 le 19 Mar 2021
Commenté : takemoto le 30 Mar 2021
現在、MATLABを用いて倍音についての研究を行っている高校生です。採取した音のデータをMATLABに取り込みスペクトログラムとして表示することは出来ました。この後いくつかの楽器の音や音程によるスペクトログラムの比較を行いたいと考えています。そこでデータを定量的に比較したいのですが図示したスペクトログラムから座標を取り出す方法が分かりません。その方法について知りたいです。MATLABは使い始めた程度でプログラムについてあまり詳しくないので詳しく教えていただけるとありがたいです。

Réponse acceptée

takemoto
takemoto le 22 Mar 2021
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 commentaires
K0144
K0144 le 22 Mar 2021
ありがとうございます。この回答を参考にしたところ値を取ることが出来ました。
取り出したところで一つ質問なのですが図示したスペクトログラムでは音の値は パワー/周波数(dB/Hz) となっています。元の値に10*log10(p)をするとそれに変換できる意味やパワー周波数の意味について数値を比較するうえで必要な部分だけでも教えていただけないでしょうか。
重ねての質問で申し訳ありませんがよろしくお願いします。
takemoto
takemoto le 30 Mar 2021
ご紹介した例で得られる"p"は、パワースペクトル密度です。周波数による除算により、信号の単位周波数当たりのパワーを求めています。10*log10(p)の演算は、デシベルへの換算です。デシベル換算により、パワーを対数軸で観測することになり、「ノイズ」と「信号」等、対象信号に微小な信号と大きな信号が混在する様なケースで、双方を効率よく観測できる、というメリットがあります。

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur 信号の機械学習および深層学習 dans Help Center et File Exchange

Produits


Version

R2020b

Community Treasure Hunt

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

Start Hunting!