⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 df2.pas

📁 一个DIT-FFT源程序生成器的源程序。采用delphi编写。
💻 PAS
字号:
unit df2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Button2: TButton;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j,n,m:integer;
  sin1:real;
//  Filename:string;
  f:textfile;
begin
  m:=strtoint(Edit1.Text);
  n:=1;
  for i:=1 to m do   n:=2*n;
  if SaveDialog1.Execute then
  begin
//  Filename:=ExtractFilePath(Application.ExeName)+'2-DIT-FFT.ASM';
  Assignfile(f,SaveDialog1.FileName);
  Rewrite(f);
  Writeln(f,'*');
  Writeln(f,'*  TITL   COMPLEX, RADIX-2, FFT');
  Writeln(f,'*');
  Writeln(f,'*  GENERIC PROGRAM TO DO A RADIX-2 COMPLEX FFT COMPUTATION IN TMS320C30');
  Writeln(f,'*');
  Writeln(f,'*  THE COMPLEX DATA RESIDE IN INTERNAL MEMORY. THE COMPUTATION IS DONE');
  Writeln(f,'*  IN-PLACE,BUT THE RESULT IS MOVED TO ANOTHER MEMORY SECTION TO DEMONSTRATE');
  Writeln(f,'*  THE BIT-REVERSED ADDRESSING.');
  Writeln(f,'*');
  Writeln(f,'*  THE TWIDDLE FACTORS ARE SUPPLIED IN A TABLE PUT IN A .DATA SECTION.');
  Writeln(f,'*  THIS DATA IS INCLUDED IN A SEPARATE FILE TO PRESERVE THE GENERIC');
  Writeln(f,'*  NATURE OF THE PROGRAM. FOR THE SAME PURPOSE,THE SIZE OF THE FFT N');
  Writeln(f,'*  AND LOG2(N) ARE DEFINED IN A .GLOBL DIRECTIVE AND SPECIFIED DURING LINKING.');
  Writeln(f,'*');
  Writeln(f,'*');
  Writeln(f,'         .globl  FFT                 ;  Entry point for execution');
  Writeln(f,'         .globl  N                   ;  FFT size');
  Writeln(f,'         .globl  M                   ;  LOG2(N)');
  Writeln(f,'         .globl  SINE                ;  Address of sine table');
  Writeln(f);
  Writeln(f,'INP      .usect  "IN",',n*8,'           ;  Memory with input data');
  Writeln(f,'         .BSS    OUTP,',n*8,'           ;  Memory with output data');
  Writeln(f);
  Writeln(f,'         .text');
  Writeln(f);
  Writeln(f,'*  INITIALIZE');
  Writeln(f);
  Writeln(f,'FFTSIZ   .word   N');
  Writeln(f,'LOGFFT   .word   M');
  Writeln(f,'SINTAB   .word   SINE');
  Writeln(f,'INPUT    .word   INP');
  Writeln(f,'OUTPUT   .word   OUTP');
  Writeln(f);
  Writeln(f,'FFT:     LDP     FFTSIZ              ;  Command to load data page pointer');
  Writeln(f,'         LDI     @FFTSIZ,IR1');
  Writeln(f,'         LSH     -2,IR1              ;');
  Writeln(f,'         LDI     0,AR6');
  Writeln(f,'         LDI     @FFTSIZ,IR0');
  Writeln(f,'         LSH     1,IR0');
  Writeln(f,'         LDI     @FFTSIZ,R7');
  Writeln(f,'         LDI     1,AR7');
  Writeln(f,'         LDI     1,AR5');
  Writeln(f);
  Writeln(f,'*  OUTER LOOP');
  Writeln(f);
  Writeln(f,'LOOP:    NOP     *++AR6(1)           ;  Current FFT stage');
  Writeln(f,'         LDI     @INPUT,AR0          ;  AR0 points to X(I)');
  Writeln(f,'         ADDI    R7,AR0,AR2          ;  AR2 points to X(L)');
  Writeln(f,'         LDI     AR7,RC');
  Writeln(f,'         SUBI    1,RC                ;  RC should be one less than desired #');
  Writeln(f);
  Writeln(f,'*  FIRST LOOP');
  Writeln(f);
  Writeln(f,'         RPTB    BLK1');
  Writeln(f,'         ADDF    *AR0,*AR2,R0        ;  R0=X(I)+X(L)');
  Writeln(f,'         SUBF    *AR2++,*AR0++,R1');
  Writeln(f,'         ADDF    *AR2,*AR0,R2');
  Writeln(f,'         SUBF    *AR2,*AR0,R3');
  Writeln(f,'         STF     R2,*AR0--');
  Writeln(f,'||       STF     R3,*AR2--');
  Writeln(f,'BLK1     STF     R0,*AR0++(IR0)');
  Writeln(f,'||       STF     R1,*AR2++(IR0)');
  Writeln(f);
  Writeln(f,'*');
  Writeln(f);
  Writeln(f);
  Writeln(f,'         CMPI    @LOGFFT,AR6');
  Writeln(f,'         BZD     END');
  Writeln(f);
  Writeln(f,'*  MAIN INNER LOOP');
  Writeln(f);
  Writeln(f,'         LDI     2,AR1');
  Writeln(f,'         LDI     @SINTAB,AR4');
  Writeln(f,'INLOP:   ADDI    AR5,AR4');
  Writeln(f,'         LDI     AR1,AR0');
  Writeln(f,'         ADDI    2,AR1');
  Writeln(f,'         ADDI    @INPUT,AR0');
  Writeln(f,'         ADDI    R7,AR0,AR2');
  Writeln(f,'         LDI     AR7,RC');
  Writeln(f,'         SUBI    1,RC');
  Writeln(f,'         LDF     *AR4,R6');
  Writeln(f);
  Writeln(f,'*  SECOND LOOP');
  Writeln(f);
  Writeln(f,'         RPTB   BLK2');
  Writeln(f,'         SUBF   *AR2,*AR0,R2');
  Writeln(f,'         SUBF   *+AR2,*+AR0,R1');
  Writeln(f,'*');
  Writeln(f,'         MPYF   R2,R6,R0');
  Writeln(f,'||       ADDF   *+AR2,*+AR0,R3');
  Writeln(f,'*');
  Writeln(f,'         MPYF   R1,*+AR4(IR1),R3');
  Writeln(f,'||       STF    R3,*+AR0');
  Writeln(f,'         SUBF   R0,R3,R4');
  Writeln(f,'         MPYF   R1,R6,R0');
  Writeln(f,'||       ADDF   *AR2,*AR0,R3');
  Writeln(f,'         MPYF   R2,*+AR4(IR1),R3');
  Writeln(f,'||       STF    R3,*AR0++(IR0)');
  Writeln(f,'*');
  Writeln(f,'         ADDF   R0,R3,R5');
  Writeln(f,'BLK2     STF    R5,*AR2++(IR0)');
  Writeln(f,'         STF    R4,*+AR2');
  Writeln(f);
  Writeln(f,'         CMPI   R7,AR1');
  Writeln(f,'         BNE    INLOP');
  Writeln(f);
  Writeln(f,'         LSH    1,AR7');
  Writeln(f);
  Writeln(f,'         BRD    LOOP');
  Writeln(f,'         LSH    1,AR5');
  Writeln(f,'         LDI    R1,IR0');
  Writeln(f,'         LSH    -1,R7');
  Writeln(f,'*  STORE RESULT OUT USING BIT-REVERSED ADDRESSING');
  Writeln(f);
  Writeln(f,'END:     LDI    @FFTSIZ,RC');
  Writeln(f,'         SUBI   1,RC');
  Writeln(f,'         LDI    @FFTSIZ,IR0');
  Writeln(f,'         LDI    2,IR1');
  Writeln(f,'         LDI    @INPUT,AR0');
  Writeln(f,'         LDI    @OUTPUT,AR1');
  Writeln(f,'         RPTB   BITRV');
  Writeln(f,'         LDF    *+AR0(1),R0');
  Writeln(f,'||       LDF    *AR0++(IR0)B,R1');
  Writeln(f,'BITRV    STF    R0,*+AR1(1)');
  Writeln(f,'||       STF    R1,*AR1++(IR1)');
  Writeln(f);
  Writeln(f,'SELF     BR     SELF');
  Writeln(f,'         .end');
  Writeln(f,'*');
  Writeln(f,'*TITL  TABLE WITH TWIDDLE FACTORS FOR A ',n,'-POINT FFT');
  Writeln(f,'*');
  Writeln(f,'*  FILE TO BE LINKED WITH THE SOURCE CODE FOR A ',n,'-POINT,RADIX-2 FFT.');
  for i:=0 to 2 do   Writeln(f);
  Writeln(f,'         .globl   SINE');
  Writeln(f,'         .globl   N');
  Writeln(f,'         .globl   M');
  Writeln(f);
  Writeln(f,'N        .set     ',n);
  Writeln(f,'M        .set     ',m);
  Writeln(f);
  Writeln(f,'         .data');
  Writeln(f);
  Writeln(f,'SINE');
  j:=round(n/4-1);
  for i:=0 to j do
    begin
      sin1:=sin(2*i*pi/n);
      Writeln(f,'         .float   ',sin1:1:6);
    end;
  Writeln(f,'COSINE');
  for i:=j to n-1 do
    begin
      sin1:=sin(2*i*pi/n);
      Writeln(f,'         .float   ',sin1:1:6);
    end;
  Closefile(f);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Close;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -