function [y,Cfinal,bruitwn]=filt2(b,a,x,B,Cini);
%
% function [y,Cfinal]=filt2(b,a,x,B,Cini);
%rr
% Calcul de la sortie y d'un filtre d'ordre 2
% pour une entrée x
% avec quantifcation des données internes sur B bits.
% en format fixe
% b et a sont les coefficients du numérateur et du dénominateur
% On suppose que les données (x, y, w) 
% sont comprises entre +1 et -1.
% Il y adonc B-1 bits fractionnaires.
% Cini est le vecteur de conditions initiales
% Cfinal est le vecteur de conditions finales

N=length(x);
bruitwn=ones(1,length(x));
ct=2^(B-1)
B
k=B-1
Bb=B;

xmax=max(abs(x));
if (xmax>=1)
  disp('attention x>= 1 saturation')
end
%x=x/xmax;
y=zeros(1,N);
nb=length(b);
if(nb<3)
  b=[b zeros(1,3-nb)];
end
na=length(a);
if(na<3)
  a=[a zeros(1,3-nb)];
end
W=Cini;
wn=0;

A=[1 -a(2) -a(3)]';
B=b';

for i=1:N
in=[x(i) , W];
wn=in*A;
% quantififcation de wn sur B bits
% avec B-1 bits fractionnaires
tmpp=wn;
wn=round(wn*ct)/ct;

%wn=debord(wn,Bb,k);
%wn=satur(wn,Bb,k);
bruitwn(i)=tmpp-wn;
y(i)=[wn W]*B;
W=[wn W(1)];
end
Cfinal=W;
