📄 ssnr.m
字号:
%-------------------------------------------------------------------------% 本程序用于测量增强语音的信噪比% 08.2.18 magic%% 运行本程序时,首先要求输入增强语音对应的纯净语音,然后再输入增强语音。%% 算法思想:SNR=10log10(sum(s.^2)/sum((sn-s).^2))% 其中,s表示纯净语音,sn表示带噪语音。% 首先,对2个输入语音进行首尾对齐,因为分帧的原因,原始语音与增强语音% 可能存在长度不一直的情况,因此需要进行长度对齐。% 然后,对2个输入语音进行幅度统一,因为增强后的语音,幅度值较原始语音% 可能变小或增大,为准确计算信噪比,需要进行幅度统一,对增强语音幅度乘% 上一个还原系数。还原系数由原始语音和增强语音中幅度最大值之比得出。% 最后,将经过上述两步的两个输入语音按照前面的公式计算,得出信噪比。%-------------------------------------------------------------------------%---------------------------读入纯净语音和增强语音--------------------------clear;[filename,pathname]=uigetfile('*.wav','请选择纯净语音文件:');wavin1=wavread([pathname filename])';wav_length1=length(wavin1);[filename,pathname]=uigetfile('*.wav','请选择增强语音文件:');wavin2=wavread([pathname filename])';wav_length2=length(wavin2);%--------------------------------首尾对齐----------------------------------if wav_length1>wav_length2 wav_len=wav_length2; wav1=zeros(1,wav_length2); wav1=wavin1(1:wav_length2); wav2=wavin2;else if wav_length1<wav_length2 wav_len=wav_length1; wav2=zeros(wav_length1); wav2=wavin2(1:wav_length1); wav1=wavin1; else wav_len=wav_length1; wav1=wavin1; wav2=wavin2; end;end;% %--------------------------------幅度统一--------------------------------% [max1,i1]=max(wav1);% [max2,i2]=max(wav2);% c=max1/max2;% wav22=c*wav2;%---------------------------------不幅度统一--------------------------------wav22=wav2;%------------------------------计算信噪比----------------------------------pow_s=sum(wav1.^2);pow_n=sum((wav22-wav1).^2);snr=10*log10(pow_s/pow_n);snr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -