バンドパスフィルター後の音圧測定について
23 views (last 30 days)
Show older comments
特定の周波数帯域のみの音圧を測定するために,バンドパスフィルターをかけ,音圧(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 Comments
Accepted Answer
Hernia Baby
on 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 Comments
Hernia Baby
on 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値)'})
More Answers (0)
See Also
Categories
Find more on スペクトル測定 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!