フィルターのクリア

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

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

採用された回答

Hernia Baby
Hernia Baby 2022 年 3 月 6 日
ちょっと懸念点合わせて回答させてください
■懸念事項
 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 件のコメント
Hernia Baby
Hernia Baby 2022 年 3 月 7 日
なるほど、単位をそろえていたのですね。
それでしたらsp=10*log10(p/20^2)であっていると思います。
となっているので消えますね。
Tomo
Tomo 2022 年 3 月 7 日
ご返信ありがとうございます.承知いたしました.
ありがとうございました.

サインインしてコメントする。

その他の回答 (0 件)

タグ

Community Treasure Hunt

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

Start Hunting!