function [cps,R]=all_pole_ifft(s,LPC_ORDER,CPS_ORDER); % ALL_POLE modeling, [cps,R]=all_pole_ifft(s,LPC_ORDER) % everything hard-wired inside. Reads mel fb from ~/matlab/fbanks/ % can eventually output also the dct % repeats st and last channel and does a real ifft. load /u/honza/matlab/fbanks/mfb N=size(mfb,2); S = abs(specgram(s,256,8000,hamming(200),120)).^2; Nfr = size(S,2); % tests with preemphasis on the spec: %qq = abs(freqz([1 -0.97],1,129)).^2; %S = S .* (qq * ones(1,Nfr)); fbout = mfb' * S; % cube root fbout3 = fbout .^ (1/3); %fbout3 = log(fbout); % ifft - better do it in a cycle. R = zeros(2*(N+1),Nfr); for ii=1:Nfr, repeated = [fbout3(1,ii); fbout3(:,ii); fbout3(N,ii)]; x = [repeated; repeated(N+1:-1:2)]; % flip for the ifft X = real(ifft(x)); R(:,ii) = X; %pause end % now all-pole, do also gain acc to definition cps = zeros(CPS_ORDER,Nfr); %aux=[]; for ii=1:Nfr; r = R(1:LPC_ORDER+1,ii); %figure(1); plot (r); grid a = levinson(r); % aux = [aux a(2:LPC_ORDER+1)']; c = a_to_cepst (a',CPS_ORDER-1); gain2 = r'*a'; c(1) = log(gain2); % c(1) = log(r(1)); cps(:,ii) = c; % pause end