dan@0: function [features,F,M] = lpc2spec(lpcas, nout) dan@0: % [features,F,M] = lpc2spec(lpcas,nout) dan@0: % Convert LPC coeffs back into spectra dan@0: % nout is number of freq channels, default 17 (i.e. for 8 kHz) dan@0: % 2003-04-11 dpwe@ee.columbia.edu part of rastamat dan@0: dan@0: if nargin < 2 dan@0: nout = 17; dan@0: end dan@0: dan@0: [rows, cols] = size(lpcas); dan@0: order = rows - 1; dan@0: dan@0: gg = lpcas(1,:); dan@0: aa = lpcas./repmat(gg,rows,1); dan@0: dan@0: % Calculate the actual z-plane polyvals: nout points around unit circle dan@0: zz = exp((-j*[0:(nout-1)]'*pi/(nout-1))*[0:order]); dan@0: dan@0: % Actual polyvals, in power (mag^2) dan@0: features = ((1./abs(zz*aa)).^2)./repmat(gg,nout,1); dan@0: dan@0: F = zeros(cols, floor(rows/2)); dan@0: M = F; dan@0: dan@0: for c = 1:cols; dan@0: aaa = aa(:,c); dan@0: rr = roots(aaa'); dan@0: ff = angle(rr'); dan@0: % size(ff) dan@0: % size(aaa) dan@0: zz = exp(j*ff'*[0:(length(aaa)-1)]); dan@0: mags = sqrt(((1./abs(zz*aaa)).^2)/gg(c))'; dan@0: dan@0: [dummy, ix] = sort(ff); dan@0: keep = ff(ix) > 0; dan@0: ix = ix(keep); dan@0: F(c,1:length(ix)) = ff(ix); dan@0: M(c,1:length(ix)) = mags(ix); dan@0: end