%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Extracting Zero Frequency signal, Strength of excitation and F0
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [zfSig,vnvsig,vgcit,soe,fr0]=PitchExtract(wav,fs)
%%%%%%%%%%%%% Finding the zero frequency Signal and gci
% wav1 = wav(1:floor(length(wav)/2));
% wav = wav1;
[zfSig, gci]=epochExtract(wav,fs);
[vnvsig] = vnvseg(wav,zfSig,fs);
%%%%%%%%%%%%% Obtaining voiced pitch contour
vnv=vnvsig;
t=zeros(length(wav),1);t(gci)=abs(sign((gci))); gcit = t;%wav(gci)
vgcit = vnv.*t;
[fr0] = pitch_epoch(wav,vnvsig,gci,fs);
%%%%%%%%%%%%%%%%%%%%% soe
sgn=sign(zfSig); sgn(zfSig==0)=1; t=1:length(zfSig);
zc=t(diff(sgn)~=0);
soe=zeros(length(zfSig),1);
%sree start 6_3_14
if( zc(1) == 1 )
zc = zc(2:end);
end
%sree end 6_3_14
for i = 1:length(zc)
if ( zfSig(zc(i)) > zfSig(zc(i)-1))
soe(zc(i))=zfSig(zc(i))-zfSig(zc(i)-1);
end
end
% figure;
% subplot(411);plot(wav); title('waveform');xlim([0,length(wav)]);xlabel('time (in s)');ylabel('s[n]');
% subplot(412);plot(zfSig); title('ZF waveform');xlim([0,length(wav)]);xlabel('time (in s)');ylabel('zf[n]');
% subplot(413);plot(soe); title('Strength of excitation');xlim([0,length(wav)]);xlabel('time (in s)');ylabel('SOE');
% subplot(414);plot(fr0,'. k'); grid;title('Fundamental frequency');xlim([0,length(wav)]);xlabel('time (in s)');ylabel('F_0');
%start by sreedhar
% [r1 c1 i1] = find(soe);
% [r2 c2 i2] = find(fr0);
%
% i11 = (medfilt1(i1,5));
% i21 = (medfilt1(i2,5));
%
% soe1 = zeros(size(soe));
% fr01 = zeros(size(fr0));
%
% soe1(r1) = i11;
% fr01(r2) = i21;
%
% soe = soe.*vnvsig;
% soe1 = soe1.*vnvsig;
%
% sen = buffer(wav,10*fs/1000,(10*fs/1000 - 1),'nodelay');
% [rs cs] = size(sen);
% ha = hamming(10*fs/10000);
% ha = repmat(ha,round(rs/length(ha)),cs);
% ha = ha(:,1:length(sen));
% sen = sen.*ha;
% sen = sen.^2;
% sen = sum(sen);
% sen = (sen./(max(sen)));
%
% zfSig = zfSig./max(zfSig);
% zen = buffer(zfSig,10*fs/1000,(10*fs/1000 - 1),'nodelay');
% [rs1 cs1] = size(zen);
% ha1 = hamming(10*fs/10000);
% ha1 = repmat(ha1,round(rs1/length(ha1)),cs1);
% ha1 = ha1(:,1:length(zen));
% zen = zen.*ha1;
% zen = zen.^2;
% zen = sum(zen);
% zen = (zen./(max(zen)));
%
% ze = zeros(size(vgcit));
% ze(1:length(zen)) = zen;
% ze = (ze.*vgcit);
%
% % for i=1:1:length(ze)
% % if (ze(i) < 0.15)
% % ze(i) = 0;
% % end
% % end
% % ze = smooth(ze);
% figure;
% idFILEphn = fopen('tel_0001.lab');
% C = textscan(idFILEphn,'%d%d%s');
% beGIN = int64(C{1});
% beGIN = beGIN+1;
% eND = int64(C{2});
% phONE = C{3};
% tt = ones(size(beGIN));
% tt =tt*-0.4;
% refLine = -0.6*ones(size(wav));
% refLine(beGIN) = 0;
% ax(1) = subplot(411);plot(wav); grid;title('waveform and its energy');xlim([0,length(wav)]);xlabel('samples');ylabel('s[n]');
% hold on;plot(0.5 + sen,'r');hold on;
% plot(refLine,'r');
% text(double((beGIN+20)),tt,phONE);
% figure;
% ax(1) = subplot(211);plot(wav); title('waveform');xlim([0,length(wav)]);xlabel('time (in s)');ylabel('s[n]');
% ax(2) = subplot(212);plot(zfSig);grid;% hold on;stem(t,'r');
% title('ZF waveform and its energy');xlim([0,length(wav)]);xlabel('samples');ylabel('zf[n]');
% % ax(3) = subplot(413);plot(soe1,'.k'); grid;title('Strength of excitation');xlim([0,length(wav)]);xlabel('samples');ylabel('SOE');
% % ax(4) = subplot(414);plot(fr01,'. k'); grid;title('Fundamental frequency');xlim([0,length(wav)]);xlabel('samples');ylabel('F_0');
% linkaxes(ax,'x');
%
%stop bysreedhar
end
function [fr0] = pitch_epoch(wav,vnvsig,gci,fs)
wav = wav.*vnvsig;
gcitest = zeros(size(wav));
gcitest(gci) = wav(gci);
fr0 = zeros(size(gcitest));
fG = find(gcitest);
dFG = diff(fG);
for len = 1:length(dFG)
if(dFG(len))
dex = fG(len);
fr0(dex,1) = floor(fs/dFG(len));
end
end
end
评论0