本发明涉及汽车nvh性能技术领域,具体为一种基于matlab的车内语言清晰度自动计算方法。
背景技术:
汽车行业中,语言清晰度(ai,articulationindex)常用于衡量车内噪声存在时,驾乘者语音交流的清晰程度。语言清晰度是音质评价的重要指标,在汽车nvh(噪声、振动与声振粗糙度)领域主要用于考察和评估车内噪声对于驾乘人员信息交流的影响程度。而现有技术没有很好地专门针对语言清晰度进行自动计算的方法,如果需要得到车内某个测点的语言清晰度,往往需要先通过对原始数据进行处理,再通过查表、计权、手工计算等步骤才能得到最终的语言清晰度结果,计算操作非常繁琐,计算效率低,且计算得到的语言清晰度结果准确率低。
技术实现要素:
本发明针对现有技术存在的问题,提出了一种基于matlab的车内语言清晰度自动计算方法。
本发明解决其技术问题所采用的技术方案是:一种基于matlab的车内语言清晰度自动计算方法,包括,
s1.获取txt文本;
s2.读取txt文本中的数据并做行列转置处理以得到每一测点的数据;
s3.对每一测点的数据进行功率谱密度分析并得到功率谱密度分析结果;
s4.根据设定的1/3倍频程上限频率、1/3倍频程下限频率并结合所述功率谱密度分析结果求得每一测点的1/3倍频程频谱;
s5.对所述1/3倍频程频谱进行线性自功率谱分析得到线性自功率谱分析结果;
s6.根据设定的a计权特性值求得所述线性自功率谱分析结果的a计权声压级频谱;
s7.根据设定的参考声压级频谱计算其与所述a计权声压级频谱的差值;
s8.根据设定的各频段权重值及所述差值计算所述a计权声压级频谱的各频段语言清晰度;
s9.根据各频段语言清晰度计算每一测点的总语言清晰度。
作为优选,s1具体为,将原始数据导出为初始txt文本,删除所述初始txt文本的表头信息并保存为txt文本。
作为优选,s2中,所述测点包括主驾左耳测点、主驾右耳测点、右后乘客左耳测点和右后乘客右耳测点。
作为优选,s3具体为,调用pwelch函数进行功率谱密度分析得到相应的频率及对应的频谱。
作为优选,s4具体为,当求得的频率大于等于对应的1/3倍频程下限频率且小于等对应的于1/3倍频程上限频率,则所述频率对应的频谱为测点的1/3倍频程频谱。
作为优选,s5具体为,调用trapz函数对所述1/3倍频程频谱进行线性自功率谱分析。
作为优选,s6具体为,通过调用log10()函数计算a计权声压级频谱。
作为优选,s8具体为,分3个频率段对各频段的语言清晰度进行计算。
作为优选,具体为,当差值大于等于30时,将该频段划分为频率段二,并使该频段的语言清晰度为对应的频段权重值,频率段二的语言清晰度为频率段二中各频段的语言清晰度之和;
当差值小于0时,将该频段划分为频率段一,并使该频段的语言清晰度为0,频率段一的语言清晰度为频率段一中各频段的语言清晰度之和;
当差值大于0且小于30时,将该频段划分为频率段三,并使该频段的语言清晰度为对应的频段权重值与对应的差值之积除于30,频率段三的语言清晰度为频率段三中各频段的语言清晰度之和。
作为优选,s9中,每一测点的总语言清晰度为各频率段的语言清晰度之和。
有益效果
通过本申请的基于matlab的车内语言清晰度自动计算方法可以简化车内语言清晰度计算的数据处理过程,提高数据处理效率,降低数据处理风险,使得车内语言清晰度计算更为方便、精确度更高。
附图说明
图1为本申请基于matlab的车内语言清晰度自动计算方法的框图。
具体实施方式
下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。
如图1所示,一种基于matlab的车内语言清晰度自动计算方法,包括,
s1.获取txt文本。具体为,将原始数据导出为初始txt文本,删除所述初始txt文本的表头信息并保存为txt文本。
s2.读取txt文本中的数据并做行列转置处理以得到每一测点的数据。所述测点包括主驾左耳测点、主驾右耳测点、右后乘客左耳测点和右后乘客右耳测点。
具体实现程序如下,
%clear
%clc
%closeallhidden
fni1=input('请输入要处理的数据文件名(不带扩展名):','s');
fni=strcat(fni1,'.txt');
fid=fopen(fni,'r');
sf=51200;
%读取文件中的数据,并对拟计算的行列式做转置
x=fscanf(fid,'%f',[8,inf]);
status=fclose(fid);
n=length(x);
p0=2e-5;
%t=(0:1/sf:(n-1)/sf);
%%%%共计4个测点,包括主驾dl左耳和dr右耳,右后乘客pl左耳和pr右耳
dl=x(2,(1:n));
dr=x(4,(1:n));
pl=x(6,(1:n));
pr=x(8,(1:n));
s3.对每一测点的数据进行功率谱密度分析并得到功率谱密度分析结果。具体为,调用pwelch函数进行功率谱密度分析得到相应的频率及对应的频谱。
具体实现程序如下,
nfft=2^nextpow2(n);
ch1=dl;ch2=dr;ch3=pl;ch4=pr;
win=hanning(n);
[pdl,f]=pwelch(ch1,win,50,nfft,sf);
[pdr,f]=pwelch(ch2,win,50,nfft,sf);
[ppl,f]=pwelch(ch3,win,50,nfft,sf);
[ppr,f]=pwelch(ch4,win,50,nfft,sf);
s4.根据设定的1/3倍频程上限频率、1/3倍频程下限频率并结合所述功率谱密度分析结果求得每一测点的1/3倍频程频谱。具体为,当求得的频率大于等于对应的1/3倍频程下限频率且小于等对应的于1/3倍频程上限频率,则所述频率对应的频谱为测点的1/3倍频程频谱。
s5.对所述1/3倍频程频谱进行线性自功率谱分析得到线性自功率谱分析结果。具体为,调用trapz函数对所述1/3倍频程频谱进行线性自功率谱分析。
s3和s4的具体实现程序如下,
%1/3倍频程上限频率
fl=[180,224,280,355,450,560,710,900,1120,1400,1800,2240,2800,3550,4500,5600];
%1/3倍频程下限频率
fu=[224,280,355,450,560,710,900,1120,1400,1800,2240,2800,3550,4500,5600,7100];
%原始信号频谱分析
forj=1:16
b=1;b1=1;
ddlx=0;ddrx=0;dplx=0;dprx=0;
ddl=0;ddr=0;dpl=0;dpr=0;
fori=1:nfft/2
if(fl(j)<=f(i)&fu(j)>=f(i))
ddlx(b)=f(i);ddrx(b)=f(i);dplx(b)=f(i);dprx(b)=f(i);b=b+1;
ddl(b1)=pdl(i);ddr(b1)=pdr(i);dpl(b1)=ppl(i);dpr(b1)=ppr(i);b1=b1+1;
end
end
adl(j)=sqrt(trapz(ddlx,ddl));
adr(j)=sqrt(trapz(ddrx,ddr));
apl(j)=sqrt(trapz(dplx,dpl));
apr(j)=sqrt(trapz(dprx,dpr));
end
s6.根据设定的a计权特性值求得所述线性自功率谱分析结果的a计权声压级频谱。具体为,通过调用log10()函数计算a计权声压级频谱。
具体实现程序如下,
%a计权特性值
fa=[11,8.5,6.5,5.0,3.2,1.9,0.9,0.1,-0.5,-0.9,-1.2,-1.3,-1.2,-1,-0.5,0.1];
%a计权声压级频谱
j=1:16;
dbadl=20*log10(adl(j)/p0)-fa(j);
dbadr=20*log10(adr(j)/p0)-fa(j);
dbapl=20*log10(apl(j)/p0)-fa(j);
dbapr=20*log10(apr(j)/p0)-fa(j);
s7.根据设定的参考声压级频谱计算其与所述a计权声压级频谱的差值。
具体实现程序如下,
%参考声压级频谱
dbaref=[64,69,71,73,75,75,75,74,72,70,67,65,63,60,56,51];
%各频段权重
dbaweight=[1,2,3.25,4.25,4.5,5.25,6.5,7.25,8.5,11.5,11,9.5,9,7.75,6.25,2.5];
%差值
dbadlsub=dbaref(j)-dbadl(j);
dbadrsub=dbaref(j)-dbadr(j);
dbaplsub=dbaref(j)-dbapl(j);
dbaprsub=dbaref(j)-dbapr(j);
s8.根据设定的各频段权重值及所述差值计算所述a计权声压级频谱的各频段语言清晰度。具体为,分3个频率段对各频段的语言清晰度进行计算。当差值大于等于30时,将该频段划分为频率段二,并使该频段的语言清晰度为对应的频段权重值,频率段二的语言清晰度为频率段二中各频段的语言清晰度之和。当差值小于0时,将该频段划分为频率段一,并使该频段的语言清晰度为0,频率段一的语言清晰度为频率段一中各频段的语言清晰度之和。当差值大于0且小于30时,将该频段划分为频率段三,并使该频段的语言清晰度为对应的频段权重值与对应的差值之积除于30,频率段三的语言清晰度为频率段三中各频段的语言清晰度之和。
具体实现程序如下(以主驾左耳测点为例),
%主驾左耳语言清晰度计算
c1=1;c2=1;c3=1;
dlaivalue1=0;dlaivalue2=0;dlaivalue3=0;
fork=1:16
ifdbadlsub(k)>=30
dlaivalue2(c2)=dbaweight(k);c2=c2+1;
elseifdbadlsub(k)<0
dlaivalue1(c1)=0;c1=c1+1;
elseifdbadlsub(k)>0&&dbadlsub(k)<30
dlaivalue3(c3)=dbaweight(k)*dbadlsub(k)/30;c3=c3+1;
else
end
end
dlaisum1=sum(dlaivalue1);
dlaisum2=sum(dlaivalue2);
dlaisum3=sum(dlaivalue3);
s9.根据各频段语言清晰度计算每一测点的总语言清晰度。每一测点的总语言清晰度为各频率段的语言清晰度之和。
具体实现程序如下(以主驾左耳测点为例),
dlairesult=dlaisum1+dlaisum2+dlaisum3;
fprintf('主驾左耳语言清晰度:%f\n',dlairesult);
本申请通过matalab将整个计算过程通过编程处理,只需要对原始数据进行简单的前处理,便可利用本申请的方法得到语言清晰度的计算结果,大大简化了计算过程,提高了工作效率。
上面所述的实施例仅是对本发明的优选实施方式进行描述,并非对本发明的构思和范围进行限定。在不脱离本发明设计构思的前提下,本领域普通人员对本发明的技术方案做出的各种变型和改进,均应落入到本发明的保护范围,本发明请求保护的技术内容,已经全部记载在权利要求书中。