バンドパスフィルター後の音圧測定について
23 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
特定の周波数帯域のみの音圧を測定するために,バンドパスフィルターをかけ,音圧(RMS値)を算出しています.
以下に,コードを記します.
--------------------------------------------
[y, fs] = audioread('demo.wav');
cal = 176.8; %絶対音圧に補正するためのキャリブレーション値
calin = 10.^(abs(cal)/20); %絶対音圧に補正するための式
data_row = y*calin; %絶対音圧に補正
bandpass(data_row, [80000 120000], fs); %作図
[p, f] = bandpass(data_row, [80000 120000], fs);
pdata_bp = abs(p).^2;
RMS_bp = 10*log10(sum(pdata_bp)/length(pdata_bp));
table(RMS_bp)
--------------------------------------------
〈ご質問〉
bandpass関数を用いた作図の音圧(60 dB程度)と,RMSの音圧(RMS_bp)(82.9 dB)の値が大きく異なってしまいます.
解析に用いた音データと,作図の結果を添付いたします.
なぜこのような違いが生じてしまうのか,ご存じの方がいらっしゃいましたら,ご教示いただけますと幸いです.
また,どこをどのように修正するべきか,ご教示いただきたく存じます.
よろしくお願いいたします.
0 commentaires
Réponse acceptée
Hernia Baby
le 4 Oct 2022
見ているものが違うからです。
@Tomoさんが見ているのは合計値すなわちOverAllです。
これは全ての周波数帯におけるパワーを合算した数値です。
clear,clc;
load('demo.mat')
cal = 176.8; %絶対音圧に補正するためのキャリブレーション値
calin = 10.^(abs(cal)/20); %絶対音圧に補正するための式
data_row = y*calin; %絶対音圧に補正
bandpass(data_row, [80000 120000], fs); %作図
バンドパスをかけたものを見てみましょう。
[p, f] = bandpass(data_row, [80000 120000], fs);
% pdata_bp = abs(p).^2;
% RMS_bp = 10*log10(sum(pdata_bp)/length(pdata_bp));
RMS_bp = 10*log10(rms(p).^2);
table(RMS_bp)
ここで、RMS_bpはOverAllです。
----
[pp0,ff0] = pspectrum(data_row,fs,"Leakage",0.85);
[pp,ff] = pspectrum(p,fs,"Leakage",0.85);
figure
plot(ff0./1e3,10*log10(pp0),ff./1e3,10*log10(pp))
grid on
legend({"original","Filtered"})
ylim([0 120])
音圧が異なっていないことがわかりました。
4 commentaires
Hernia Baby
le 4 Oct 2022
@Tomoさん、返信ありがとうございます。
今回された操作は80k~120kHzのバンドパスフィルタをかけた時系列データのRMS値をパワーで算出しています。なのでRMS_bpがこの周波数帯でのRMS値(の二乗をレベルにしたもの)になります。
区間を指定した Over All は Partial Over All (P.O.A)と呼ばれます。
clear,clc;
load('demo.mat')
cal = 176.8; % 絶対音圧に補正するためのキャリブレーション値
calin = 10.^(abs(cal)/20); % 絶対音圧に補正するための式
data_row = y*calin; % 絶対音圧に補正
[p, f] = bandpass(data_row, [80000 120000], fs); % バンドパスフィルタ
RMS_bp = 10*log10(rms(p).^2) % P.O.A(レベル)
figure
plot(p)
hold on
yline(rms(p),'k:')
legend({'フィルタ済み信号','実効値(RMS値)'})
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!