📄 bpf.m
字号:
% ========================================================
% Calculate BPF parameter (Speech Feature Exactor)
% --------------------------------------------------------
% sp : speech signal ( using PCM coding )
% --------------------------------------------------------
% Grobal variables show as following :
% fr_sz : frame size ( points per frame )
% win_sz : window size ( points per windows )
% std_fr_num : standard frame numbers in a speech
% ch_num : channel number of BPF bank
% FR_BPFB : frequency response of BPF bank
% ========================================================
function BPF=bpf(sp);
% --------------------------------------------------------
global fft_point FR_BPFB fr_sz win_sz std_fr_num ch_num
sp_l=length(sp);
hamming_win=hamming(win_sz);
fr_num=ceil(sp_l/fr_sz);
sp(sp_l+1:fr_sz*(fr_num-1)+win_sz)=zeros(fr_sz*(fr_num-1)+win_sz-sp_l,1);
ltw_rate=fr_num/std_fr_num;
BPF=zeros(fr_num,ch_num+1);
% --------------------------------------------------------
for i=1:fr_num
fr=sp(fr_sz*(i-1)+1:fr_sz*(i-1)+win_sz).*hamming_win;
fft_fr=fft(fr,fft_point);
mag_spectrum=abs(fft_fr(1:fft_point/2-1));
for j=1:ch_num
bpf_p(i,j)=sum((mag_spectrum'.*FR_BPFB(j,:)).^2);
end;
end;
% --------------------------------------------------------
% Linear Time Normalize
% --------------------------------------------------------
for m=1:std_fr_num
x=ltw_rate*m;
x1=fix(x);
if x1==0,
A1=0;
else
A1=bpf_p(x1,:);
end;
if (x1+1)>fr_num,
A2=0;
else
A2=bpf_p(x1+1,:);
end;
std_bpf_p(m,:)=A1+(x-x1)*(A2-A1);
frame_eng(m)=sum(std_bpf_p(m,:));
end
%total_eng=sum(frame_eng);
peak_eng=max(max(std_bpf_p));
std_bpf_p(:,ch_num+1)=frame_eng(:)/ch_num; % ch_ave_eng per frame
% --------------------------------------------------------
% Magnitude Normalize ( Using Peak Energy )
% --------------------------------------------------------
BPF=std_bpf_p*100/peak_eng;
% ========================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -