section 7 - Index of

section 7 - Index of section 7 - Index of

11.07.2015 Views

; Real-Valued FFT for MOTOROLA DSP560001112,; based on Glenn Bergland's algorithm,rifft macro points,binlogsz,idata,odata, twiddle,bergtablemove #idata,rOmove #points/4,nOmove #twiddle+ 1,r7lua (rO)+nO,r1move rO,r4move r1,r5move #1,r3move x:(rO),A y:(r4),yO;rO = ptr to a;bflys in ea group, half at ea pass;r7 always points to start location of twiddle;r1 = ptr to b;r4 points to c;r5 points to d,with predecrement;group per pass, double at ea pass;A=a,yO=cdoFirst Pass -- W(n) = 1nO,pass1;first pass is trivial, no multiplicationsA---\ I---A'= Re[ A + jB + (C + jD) ] = A + CB----'--L/----B'= Im[ A + jB + (C + jD) ] =j(D + B)C----/I \----C'= Re[ A + jB - (C + jD) ] = A - CD---I \---D'= Im[-A - jB + (C + jD) ] =j(D - B),-------------------------------------------------pass 1sub yO,A x:(r1 ),xO y:(r5),Badd xO,B A,x:(r1)+ y:(r5),Asub xO,A x:(rO)+,B B,y:(r4)+add yO,B x:(rO)-, A A,y:(r5)+move B,x:(rO)+ y:(r4),yO;A=a-c=c' ,B=d,xO=b,;B=d+b=b', A=d,PUT c' to x:b;A=d-b=d',B=a,PUT b' to y:c;B=a+C=a', A=next a,PUT d';yO=next c, PUT a'move #idata,rOdo #binlogsz-3,end-passmove r7,r2move r2,r6move nO,AIsr Ar3,Blsi A,nOmove B,r3lua (rO)+nO,r1move rO,r4move r1,r5lua (r3)-,n2move x:(rO),A y:(r4),yO;rO = ptr to a;do all passes except first and last;r2 points to real twiddle;r6 points to imag twiddle;half bflys per group;double group per pass;r3 is temp reg.;r1 = ptr to b;r4 points to c;r5 points to d;n2=group per pass -1;A=a, yO=cFigure 8-5 Real Input FFT Based on Glenn Bergland Algorithm (Sheet 5 of 8)

FirstGrouplnPassdo nO,FirstGrouplnPasssub yO, A x:(r1 ),xO y:(r5),Badd xO,B A,x:(r1)+ y:(r5),Asub xO,A x:(rO)+,B B,y:(r4)+add yO,B x:(rO)-,A A,y:(r5)+move B,x:(rO)+ y:(r4),yO;first group in a pass;A=a-c=c',B=d,xO=b,;B=d+b=b', A=d,PUT c' to x:b;A=d-b=d',B=a,PUT b' to y:c;B=a+c=a', A=next a,PUT d';yO=next c, PUT a'domovemoveluamoven2,end_groupr5,rOrO,r4(rO)+nO,r1r1,r5;rest groups in this pass;rO ptr to next group a;r4 ptr to next group c;r1 ptr to next group b;r5 ptr to next group dIntermediate Passes -- W(n) < 1A---\/---A'= Re[ A + jC + (B - jO)W(k) 1 = A+BWr+OWi=A+ T1B----'-L/----B'= Im[ A + jC - (B - jO)W(k) 1 = C+OWr-BWi= T2+CC----/ I \----C'= Re[ A + jC - (B - jO)W(k) 1 = A-(BWr+OWi)=A-T10---/ \---0'= Im[-A - jC - (B - jO)W(k) ] = -C+OWr-BWi= T2-Cend_bflyend_groupendJ)assmove x:(r2)+,xO y:(r6)+,yOmove x:(r1 )-,x1 y:(r5),y1move x:(r1 ),BdompymacsubaddlmpymacsubaddlnO,end_bfly-x1,xO,B B,x:(r1)yO,y1,B y:(r4),AA,BB,A x:(r1 )+,B B,x:(r5)+-x1,yO,B x:(rO),A A,y:(r4)+-xO,y1,B x:(r1 )-,x1B,AA,B A,x:(rO)+ y:(r5),y1move B,x:(r1 )+move#idata,rO;xO=Wi, yO=Wr;x1 =b,y1 =d;for pointer reason;nO bfly in this group;B=-bWi, PUT c' to x:b;B=dWr-bWi= T2, A=c;B= T2-c=d';A= T2+c=b', PUT d';B=-bWr, A=a, PUT b' to y:c;B=-bWr-dWi=-T1, x1=next b;A=a+T1=a';B=a-T1 =c', y1 =next d, PUT a';PUT last b';rO = ptr to a;the last pass converts bergland order to normal order by calling bergtablemove r7,r2 ;r2 points to real twiddlemove r2,r6 ;r6 points to imag twiddlemove rO,r4 r4 points to cmove #bergtable,r3;r3=pointer of bergland tablemove #(points/4)-1,n2 ;n2=group per pass -1move x:(r3)+,r7 ;get first indexmove x:(r3)+,r1 ;get second indexmove #2,n4Figure B-5 Real Input FFT Based on Glenn Bergland Algorithm (Sheet 6 of 8)

FirstGrouplnPassdo nO,FirstGrouplnPasssub yO, A x:(r1 ),xO y:(r5),Badd xO,B A,x:(r1)+ y:(r5),Asub xO,A x:(rO)+,B B,y:(r4)+add yO,B x:(rO)-,A A,y:(r5)+move B,x:(rO)+ y:(r4),yO;first group in a pass;A=a-c=c',B=d,xO=b,;B=d+b=b', A=d,PUT c' to x:b;A=d-b=d',B=a,PUT b' to y:c;B=a+c=a', A=next a,PUT d';yO=next c, PUT a'domovemoveluamoven2,end_groupr5,rOrO,r4(rO)+nO,r1r1,r5;rest groups in this pass;rO ptr to next group a;r4 ptr to next group c;r1 ptr to next group b;r5 ptr to next group dIntermediate Passes -- W(n) < 1A---\/---A'= Re[ A + jC + (B - jO)W(k) 1 = A+BWr+OWi=A+ T1B----'-L/----B'= Im[ A + jC - (B - jO)W(k) 1 = C+OWr-BWi= T2+CC----/ I \----C'= Re[ A + jC - (B - jO)W(k) 1 = A-(BWr+OWi)=A-T10---/ \---0'= Im[-A - jC - (B - jO)W(k) ] = -C+OWr-BWi= T2-Cend_bflyend_groupendJ)assmove x:(r2)+,xO y:(r6)+,yOmove x:(r1 )-,x1 y:(r5),y1move x:(r1 ),BdompymacsubaddlmpymacsubaddlnO,end_bfly-x1,xO,B B,x:(r1)yO,y1,B y:(r4),AA,BB,A x:(r1 )+,B B,x:(r5)+-x1,yO,B x:(rO),A A,y:(r4)+-xO,y1,B x:(r1 )-,x1B,AA,B A,x:(rO)+ y:(r5),y1move B,x:(r1 )+move#idata,rO;xO=Wi, yO=Wr;x1 =b,y1 =d;for pointer reason;nO bfly in this group;B=-bWi, PUT c' to x:b;B=dWr-bWi= T2, A=c;B= T2-c=d';A= T2+c=b', PUT d';B=-bWr, A=a, PUT b' to y:c;B=-bWr-dWi=-T1, x1=next b;A=a+T1=a';B=a-T1 =c', y1 =next d, PUT a';PUT last b';rO = ptr to a;the last pass converts bergland order to normal order by calling bergtablemove r7,r2 ;r2 points to real twiddlemove r2,r6 ;r6 points to imag twiddlemove rO,r4 r4 points to cmove #bergtable,r3;r3=pointer <strong>of</strong> bergland tablemove #(points/4)-1,n2 ;n2=group per pass -1move x:(r3)+,r7 ;get first indexmove x:(r3)+,r1 ;get second indexmove #2,n4Figure B-5 Real Input FFT Based on Glenn Bergland Algorithm (Sheet 6 <strong>of</strong> 8)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!