スペクトログラムからデータを取り出す方法について
8 ビュー (過去 30 日間)
古いコメントを表示
現在、MATLABを用いて倍音についての研究を行っている高校生です。採取した音のデータをMATLABに取り込みスペクトログラムとして表示することは出来ました。この後いくつかの楽器の音や音程によるスペクトログラムの比較を行いたいと考えています。そこでデータを定量的に比較したいのですが図示したスペクトログラムから座標を取り出す方法が分かりません。その方法について知りたいです。MATLABは使い始めた程度でプログラムについてあまり詳しくないので詳しく教えていただけるとありがたいです。
0 件のコメント
採用された回答
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 件のコメント
takemoto
2021 年 3 月 30 日
ご紹介した例で得られる"p"は、パワースペクトル密度です。周波数による除算により、信号の単位周波数当たりのパワーを求めています。10*log10(p)の演算は、デシベルへの換算です。デシベル換算により、パワーを対数軸で観測することになり、「ノイズ」と「信号」等、対象信号に微小な信号と大きな信号が混在する様なケースで、双方を効率よく観測できる、というメリットがあります。
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で 信号の機械学習および深層学習 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!