Add real ADSP-2191 assembly examples + open21xx assembler test
This commit is contained in:
@@ -0,0 +1,188 @@
|
||||
****************************************************************************
|
||||
|
||||
Cfft2_2191_Px.asm Example 2191 complex radix-2 FFT Program
|
||||
|
||||
Analog Devices, Inc.
|
||||
DSP Division
|
||||
Three Technology Way
|
||||
P.O. Box 9106
|
||||
Norwood, MA 02062
|
||||
|
||||
23-JUNE-2001 BJM
|
||||
|
||||
This directory contains an example ADSP-2191 single-core subroutine
|
||||
that implements radix-2 FFT of length 64 or greater on input data x(n). A
|
||||
detailed discussion of the complex radix-2 FFT algorithm can be found in the
|
||||
source header comments of "CFFT2_2191.ASM".
|
||||
|
||||
Files contained in this directory:
|
||||
|
||||
CFFT2_2191.ASM ADSP-2191 source for a complex radix-2 FFT example.
|
||||
ADSP-2191.LDF Linker description file for the CFFT2_2191.ASM example
|
||||
CFFT2_2191.DPJ The VisualDSP project file for the complex radix-2 FFT.
|
||||
INPUTREAL.DAT Real part of complex input data
|
||||
INPUTIMAG.DAT Imaginary part of complex input data
|
||||
TWID_SIN.DAT Sin array FFT twiddle factors
|
||||
TWID_COS.DAT Cos array FFT twiddle factors
|
||||
|
||||
_________________________________________________________________
|
||||
|
||||
CONTENTS
|
||||
|
||||
I. FUNCTION/ALGORITHM DESCRIPTION
|
||||
II. IMPLEMENTATION DESCRIPTION
|
||||
III. DESCRIPTION OF INPUT DATA
|
||||
1. Input Samples
|
||||
2. Twiddle factors
|
||||
|
||||
_______________________________________________________________
|
||||
|
||||
I. FUNCTION/ALGORITHM DESCRIPTION
|
||||
|
||||
The program CFFT2_2191.ASM is an implementation of a complex input radix-2 DIT
|
||||
FFT.
|
||||
|
||||
This radix-2 FFT routine will take data lengths that are any power of two (>= 64
|
||||
points).
|
||||
|
||||
|
||||
II. IMPLEMENTATION DESCRIPTION
|
||||
|
||||
This FFT implementation takes advantage of the architecture of the
|
||||
ADSP-2191.
|
||||
|
||||
The following table of variables and their location is presented, where "N" is
|
||||
the length of the FFT:
|
||||
|
||||
Input Output
|
||||
Routine DM PM DM PM
|
||||
-------------------------------------------------------------------------------
|
||||
CFFT2_2191:
|
||||
inputreal[N] refft[N] inputreal[N]
|
||||
inputimag[N]
|
||||
twid_imag[N/2]
|
||||
twid_real[N/2]
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
inputreal[N] Real part of normal-ordered complex input stored in DM
|
||||
inputimag[N] Imaginary part of normal-ordered complex input stored in PM
|
||||
refft[N] Real part of frequency domain data (fft output) stored in DM
|
||||
twid_imag[N] Sin table stored in DM
|
||||
twid_real[N] Cos table stored in DM
|
||||
|
||||
|
||||
|
||||
III. DESCRIPTION OF INPUT DATA
|
||||
|
||||
1. INPUT SAMPLES:
|
||||
-----------------
|
||||
|
||||
This FFT routine expects input data which conforms to the following criteria:
|
||||
|
||||
Gather input data such that an array of complex fixed point values are
|
||||
arranged in the following order:
|
||||
|
||||
inputreal[N]:
|
||||
real(0)
|
||||
real(1)
|
||||
real(2)
|
||||
etc...
|
||||
|
||||
inputimag[N]:
|
||||
imag(0)
|
||||
imag(1)
|
||||
imag(2)
|
||||
etc...
|
||||
|
||||
|
||||
2. TWIDDLE FACTOR DATA:
|
||||
-----------------------
|
||||
|
||||
This FFT routine expects N/2 fixed point values of one half period of a
|
||||
sine waveform and N/2 fixed point values of a one half period of a cosine
|
||||
waveform to be used as twiddle factors. These twiddles should be in
|
||||
a bit-reversed order.
|
||||
|
||||
Generate twiddle data such that an array of twiddle factor values are
|
||||
arranged in the following order:
|
||||
|
||||
cos(0)
|
||||
cos(1)
|
||||
cos(2)
|
||||
...
|
||||
...
|
||||
...
|
||||
cos(N/2)
|
||||
|
||||
sin(0)
|
||||
sin(1)
|
||||
sin(2)
|
||||
...
|
||||
...
|
||||
...
|
||||
sin(N/2)
|
||||
|
||||
Then, bit reverse these sin and cosine twiddle arrays. This can be done by
|
||||
writing a small bit reversal program which utilizes the bit reversed
|
||||
addressing mode of DAG1 of the ADSP-2191.
|
||||
|
||||
The bit reversed array of twiddle factor values are arranged in the following
|
||||
order:
|
||||
|
||||
twid_real[N]:
|
||||
|
||||
cos(0)
|
||||
cos(N/4)
|
||||
cos(N/8)
|
||||
...
|
||||
...
|
||||
...
|
||||
cos(N/2)
|
||||
|
||||
twid_imag[N]:
|
||||
|
||||
sin(0
|
||||
sin(N/4)
|
||||
sin(N/8)
|
||||
...
|
||||
...
|
||||
...
|
||||
sin(N/2)
|
||||
|
||||
|
||||
|
||||
2191 - Complex Radix-2 FFT (Cfft2_2191.asm)
|
||||
|
||||
In order to perform FFTs of different lengths, the following code changes are
|
||||
necessary:
|
||||
(The rules/relations described in the source code must be followed!)
|
||||
|
||||
- Modify N to reflect the length of the FFT to be performed (N must be a power of 2)
|
||||
- Modify log2n such that STAGES = (log2(N))
|
||||
- Mofify Mod_Value such that Mod_Value = ( 2^(16-LOG2N) )
|
||||
- Modifiy Refft_Bitrev and Inputreal_Bitrev to represent the bit reversed
|
||||
address of the output real and imaginary buffers
|
||||
|
||||
Cfft2_2191.asm code excerpt shown below:
|
||||
|
||||
/**********The constants below must be changed for different length FFTs*******
|
||||
|
||||
N = number of points in the FFT, must be a power of 2
|
||||
log2N = log2(N)
|
||||
Mod_Value = 2^(16-LOG2N)
|
||||
Refft_Bitrev = bitrev addr of output real in dm
|
||||
Inputreal_Bitrev = bitrev addr of output imag in dm
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
/* Set Constants for N-point FFT */
|
||||
#define N 1024
|
||||
#define Ndiv2 (N/2)
|
||||
#define log2N 10
|
||||
#define Mod_Value 64
|
||||
#define Refft_Bitrev 0x0001
|
||||
#define Inputreal_Bitrev 0x0009
|
||||
|
||||
|
||||
Reference in New Issue
Block a user