pspectrumに​てデフォルトで使われ​ている式を変える方法

5 views (last 30 days)
Tomo
Tomo on 6 Mar 2022
Commented: Tomo on 7 Mar 2022
表題の件について,解決策をご存じの方がいらっしゃいましたら,ご回答いただけましたら幸いでございます.
以下,質問の詳細について述べさせていただきます.
現在,pspectrum関数を用いて,power spectrum densityを示そうと考えております.
MATLABのヘルプセンターには「出力引数を設定せずに pspectrum(___) を使用すると、現在の Figure ウィンドウにスペクトル推定がプロットされます。プロットでは、この関数が 10 log10(p) を使用して p を dB に変換します。」と書かれております.
私は,「10 log10(p)」ではなく, 「20 log10(p/20)」という式でdBに変換したいのですが,コードをどのように書けばよいのかわからず困っております.
ご存じの方がいらっしゃいましたら,ご教授いただければ幸いです.よろしくお願いいたします.

Accepted Answer

Hernia Baby
Hernia Baby on 6 Mar 2022
ちょっと懸念点合わせて回答させてください
■懸念事項
 pは平均パワーなので振幅をAとすると となっています
 なので の状態です
 ここで は望んでいない数字かもしれません
■質問の回答
 @Tomo さんの回答に移ります
 これは [p,f] = pspectrum(___) からpを変換すればいいだけです
■例
まずは準備
Fs = 1e3;
t = (0:1/Fs:1)';
% 振幅5 周波数10[Hz] の信号
A = 5;
f1 = 10;
x = A*sin(2*pi*f1*t);
plot(t,x)
ここで pspectrum を使用します
[p,f] = pspectrum(x,Fs);
figure
plot(f,p)
xlim([0 50])
xlabel('周波数[Hz]')
text(f(p==max(p)),p(p==max(p))+.5,sprintf('%g',round(max(p),1)));
ここでだいたい振幅の二乗の半分で表記されていることがわかります
このあとは回答になります
SP = 20*log10(p/20);
figure
plot(f,SP)
xlim([0 50])
xlabel('周波数[Hz]')
  4 Comments
Hernia Baby
Hernia Baby on 7 Mar 2022
なるほど、単位をそろえていたのですね。
それでしたらsp=10*log10(p/20^2)であっていると思います。
となっているので消えますね。
Tomo
Tomo on 7 Mar 2022
ご返信ありがとうございます.承知いたしました.
ありがとうございました.

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!