The following is a working code that uses 32-component polyphase decomposition of the associated 32-channel anslysis and synthesis filterbanks. As I have already commented, the speed gain is not dramatic in this cae due to short signal and filter lengths. However further architectural improvements as well as coding optimizaiton can provide better results. % S0 - Load the prototype lowpass filter impulse response h0[n]: % -------------------------------------------------------------- load h2.mat; % h[n] is the prototype lowpass filter of length 512 L = length(h); % S1 - Create the 32 x 512 filter-bank hha[k,n] by cosine modulation from protoype : % ---------------------------------------------------------------------------------- numbands = 32; % number of banks (channels) n=0:L-1; hha=zeros(numbands,L); % bank of filters hha[k,n] = 32 x 512 array. for k=0:1:numbands-1 hha(k+1,:) = h.*cos( ( (2*k+1)*pi*(n-16) ) / (2*numbands) ); end % S2 - Create the 32-polyphase components hhap[k,m,n] , for each one of 32 analysis filters hha[k,n]: % --------------------------------------------------------------------------------------------------- numpoly = numbands; % polyphase component number = decimation ratio = number of channels hhap = zeros(numbands,numpoly, L/numpoly); % hhap = 32 x 32 x 512/32 , 3D ANALYSIS filter bank array M = numpoly; % polyphase system decimation ratio for k=1:numbands for m = 1:numpoly hhap(k,m,:) = hha(k,m:M:end); % create the m-th polyphase component of k-th channel filter end end % S3 - Design the 32 x 512 synthesis (cmplementary) filter bank : % ---------------------------------------------------------------- numbands = 32; % number of banks n=0:L-1; hhs = zeros(numbands,L); % bankd of filters for k=0:1:numbands-1 hhs(k+1,:) = h.*cos( ( (2*k+1)*pi*(n+16) ) / (2*numbands) ); end % S4 - Obtain the 32-polyphase components hhsp[k,m,n] , for each one of 32 synthesis filters hhs[k,n]: % ---------------------------------------------------------------------------------------------------- numpoly = numbands; % polyphase component number = decimation ratio = number of channels hhsp = zeros(numbands,numpoly, L/numpoly); % hhap = 32 x 32 x 512/32 , 3D ANALYSIS filter bank array M = numpoly; % polyphase system decimation ratio for k=1:numbands for m = 1:numpoly hhsp(k,m,:) = hhs(k,m:M:end); % create the m-th polyphase component of k-th channel filter end end % S5 - Generate the test input signal % ----------------------------------- N = 2*1024; wav_in = cos(0.01791*pi*[0:N-1]); % pure sine tone % S6 - Apply test signal to the filterbank, using the filterband approach : % -------------------------------------------------------------------------- yyd = zeros( numbands, floor(N/numbands)); % decimated outputs.. M = numbands; for k=1:1:numbands %temp = conv( wav_in,hha(k,:)); % THESE STEPS are now implemented as a POLYPHASE filter temp = conv([wav_in(1:M:end),0] , hhap(k,1,:)); for m=2:M temp = temp + conv([0,wav_in(M-m+2:M:end)],hhap(k,m,:)); end yyd(k,:) = temp(L/(2*M)+1 : L/(2*M)+N/numbands); end % S7 - Apply synthesis filterbanks on the decimated signal : % ---------------------------------------------------------- ys = zeros(1, N); for k=1:numbands temp = zeros(1, N+L-1); for m = 1:numpoly temp(m:numbands:end-31) = conv( yyd(k,:) , hhsp(k,m,:) ); end ys = ys + temp(L/2+1:L/2+N); end ys = numbands*ys; % SX - DISPLAY RESULTS: % --------------------- L = length(h); figure,subplot(2,1,1) stem([0:L-1],h);title('The Prototype Lowpass Filter'); subplot(2,1,2) plot(linspace(-1,1,4*L),20*log10(abs(fftshift(fft(h,4*L))))); grid on; figure plot(linspace(-1,1,4*L),20*log10(abs(fftshift(fft(hha(1,:),4*L))))); hold on for k=2:numbands plot(linspace(-1,1,4*L),20*log10(abs(fftshift(fft(hha(k,:),4*L))))); end title('32 CHANNEL FILTERBANK'); figure,subplot(2,1,1) plot(wav_in);title('input signal') subplot(2,1,2) plot(linspace(-1,1,4*N),20*log10(abs(fftshift(fft(wav_in,4*N))))); figure,subplot(2,1,1) plot(ys);title('Synthesized Back'); subplot(2,1,2) plot(linspace(-1,1,4*N),20*log10(abs(fftshift(fft(ys,4*N)))));