スペクトログラムからデータを取り出す方法について
16 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
現在、MATLABを用いて倍音についての研究を行っている高校生です。採取した音のデータをMATLABに取り込みスペクトログラムとして表示することは出来ました。この後いくつかの楽器の音や音程によるスペクトログラムの比較を行いたいと考えています。そこでデータを定量的に比較したいのですが図示したスペクトログラムから座標を取り出す方法が分かりません。その方法について知りたいです。MATLABは使い始めた程度でプログラムについてあまり詳しくないので詳しく教えていただけるとありがたいです。
0 commentaires
Réponse acceptée
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
takemoto
le 30 Mar 2021
ご紹介した例で得られる"p"は、パワースペクトル密度です。周波数による除算により、信号の単位周波数当たりのパワーを求めています。10*log10(p)の演算は、デシベルへの換算です。デシベル換算により、パワーを対数軸で観測することになり、「ノイズ」と「信号」等、対象信号に微小な信号と大きな信号が混在する様なケースで、双方を効率よく観測できる、というメリットがあります。
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur 信号の機械学習および深層学習 dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!