R = MuxPolyCovMat(r,M); MuxPolyCovMat(r,M) returns the polynomial covariance matrix arising for a signal characterised by an autocorrelation sequence r that is demulti- plexed into M channels. This problem arises e.g. in optimal subband coding [1]. The returned matrix R is pseudo-circulant. Input parameters: r autocorrelation sequence of input process M number of subchannels for demultiplexing Output parameters: R MxMxL polynomial covariance matrix Reference: [1] S. Redif, J.G. McWhirter, and S. Weiss, "Design of FIR Paraunitary Filter Banks for Subband Coding Using a Polynomial Eigenvalue Decompo- sition," IEEE Transactions on Signal Processing, vol. 59, no. 11, pp. 5253-5264, Nov 2011.
0001 function R = MuxPolyCovMat(r,M); 0002 %R = MuxPolyCovMat(r,M); 0003 % 0004 % MuxPolyCovMat(r,M) returns the polynomial covariance matrix arising for a 0005 % signal characterised by an autocorrelation sequence r that is demulti- 0006 % plexed into M channels. 0007 % 0008 % This problem arises e.g. in optimal subband coding [1]. The returned 0009 % matrix R is pseudo-circulant. 0010 % 0011 % Input parameters: 0012 % r autocorrelation sequence of input process 0013 % M number of subchannels for demultiplexing 0014 % 0015 % Output parameters: 0016 % R MxMxL polynomial covariance matrix 0017 % 0018 % Reference: 0019 % 0020 % [1] S. Redif, J.G. McWhirter, and S. Weiss, "Design of FIR Paraunitary 0021 % Filter Banks for Subband Coding Using a Polynomial Eigenvalue Decompo- 0022 % sition," IEEE Transactions on Signal Processing, vol. 59, no. 11, 0023 % pp. 5253-5264, Nov 2011. 0024 0025 % S Weiss, UoS, 16/9/2004 0026 % updated, S Weiss, Strathclyde, 27/8/14 0027 0028 [N1,N2] = size(r); 0029 if N1==1, 0030 r=r.'; 0031 L=N2; 0032 else 0033 L=N1; 0034 end; 0035 if mod(L,2)~=1, 0036 error('MuxPolyCovMat() fed with an ACS of even length'); 0037 end; 0038 Lr = (L+1)/2; % number of lags in r to one side 0039 r = r(Lr:end); 0040 LR = ceil((Lr+M-1)/M); % number of lags in R to one side 0041 0042 Rfull = toeplitz([r; zeros(2*M,1)]); 0043 R(:,:,LR) = Rfull(1:M,1:M); 0044 for i = 1:(LR-1), 0045 R(:,:,LR+i) = Rfull(1:M,i*M+1:(i+1)*M); 0046 R(:,:,LR-i) = R(:,:,LR+i)'; 0047 end; 0048