function y = chvocod_syn(x,pitch,R)
%CHVOCOD_SYN   Synthesizes speech waveform from pitch and band envelope signals
%
%		y = CHVOCOD_SYN(x,p,R);
%		x 	matrix of band envelope signals
%			each column contains output of one band
%			each row contains output of one frame
%		p 	pitch signal containing one sample for each frame
%		R  	upsampling rate

% Initialize variables
Fs = 8000;		% Sampling frequency
frlen = R;		% length of frame in samples
N = size(x,2);		% Determine number of channels from input matrix

% Compute FIR coefficients for filter bank . . .
L = 65;				% length of each filter
bank = myownfilt_bank(N,L);

% Generate a voiced source signal using pulse_train . . .
src = sw_source(pitch,Fs,frlen);

% Compute length of source signal . . .
M = length(src);

% Preallocate output matrix for efficiency
ybands = zeros(M,N);

% In loop, process each band:
for i = 1:N
	% Interpolate the decimated signal 
	% and replace any negative values with zeros . . .
	xint = interp(x(:,i),R);
	negs = find(xint<0);
	xint(negs) = zeros(size(negs));

	% Multiply with source, trimming the interpolated signal to
	% match pulse train length, M.
	yint = xint(1:M) .* src;

	% Apply bandpass filter . . .
	ybands(:,i) = fftfilt(bank(:,i),yint);
end

% Add up the output of all of the bands to generate result . . .
y = sum(ybands');


