MATLAB Answers

音のパワースペクトラム解析

2 views (last 30 days)
Wataru Tarumi
Wataru Tarumi on 20 Aug 2020
Commented: takemoto on 24 Aug 2020
192kHzで取得した音源のパワースペクトラムの解析を行っているのですが、予想と違う結果になり困っています。
他のアプリでは、うまく取れているように見えたので、おそらく下記の私のmatlabコードに問題があるとは思うのですが。。。。。
おかしい個所を修正していただけると非常に助かります。
どうかご指導宜しくお願い致します。
%移動平均
a = 10;
b = ones(1,10);
y2 = filter(b,a,y);
y3=y2(1,192000:30000000);
data=y3(1,:);%yの構造データのうち、1行目のベクトルデータをdata変数に収納
fftdata=fft(data);%dataをfftにかける。その結果を、fftdata変数に収納。
%スペクトラム強度の図示。
pow_fftdata=abs(fftdata).^2/length(fftdata);
figure(1);
plot(pow_fftdata);
Fs=192000
freq=0:192000/(length(pow_fftdata)-1):192000/2;%周波数解像度の設定
singlePow=[pow_fftdata(1),2*pow_fftdata(2:length(freq))];%????
%ゲインをdBに変換
ydb = mag2db(singlePow);
figure(2);
plot(freq,singlePow);%横軸がfreqで、縦軸がsinglePow
xlabel('Freqency [kHz]');
ylabel('Power [dB]');
xlim([0,100]);

  2 Comments

takemoto
takemoto on 20 Aug 2020
ざっと拝見したところ特に問題はなさそうですが、具体的にどの様な結果を期待されていて、他のアプリとはどの様に異なりますか?
Wataru Tarumi
Wataru Tarumi on 21 Aug 2020
ありがとうございます。
とりあえず、解決できそうです。
ご迷惑おかけしました。

Sign in to comment.

Accepted Answer

Shoumei
Shoumei on 21 Aug 2020
Signal Processing Toolboxをお持ちであれば、以下のコマンドを実行して期待した結果が得られませんか?
data = y2(192000:30000000);
periodogram(data)

  2 Comments

Wataru Tarumi
Wataru Tarumi on 21 Aug 2020
ありがとうございます。
このコマンドで、できそうな気がします。
まだ、完璧ではないのですが。
ちなみにで申し訳ないのですが、線の色を黒にする方法はありますか?
今、青線でプロットされていまして、できれば黒にしたいと思いまして。
調べたのですが、うまく修正できないで困っております。
takemoto
takemoto on 24 Aug 2020
線のハンドルを取得することで、プロット上の線の属性を編集することができます。
periodogramでスペクトルを表示させた後、以下の処理を追加することで
線の色を変えられると思います。
h1 = gca; % 座標軸のハンドル取得
h2 = h1.Children; % "線"のハンドル(座上軸の子ハンドル)取得
h2.Color = 'black'; % 線ハンドルに対して、”黒”を設定

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!