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

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

Akzeptierte Antwort

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu 信号の機械学習および深層学習 finden Sie in Help Center und File Exchange

Produkte


Version

R2020b

Community Treasure Hunt

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

Start Hunting!