function crossover_coefs = sof_crossover_gen_quant_coefs(num_bands, sample_rate,
							 fc_low, fc_med, fc_high);

% De-normalize cutoff frequencies in respect to nyquist (half of sample rate)
fc_low = fc_low * sample_rate / 2;
fc_med = fc_med * sample_rate / 2;
fc_high = fc_high * sample_rate / 2;

filter_len = 3;
crossover.lp = cell(1:filter_len);
crossover.hp = cell(1:filter_len);
% Generate zeros, poles and gain for crossover with the given frequencies
% Extend the length of lp and hp to 3 (filter_len) by flat_filter if necessary
if (num_bands == 1)
	% Pass-through
	crossover.lp = [flat_filter() flat_filter() flat_filter()];
	crossover.hp = [flat_filter() flat_filter() flat_filter()];
elseif (num_bands == 2)
	% 2-way crossover
	crossover = sof_crossover_gen_coefs(sample_rate, fc_low);
	crossover.lp = [crossover.lp(1) flat_filter() flat_filter()];
	crossover.hp = [crossover.hp(1) flat_filter() flat_filter()];
elseif (num_bands == 3)
	% 3-way crossover
	crossover = sof_crossover_gen_coefs(sample_rate, fc_low, fc_med);
else % (num_bands == 4)
	% 4-way crossover
	crossover = sof_crossover_gen_coefs(sample_rate, fc_low, fc_med, fc_high);
end

assert(length(crossover.lp) == filter_len && length(crossover.hp) == filter_len);

% Print crossover
for i = 1:filter_len
	crossover.lp(i)
	crossover.hp(i)
end

% Convert the [a,b] coefficients to values usable with SOF
crossover_bqs = sof_crossover_coef_quant(crossover.lp, crossover.hp);

j = 1;
k = 1;
for i = 1:filter_len
	crossover_coefs(k:k+6) = crossover_bqs.lp_coef(j:j+6); k = k + 7;
	crossover_coefs(k:k+6) = crossover_bqs.hp_coef(j:j+6); k = k + 7;
	j = j + 7;
end

end

function flat = flat_filter();

% Flat response y[n] = x[n] (only b0=1.0)
flat.b = [1.0, 0, 0];
flat.a = [0, 0, 0];

end
