Estoy intentando implementar un filtro digital de paso bajo Butterworth de décimo orden en mi MCU.
Para encontrar los coeficientes utilicé Filter Design & de Matlab; Herramienta de análisis. Así que creo dos pequeños scripts: en el primero de ellos usé el Objeto de Filtro creado por la herramienta y parece que funciona perfectamente, pero en el segundo intenté implementar el código general basado en el Biquad Direct-Form-II usando solo los coeficientes generados por la herramienta y, en este caso, el filtro funciona bien, excepto por una amplificación de señal de aproximadamente 5E + 7!
Mi código en matlab es el siguiente:
input = AmplitudeF8.';
delayline_lp = [0,0,0,0,0,0,0,0,0,0];
coeff_lp = [-1.7582972612745587, 0.89109671836321969, 2, 1, -1.5932765493727838, 0.71361243648860972, 2, 1, -1.4754804435926461, 0.58691950806119031, 2, 1, -1.4002643388507841, 0.50602253348347193, 2, 1, -1.3637162169443289, 0.46671403035270148, 2, 1];
for k=1:length(output1)
y = output1(k);
for j=1:5 %the biquad sections (order 10 = num_sections = 5)
w = y;
for i=1:2
w = w - (coeff_lp(((j - 1) * 4) + i) * delayline_lp(((j - 1) * 2) + i));
end
y = w;
for i=1:2
y = y + (coeff_lp(((j - 1) * 4) + i + 2) * delayline_lp(((j - 1) * 2) + i));
end
delayline_lp(j * 2) = delayline_lp((j * 2) - 1);
delayline_lp((j * 2) - 1) = w;
end
output2(k) = y;
end
Considera que en la matriz coeff_lp hay a1, a2, b1, b2, .... ya que a0 = b0 = 1 para cada sección de biquad.
¿Por qué en este caso la señal filtrada se amplifica por un factor 5E + 7? Donde estoy equivocado?