Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何从声压(Pa)中提取声压级(dB)并绘制它与时间的关系图?_Matlab_Matlab Figure - Fatal编程技术网

Matlab 如何从声压(Pa)中提取声压级(dB)并绘制它与时间的关系图?

Matlab 如何从声压(Pa)中提取声压级(dB)并绘制它与时间的关系图?,matlab,matlab-figure,Matlab,Matlab Figure,我正在努力。 在一次测量中,我有大约1000000个压力样本(计算的压力与时间) 但问题是,因为在链接中的方程式中使用了均方根压力,1000000 Pa样本的结果将是1 dB的值 我已经尝试在Matlab中使用移动RMS(带重叠的滑动窗口技术)。但我不确定这是正确的方法 %How rms function is used: %rms(signal,window length,number of overlapping,zero padding) %my calculation with fil

我正在努力。 在一次测量中,我有大约1000000个压力样本(计算的压力与时间)

但问题是,因为在链接中的方程式中使用了均方根压力,1000000 Pa样本的结果将是1 dB的值

我已经尝试在Matlab中使用移动RMS(带重叠的滑动窗口技术)。但我不确定这是正确的方法

%How rms function is used:
%rms(signal,window length,number of overlapping,zero padding)

%my calculation with filtered(C-Weighting) Signal and sample frequency of 48000Hz

prms_l=rms((filterC(OUTPUT(:,2),48000)),30000,29900,0); %rms pressure left ear
prms_r=rms((filterC(OUTPUT(:,3),48000)),30000,29900,0); %rms pressure right ear
t_spl=rms(OUTPUT(:,1),30000,29900,0); %time for sliding window

SPL_l=20*log10(prms_l/0.00002); % P_reference(air)=0.00002 Pa
SPL_r=20*log10(prms_r/0.00002);

我的预期结果将是SPL和时间的关系图。

是的,移动窗口平均值是一个很好的方法。我会使用一个小得多的窗口,根据信号的频率内容改变它的大小。另外,不要过滤x轴值

您在文件交换上发现的功能不是很好。使用
conv
计算移动平均线会更有效:

ws = 101; % window size
prms_l = sqrt(conv(OUTPUT(:,2).^2,ones(ws,1)/ws,'same')); % rms pressure left ear
prms_r = sqrt(conv(OUTPUT(:,3).^2,ones(ws,1)/ws,'same')); % rms pressure right ear
t_spl = OUTPUT(:,1);
加权窗口通常提供更好的结果(例如创建)。使用高斯窗口,输出中将不会出现锯齿瑕疵。您的代码(不依赖于我的工具箱)如下所示:

sigma = 30; % determines window size, kernel will be 6*sigma+1
ws = ceil(3*sigma);
x = -ws:ws;
kernel = exp(-x.^2/(2*sigma^2));
kernel = kernel / sum(kernel);
prms_l = sqrt(conv(OUTPUT(:,2).^2,kernel,'same')); % rms pressure left ear
prms_r = sqrt(conv(OUTPUT(:,3).^2,kernel,'same')); % rms pressure right ear
t_spl = OUTPUT(:,1);

是的,移动窗口均线是一个很好的方法。我会使用一个小得多的窗口,根据信号的频率内容改变它的大小。另外,不要过滤x轴值

您在文件交换上发现的功能不是很好。使用
conv
计算移动平均线会更有效:

ws = 101; % window size
prms_l = sqrt(conv(OUTPUT(:,2).^2,ones(ws,1)/ws,'same')); % rms pressure left ear
prms_r = sqrt(conv(OUTPUT(:,3).^2,ones(ws,1)/ws,'same')); % rms pressure right ear
t_spl = OUTPUT(:,1);
加权窗口通常提供更好的结果(例如创建)。使用高斯窗口,输出中将不会出现锯齿瑕疵。您的代码(不依赖于我的工具箱)如下所示:

sigma = 30; % determines window size, kernel will be 6*sigma+1
ws = ceil(3*sigma);
x = -ws:ws;
kernel = exp(-x.^2/(2*sigma^2));
kernel = kernel / sum(kernel);
prms_l = sqrt(conv(OUTPUT(:,2).^2,kernel,'same')); % rms pressure left ear
prms_r = sqrt(conv(OUTPUT(:,3).^2,kernel,'same')); % rms pressure right ear
t_spl = OUTPUT(:,1);

谢谢你的回答!我还尝试使用movmean:Tmov=movmean(输出(:,1),n_块,'Endpoints','discard');Out2=输出(:,2:3)。^2;%输出^2 für Schalldruck M_full=movmean(输出(:,1:3),n_块,'Endpoints','discard');P_rms=sqrt(movmean((Out2),n_块,'Endpoints','discard');SPL_lr=20*log10(P_rms/0.00002);但是我的信号从2.5s开始直到t(end)-2.5在气动声学中,也有很多例子,它们绘制了,例如5.6kHz倍频程A带加权。或8kHz第三倍频程频带(始终与时间相对)。你知道这方面的情况吗?@IFIGNIAASL:conv
code产生与输入相同大小的输出。边缘的数据在这里没有正确加权,这是可以纠正的,但我不知道这有多重要
movmean
也可以,但是使用
'Endpoints','shrink'
而不是
'discard'
来获得正确的输出大小。我想,倍频带决定了你用什么滤波器来代替移动平均值——用带通滤波器代替。但我不确定实际情况是否如此,我不在该领域工作。谢谢你的建议和时间:)谢谢你的回答!我还尝试使用movmean:Tmov=movmean(输出(:,1),n_块,'Endpoints','discard');Out2=输出(:,2:3)。^2;%输出^2 für Schalldruck M_full=movmean(输出(:,1:3),n_块,'Endpoints','discard');P_rms=sqrt(movmean((Out2),n_块,'Endpoints','discard');SPL_lr=20*log10(P_rms/0.00002);但是我的信号从2.5s开始直到t(end)-2.5在气动声学中,也有很多例子,它们绘制了,例如5.6kHz倍频程A带加权。或8kHz第三倍频程频带(始终与时间相对)。你知道这方面的情况吗?@IFIGNIAASL:conv
code产生与输入相同大小的输出。边缘的数据在这里没有正确加权,这是可以纠正的,但我不知道这有多重要
movmean
也可以,但是使用
'Endpoints','shrink'
而不是
'discard'
来获得正确的输出大小。我想,倍频带决定了你用什么滤波器来代替移动平均值——用带通滤波器代替。但我不确定实际情况是否如此,我不在该领域工作。谢谢你的建议和时间:)