スペクトログラムからデータを取り出す方法について
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
K0144
am 19 Mär. 2021
Kommentiert: takemoto
am 30 Mär. 2021
現在、MATLABを用いて倍音についての研究を行っている高校生です。採取した音のデータをMATLABに取り込みスペクトログラムとして表示することは出来ました。この後いくつかの楽器の音や音程によるスペクトログラムの比較を行いたいと考えています。そこでデータを定量的に比較したいのですが図示したスペクトログラムから座標を取り出す方法が分かりません。その方法について知りたいです。MATLABは使い始めた程度でプログラムについてあまり詳しくないので詳しく教えていただけるとありがたいです。
0 Kommentare
Akzeptierte Antwort
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
takemoto
am 30 Mär. 2021
ご紹介した例で得られる"p"は、パワースペクトル密度です。周波数による除算により、信号の単位周波数当たりのパワーを求めています。10*log10(p)の演算は、デシベルへの換算です。デシベル換算により、パワーを対数軸で観測することになり、「ノイズ」と「信号」等、対象信号に微小な信号と大きな信号が混在する様なケースで、双方を効率よく観測できる、というメリットがあります。
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu 時間-周波数解析 finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!