{ LATLMS.ASM performs the LMS algorithm implemented with a lattice FIR filter structure with Joint Process estimation ****************************************************************** * 1) f0(n)= b0(n)= u(n) * * 2) fm(n)= fm-1(n) - km(n)*bm-1(n-1), 0 Program Memory Data buffer of the reflection coefficients i10 -> Program Memory Data buffer of the filter weights Computation cycles: LATLMS_ALG: 7+11M per iteration , LATLMS_INIT: 16+2M Memory usage: pm code= 36 words, pm data= 2M+1, dm data= M+1 } #define STAGES 3 #define STEPSIZE 0.005 .GLOBAL latlms_init, latlms_alg; .SEGMENT/DM dm_data; .VAR bpe_coef[STAGES+1]; .ENDSEG; .SEGMENT/PM pm_data; .VAR weights[STAGES+1]; .VAR ref_coef[STAGES]; .ENDSEG; .SEGMENT/PM pm_code; latlms_init: b0=bpe_coef; m0=0; m1=1; l0=STAGES+1; b8=ref_coef; b10=weights; m8=0; m9=1; l8=STAGES; l10=STAGES+1; f7=STEPSIZE; f0=0.0; lcntr=STAGES, do clear_bufs until lce; dm(i0,m1)=f0, pm(i8,m9)=f0; clear_bufs: pm(i10,m9)=f0; rts(db); dm(i0,m1)=f0, pm(i10,m9)=f0; nop; latlms_alg: f10=pass f0, f1=dm(i0,m0), f4=pm(i10,m8); {f0= b0(n), f10= f0(n), f1= b0(n-1), f4= g0(n)} f12=f0*f4, dm(i0,m1)=f0, f5=pm(i8,m9); {f12= y0(n)= b0(n)*g0(n), store b0(n), f5= k1(n)} f13=f1*f5, f6=f9-f12; {f13= b0(n-1)*k1(n), f6= e0(n)} lcntr=STAGES, do update_coefs until lce; f3=f0*f7, f2=f10-f13, f8=f4; {f2= fm(n), f3= bm-1(n)*stepsize, f8= gm-1(n)} f13=f3*f6, f3=f10; {f13= stepsize*bm-1(n)*em-1(n), f3= fm-1(n)} f13=f3*f5, f4=f8+f13, f8=f5; {f4= gm-1(n+1), f13= fm-1(n)*km(n), f8= km(n)} f0=f1-f13, pm(i10,m9)=f4; {f0= bm(n), store gm-1(n+1)} f10=f0*f3, f9=dm(i0,m0); {f10= bm(n)*fm-1(n), f9= bm(n-1)} f13=f1*f2, dm(i0,m1)=f0, f4=pm(i10,m8); {f13= bm-1(n-1)*fm(n), store bm(n), f4= gm(n)} f13=f0*f4, f1=f10+f13, f10=f6; {f10= em-1(n)} {f13= bm(n)*gm(n), f1= fm(n)*bm-1(n-1)+bm(n)*fm-1(n)} f12=f12+f13, f5=pm(i8,-1); {f12= y(n) of mth stage, f5= km+1(n)} f13=f1*f7, f6=f10-f13, f1=f9; {f6= em(n), f13= stepsize*f1, f1= bm(n-1)} f13=f1*f5, f8=f8+f13, f10=f2; {f13= bm(n-1)*km+1(n), f8= km(n+1), f10= fm(n)} update_coefs: f3= f0*f6, pm(i8,2)=f8; {f3= bm(n)*em(n), store km(n+1)} rts(db), f3=f3*f7; {f3= stepsize*em(n)*bm(n)} f4=f3+f4, f3=pm(i8,-1); {f4= gm(n+1), i8 -> k1(n+1)} pm(i10,m9)=f4; {store gm(n+1)} .ENDSEG;