Voice changer

What are you developing?
User avatar
Pito
Posts: 1627
Joined: Sat Mar 26, 2016 3:26 pm
Location: Rapa Nui

Re: Voice changer

Post by Pito » Mon Jun 13, 2016 7:47 am

Here are some examples for ADC and DAC stuff (via DMA) for experts (I've taken the code ADC/TIM1 example from there):

http://elk.informatik.fh-augsburg.de/pu ... mples.html
Pukao Hats Cleaning Services Ltd.

racemaniac
Posts: 618
Joined: Sat Nov 07, 2015 9:09 am

Re: Voice changer

Post by racemaniac » Mon Jun 13, 2016 7:55 am

Pito wrote:Here are some examples for ADC and DAC stuff (via DMA) for experts (I've taken the code ADC/TIM1 example from there):

http://elk.informatik.fh-augsburg.de/pu ... mples.html
i quickly skimmed the readme of one of the DAC examples, and it's indeed the same as the ADC, you can have them triggered by a timer, and set the rate like that :).
anyone got some time to work this out in code? XD

User avatar
RogerClark
Posts: 7447
Joined: Mon Apr 27, 2015 10:36 am
Location: Melbourne, Australia
Contact:

Re: Voice changer

Post by RogerClark » Tue Jun 14, 2016 10:31 pm

Guys

At the moment it looks like a FFT based voice changer is dead in the water, because I would need to write the Inverse FFT in assembler myself. Which is impractical as I have no knowledge of FFTs or ARM assembler.

However, technically it does seem feasible that it would work on the F103.

Its just a shame that none of the old Inverse FFT code that @pito found, will compile on modern versions of gcc.
i.e there is a version of FFT and IFFT which dates to 2008, which looks like it would do the job, but it won't compile ( assemble ) with gcc 4.4, as strangely there are problems with the assembler instructions missing paramaters.

I wonder if there is an ARM users forum somewhere, which I could post the code to, and try to find out how to update it.
But at the moment I'm stumped...

User avatar
RogerClark
Posts: 7447
Joined: Mon Apr 27, 2015 10:36 am
Location: Melbourne, Australia
Contact:

Re: Voice changer

Post by RogerClark » Tue Jun 14, 2016 10:59 pm

Just for reference purposes

Here is the FFT that @pito found, but which doesn't compile :-(

FFTCM3.S

Code: Select all

/* Complex 16 bit Radix 4 FFT and Inverse FFT for Cortex-M3 version 1.0
--------------------------------------------------------------------------
(c) 2008 Ivan Mellen
--------------------------------------------------------------------------
Free Personal, Non-Commercial Use License.
The Software is licensed to you for your personal, NON-COMMERCIAL USE.
If you have questions about this license or would like a different license
please email : imellen(at)embeddedsignals(dot)com

- Radix 4 FFT - supported sizes: N=4,16,64,256,1024,4096
- N>4096 possible with custom coefficients
- 16 bit complex arithmetic, 1Q15 coefficients
- input data remains unmodified
- decimation-in-time with auto scale after each stage - no overflow
- GCC version (Code Sourcery G++ Lite 2007q3-53), requires C preprocessor
- hand optimized THUMB2 assembly for Cortex-M3 (e.g. STM32)
- code optimized with 64 bit flash prefetch and branch speculation in mind
- single function for multiple FFT sizes
- functions are both "C" and assembly callable

Modifications in version 2.0:
- Constant size FFT (faster execution, but N is constant)
- purely real input (almost 2x faster)
- radix 2 stage (for N= 8, 32, 128, 512, 2048, 8192...)
- RAM based coefficients with size optimized generator (for high flash latency)
- speed optimized windowing function(Bartlett,Blackman, Hamming, Hanning, Kaiser)


STM32 FFT benchmarks in CPU cycles based on real hardware measurements:

N - FFT size
L - Flash latency
F,R - coefficients in Flash or RAM

N L=0 F/R L=1 F L=1 r* L=2 F* L=2 r* ARM7TDMI ARM9E dsPIC
64 3575 3797 3636 4588 4007 - 2701 3739
256 19425 20685 19743 25144 21685 38461-43920 13740 19055
1024 98541 105113 100074 128070 109634 - 68534 N/A

Notes:ARM9E - DSP enhanced arm9 core, based on STR910 @96 MHz, RAM coefficients
dsPIC - dsPIC30x / dsPIC33x - results based on Microchip's DSP library
ARM7TDMI - 3rd party, web based benchmark results
*STM32 results for latency L=2 or - source compiled with LATENCY2 defined

IFFT benchmarks (calculated and verified by measurement):
add 6+N/4 to FFT benchmark {22,70,262} for N={64,256,1024}

Code size:
FFT only: 480 bytes
FFT+IFFT: 682 bytes

Coefficient size (Flash or RAM):
N: 16 64 256 1024 4096
size: 48 240 1008 4080 16368 bytes

------------------------------------------------------------------------------
Usage example: add this file to your project. In C code:

//declare functions
void fftR4(short *y, short *x, int N);
void ifftR4(short *y, short *x, int N);

// prepare test input data
short x[512]; // input data 16 bit, 4 byte aligned x0r,x0i,x1r,x1i,....
short y[512]; // output data 16 bit,4 byte aligned y0r,y0i,y1r,y1i,....
short z[512]; // same format...

for (i=0;i
for (i=0;i
{ x[i+0]=16384; x[i+2]=16384; x[i+4]=-16384; x[i+6]=-16384;}
// x = [ 16384,16384,-16384,-16384,16384,...] 1/4 Fsampling

//call functions
fftR4(y, x, 256); // y is in frequency domain y[128]=
ifftR4(z, y, 256); // z should be x/N + noise introduced by 16 bit truncating


// expected results:
//y[128]is 8191; y[129] is -8190 y[384]is 8191; y[385]is 8191 rest 0 + noise
//z[2n] is 64 64 -64 -64 .. z[2n+1] is 0 all +- 1 (noise)
------------------------------------------------------------------------------
*/

// This file contains two functions :

// void fftR4(short *y, short *x, int N); // radix 4 FFT
// void ifftR4(short *y, short *x, int N); // radix 4 inverse FFT

.syntax unified
.thumb
.global fftR4
.global ifftR4

//#define LATENCY2 //comment this line if flash latency

#define y R0 // short *y -output complex array
#define x R1 // short *x -input complex array
#define N R2 // int N - number of samples 4,16,64,256,1024,4096

#define c R0 // short *c - coefficient array
#define Bl R2 // the number of blocks
#define R R3 // the number of samples in each block
#define x0r R4
#define x0i R5
#define x1r R6
#define x1i R7
#define x2r R8
#define x2i R9
#define x3r R10
#define x3i R11
#define y3r x3i
#define y3i x3r
#define tmp0 R12 // temporary0
#define tmp1 R14 // temporary1

// complex load, x=[a], a+=offset in register data from RAM (0 wait states)

.macro LOADC dr,di, a, offset //5 cycles
ldrsh di, [a, #2]
ldrsh dr, [a] //ldrsh $x._r, [$a], $offset
adds a, offset
.endm

// cofficient complex load, c=[a], a=a+ 4 ;Wk from FLASH (1-4 wait states)
.macro LOADCF xr,xi, a //4 cycles
ldr xr, [a], #4 //read 2 shorts as 32 bits
asr xi, xr,#16 //im extract
sxth xr,xr //re extract
.endm

// coefficient complex load, c=[a], a=a+ 4 ; Wk from RAM (0 wait states)
// .macro LOADCF xr,xi, a //4 (or 3?) cycles
// ldrsh xi, [$a, #2]
// ldrsh xr, [$a],#4 //ldrsh not pipelined in STM32, macro not used
// .endm

// complex load, xc=[a], a=a-register offset
.macro LOADCMi xr,xi, a, offset //5 cycles
ldrsh xi, [a, #2]
ldrsh xr, [a]
subs a, offset //ldrsh xr, [$a], offset
.endm

// complex store, [a]=x,c a=a+ immediate offset
.macro STRC xr,xi, a, offset //2 cycles
strh xi, [a, #2]
strh xr, [a], offset
.endm

// complex store, [a]=x, a+=offset in register
.macro STRCR xr,xi, a, offset //3 cycles
strh xi, [a, #2]
strh xr, [a]
adds a, offset
.endm


// Multiply Complex Conjugate a=(xr+i*xi)*(cr-i*ci)
// x = xr + i*xi
// c = cr + i*ci ;6 cycles
.macro MULCC ar,ai, xr,xi,cr,ci
mul tmp0, xi, cr // tmp0=xi*cr
mul tmp1, xi, ci // tmp1=xi*ci
mls ai, xr, ci,tmp0 // ai=tmp0-xr*ci = xi*cr - xr*ci
mla ar, xr, cr,tmp1 // ar=tmp1+xr*cr = xr*cr + xi*ci
.endm


// complex Fast Fourier Transform - Four point; scale with shift s
.macro BFFT4 s

add x2r, x2r, x3r // (x2,x3) = (x2+x3, x2-x3)
add x2i, x2i, x3i
sub x3r, x2r, x3r, lsl#1
sub x3i, x2i, x3i, lsl#1

mov x0r, x0r, asr#2 // (x0,x1) = (x0+(x1>>s), x0-(x1>>s))/4
mov x0i, x0i, asr#2
add x0r, x0r, x1r, asr#(2+s)
add x0i, x0i, x1i, asr#(2+s)
sub x1r, x0r, x1r, asr#(1+s)
sub x1i, x0i, x1i, asr#(1+s)

add x0r, x0r, x2r, asr#(2+s) // (x0,x2) = (x0+(x2>>s)/4, x0-(x2>>s)/4)
add x0i, x0i, x2i, asr#(2+s)
sub x2r, x0r, x2r, asr#(1+s)
sub x2i, x0i, x2i, asr#(1+s)

add x1r, x1r, x3i, asr#(2+s) // (x1,y3)=(x1-i*(x3>>s)/4, x1+i*(x3>>s)/4)
sub x1i, x1i, x3r, asr#(2+s)
sub y3r, x1r, x3i, asr#(1+s)
add y3i, x1i, x3r, asr#(1+s)
.endm



//----------------------------------------------------------------------------
// inverse FFT
// void ifftR4(short *y, short *x, int N)
// custom first stage reorders input data: x(n)=x(N-n) n=0:N-1 x(N)=x(0)
// extra cost to fft: 6+N/4 cycles
.thumb_func
.align 3 //speed optimization in STM32
nop.n //alignment optimization

ifftR4: stmfd sp!, {r4-r11, lr}
mov tmp0, #0 // bit reversed counter
movs tmp1,N //; first tmp1=N
.word 0xF3A2FA92 //RBIT R3,R2 //RBIT R,N
lsl R,#3

adds tmp1, x, tmp1, lsl#2 // tmp1=&x[tmp1==N]
ldrsh x0i, [x, #2] // replaces C_LDRmi x[N] by _LDRmi x[0]
ldrsh x0r, [x]
subs tmp1,N //tmp1 still needs to be decremented for 2nd C_LDRmi
b L2 // continue with second load

ifirstStage:
// first stage load and bit reverse
adds tmp1, x, tmp1, lsl#2 // tmp1=&x[tmp1]
LOADCMi x0r,x0i, tmp1, N
L2: LOADCMi x2r,x2i, tmp1, N
LOADCMi x1r,x1i, tmp1, N
LOADCMi x3r,x3i, tmp1, N
BFFT4 0
STRC x0r,x0i, y, #4
STRC x1r,x1i, y, #4
STRC x2r,x2i, y, #4
STRC y3r,y3i, y, #4

adds tmp0,R
.word 0xFEACFA9C // rbit r14,r12//rbit tmp1,tmp0
sub tmp1,N,tmp1 //tmp1=N-tmp1
bne ifirstStage // loop if count non zero
b firstStageFinished
// rest same as normal fft

//----------------------------------------------------------------------------
// void fftR4(short *y, short *x, int N)
.thumb_func
fftR4: stmfd sp!, {r4-r11, lr}
mov tmp0, #0 // bit reversed counter
mov tmp1, #0
.word 0xF3A2FA92 //rbit R3,R2 //RBIT R,N
lsl R,#3

firstStage:
// first stage load and bit reverse
adds tmp1, x, tmp1, lsl#2 // tmp1=&x[tmp1] and clear carry
LOADC x0r, x0i, tmp1, N
LOADC x2r,x2i, tmp1, N
LOADC x1r,x1i, tmp1, N
LOADC x3r,x3i, tmp1, N
BFFT4 0
STRC x0r,x0i, y, #4
STRC x1r,x1i, y, #4
STRC x2r,x2i, y, #4
STRC y3r,y3i, y, #4

adds tmp0,R
.word 0xFEACFA9C // rbit r14,r12//rbit tmp1,tmp0
bne firstStage // loop if count non zero

firstStageFinished: // finished the first stage
sub x, y, N, lsl #2 // x = working buffer
mov R, #16
lsrs Bl,N,4
it eq
ldmeq sp!, {r4-r11, pc} // for N==4 return from function
adr c, coef_table //change if table in RAM

nextStage:
// Bl = the number of blocks
// R = the number of samples in each block

#ifdef LATENCY2 // narrow/wide versions to optimize flash pre-fetch
stm sp!, {x, Bl}
add tmp0, R, R, lsl#1
add.n x, x, tmp0
#else
stmfd sp!, {x, Bl}
add tmp0, R, R, lsl#1
add.w x, x, tmp0
#endif
sub Bl, Bl, #1<
nextBlock:
add Bl, Bl, R, lsl#(16-2)

nextButterfly:
// Bl=((number butterflies left-1)<
LOADCMi x0r,x0i, x, R
LOADCF x3r,x3i, c
MULCC x3r,x3i, x0r,x0i, x3r,x3i
LOADCMi x0r,x0i, x, R
LOADCF x2r,x2i, c
MULCC x2r,x2i, x0r,x0i, x2r,x2i
LOADCMi x0r,x0i, x, R
LOADCF x1r,x1i, c
MULCC x1r,x1i, x0r,x0i, x1r,x1i
LOADC x0r,x0i, x, #0
BFFT4 15 // coefficients are 1Q15
STRCR x0r,x0i, x, R
STRCR x1r,x1i, x, R
STRCR x2r,x2i, x, R
STRC y3r,y3i, x, #4
subs Bl, Bl, #1<
bge nextButterfly
add tmp0, R, R, lsl#1
add x, x, tmp0
sub Bl, Bl, #1
movs tmp1, Bl, lsl#16
it ne
subne c, c, tmp0
bne nextBlock

pop {r1-r2} //LDM sp!, {x, Bl}
mov R, R, lsl#2 // block size *=4
lsrs Bl,Bl,2 //# of blocks /=4
bne nextStage
ldmfd sp!, {r4-r11, pc} //return

.align 2 //32 bit access acceleration

// Note: unused portion of coef_table can be commented to reduce size
coef_table:
// FFT twiddle table of triplets E(3t), E(t), E(2t)
// Where E(t)=cos(t)+i*sin(t) at 1Q15
// N=16 t=2*PI*k/N for k=0,1,2,..,N/4-1
.hword 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000
.hword 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82
.hword 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff
.hword 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82
// N=64 t=2*PI*k/N for k=0,1,2,..,N/4-1
.hword 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000
.hword 0x7a7d,0x2528, 0x7f62,0x0c8c, 0x7d8a,0x18f9
.hword 0x6a6e,0x471d, 0x7d8a,0x18f9, 0x7642,0x30fc
.hword 0x5134,0x62f2, 0x7a7d,0x2528, 0x6a6e,0x471d
.hword 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82
.hword 0x0c8c,0x7f62, 0x70e3,0x3c57, 0x471d,0x6a6e
.hword 0xe707,0x7d8a, 0x6a6e,0x471d, 0x30fc,0x7642
.hword 0xc3a9,0x70e3, 0x62f2,0x5134, 0x18f9,0x7d8a
.hword 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff
.hword 0x8f1d,0x3c57, 0x5134,0x62f2, 0xe707,0x7d8a
.hword 0x8276,0x18f9, 0x471d,0x6a6e, 0xcf04,0x7642
.hword 0x809e,0xf374, 0x3c57,0x70e3, 0xb8e3,0x6a6e
.hword 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82
.hword 0x9d0e,0xaecc, 0x2528,0x7a7d, 0x9592,0x471d
.hword 0xb8e3,0x9592, 0x18f9,0x7d8a, 0x89be,0x30fc
.hword 0xdad8,0x8583, 0x0c8c,0x7f62, 0x8276,0x18f9
// N=256 t=2*PI*k/N for k=0,1,2,..,N/4-1
.hword 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000
.hword 0x7fa7,0x096b, 0x7ff6,0x0324, 0x7fd9,0x0648
.hword 0x7e9d,0x12c8, 0x7fd9,0x0648, 0x7f62,0x0c8c
.hword 0x7ce4,0x1c0c, 0x7fa7,0x096b, 0x7e9d,0x12c8
.hword 0x7a7d,0x2528, 0x7f62,0x0c8c, 0x7d8a,0x18f9
.hword 0x776c,0x2e11, 0x7f0a,0x0fab, 0x7c2a,0x1f1a
.hword 0x73b6,0x36ba, 0x7e9d,0x12c8, 0x7a7d,0x2528
.hword 0x6f5f,0x3f17, 0x7e1e,0x15e2, 0x7885,0x2b1f
.hword 0x6a6e,0x471d, 0x7d8a,0x18f9, 0x7642,0x30fc
.hword 0x64e9,0x4ec0, 0x7ce4,0x1c0c, 0x73b6,0x36ba
.hword 0x5ed7,0x55f6, 0x7c2a,0x1f1a, 0x70e3,0x3c57
.hword 0x5843,0x5cb4, 0x7b5d,0x2224, 0x6dca,0x41ce
.hword 0x5134,0x62f2, 0x7a7d,0x2528, 0x6a6e,0x471d
.hword 0x49b4,0x68a7, 0x798a,0x2827, 0x66d0,0x4c40
.hword 0x41ce,0x6dca, 0x7885,0x2b1f, 0x62f2,0x5134
.hword 0x398d,0x7255, 0x776c,0x2e11, 0x5ed7,0x55f6
.hword 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82
.hword 0x2827,0x798a, 0x7505,0x33df, 0x55f6,0x5ed7
.hword 0x1f1a,0x7c2a, 0x73b6,0x36ba, 0x5134,0x62f2
.hword 0x15e2,0x7e1e, 0x7255,0x398d, 0x4c40,0x66d0
.hword 0x0c8c,0x7f62, 0x70e3,0x3c57, 0x471d,0x6a6e
.hword 0x0324,0x7ff6, 0x6f5f,0x3f17, 0x41ce,0x6dca
.hword 0xf9b8,0x7fd9, 0x6dca,0x41ce, 0x3c57,0x70e3
.hword 0xf055,0x7f0a, 0x6c24,0x447b, 0x36ba,0x73b6
.hword 0xe707,0x7d8a, 0x6a6e,0x471d, 0x30fc,0x7642
.hword 0xdddc,0x7b5d, 0x68a7,0x49b4, 0x2b1f,0x7885
.hword 0xd4e1,0x7885, 0x66d0,0x4c40, 0x2528,0x7a7d
.hword 0xcc21,0x7505, 0x64e9,0x4ec0, 0x1f1a,0x7c2a
.hword 0xc3a9,0x70e3, 0x62f2,0x5134, 0x18f9,0x7d8a
.hword 0xbb85,0x6c24, 0x60ec,0x539b, 0x12c8,0x7e9d
.hword 0xb3c0,0x66d0, 0x5ed7,0x55f6, 0x0c8c,0x7f62
.hword 0xac65,0x60ec, 0x5cb4,0x5843, 0x0648,0x7fd9
.hword 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff
.hword 0x9f14,0x539b, 0x5843,0x5cb4, 0xf9b8,0x7fd9
.hword 0x9930,0x4c40, 0x55f6,0x5ed7, 0xf374,0x7f62
.hword 0x93dc,0x447b, 0x539b,0x60ec, 0xed38,0x7e9d
.hword 0x8f1d,0x3c57, 0x5134,0x62f2, 0xe707,0x7d8a
.hword 0x8afb,0x33df, 0x4ec0,0x64e9, 0xe0e6,0x7c2a
.hword 0x877b,0x2b1f, 0x4c40,0x66d0, 0xdad8,0x7a7d
.hword 0x84a3,0x2224, 0x49b4,0x68a7, 0xd4e1,0x7885
.hword 0x8276,0x18f9, 0x471d,0x6a6e, 0xcf04,0x7642
.hword 0x80f6,0x0fab, 0x447b,0x6c24, 0xc946,0x73b6
.hword 0x8027,0x0648, 0x41ce,0x6dca, 0xc3a9,0x70e3
.hword 0x800a,0xfcdc, 0x3f17,0x6f5f, 0xbe32,0x6dca
.hword 0x809e,0xf374, 0x3c57,0x70e3, 0xb8e3,0x6a6e
.hword 0x81e2,0xea1e, 0x398d,0x7255, 0xb3c0,0x66d0
.hword 0x83d6,0xe0e6, 0x36ba,0x73b6, 0xaecc,0x62f2
.hword 0x8676,0xd7d9, 0x33df,0x7505, 0xaa0a,0x5ed7
.hword 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82
.hword 0x8dab,0xc673, 0x2e11,0x776c, 0xa129,0x55f6
.hword 0x9236,0xbe32, 0x2b1f,0x7885, 0x9d0e,0x5134
.hword 0x9759,0xb64c, 0x2827,0x798a, 0x9930,0x4c40
.hword 0x9d0e,0xaecc, 0x2528,0x7a7d, 0x9592,0x471d
.hword 0xa34c,0xa7bd, 0x2224,0x7b5d, 0x9236,0x41ce
.hword 0xaa0a,0xa129, 0x1f1a,0x7c2a, 0x8f1d,0x3c57
.hword 0xb140,0x9b17, 0x1c0c,0x7ce4, 0x8c4a,0x36ba
.hword 0xb8e3,0x9592, 0x18f9,0x7d8a, 0x89be,0x30fc
.hword 0xc0e9,0x90a1, 0x15e2,0x7e1e, 0x877b,0x2b1f
.hword 0xc946,0x8c4a, 0x12c8,0x7e9d, 0x8583,0x2528
.hword 0xd1ef,0x8894, 0x0fab,0x7f0a, 0x83d6,0x1f1a
.hword 0xdad8,0x8583, 0x0c8c,0x7f62, 0x8276,0x18f9
.hword 0xe3f4,0x831c, 0x096b,0x7fa7, 0x8163,0x12c8
.hword 0xed38,0x8163, 0x0648,0x7fd9, 0x809e,0x0c8c
.hword 0xf695,0x8059, 0x0324,0x7ff6, 0x8027,0x0648
// N=1024 t=2*PI*k/N for k=0,1,2,..,N/4-1
.hword 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000
.hword 0x7ffa,0x025b, 0x7fff,0x00c9, 0x7ffe,0x0192
.hword 0x7fea,0x04b6, 0x7ffe,0x0192, 0x7ff6,0x0324
.hword 0x7fce,0x0711, 0x7ffa,0x025b, 0x7fea,0x04b6
.hword 0x7fa7,0x096b, 0x7ff6,0x0324, 0x7fd9,0x0648
.hword 0x7f75,0x0bc4, 0x7ff1,0x03ed, 0x7fc2,0x07d9
.hword 0x7f38,0x0e1c, 0x7fea,0x04b6, 0x7fa7,0x096b
.hword 0x7ef0,0x1073, 0x7fe2,0x057f, 0x7f87,0x0afb
.hword 0x7e9d,0x12c8, 0x7fd9,0x0648, 0x7f62,0x0c8c
.hword 0x7e3f,0x151c, 0x7fce,0x0711, 0x7f38,0x0e1c
.hword 0x7dd6,0x176e, 0x7fc2,0x07d9, 0x7f0a,0x0fab
.hword 0x7d63,0x19be, 0x7fb5,0x08a2, 0x7ed6,0x113a
.hword 0x7ce4,0x1c0c, 0x7fa7,0x096b, 0x7e9d,0x12c8
.hword 0x7c5a,0x1e57, 0x7f98,0x0a33, 0x7e60,0x1455
.hword 0x7bc6,0x209f, 0x7f87,0x0afb, 0x7e1e,0x15e2
.hword 0x7b27,0x22e5, 0x7f75,0x0bc4, 0x7dd6,0x176e
.hword 0x7a7d,0x2528, 0x7f62,0x0c8c, 0x7d8a,0x18f9
.hword 0x79c9,0x2768, 0x7f4e,0x0d54, 0x7d3a,0x1a83
.hword 0x790a,0x29a4, 0x7f38,0x0e1c, 0x7ce4,0x1c0c
.hword 0x7840,0x2bdc, 0x7f22,0x0ee4, 0x7c89,0x1d93
.hword 0x776c,0x2e11, 0x7f0a,0x0fab, 0x7c2a,0x1f1a
.hword 0x768e,0x3042, 0x7ef0,0x1073, 0x7bc6,0x209f
.hword 0x75a6,0x326e, 0x7ed6,0x113a, 0x7b5d,0x2224
.hword 0x74b3,0x3497, 0x7eba,0x1201, 0x7aef,0x23a7
.hword 0x73b6,0x36ba, 0x7e9d,0x12c8, 0x7a7d,0x2528
.hword 0x72af,0x38d9, 0x7e7f,0x138f, 0x7a06,0x26a8
.hword 0x719e,0x3af3, 0x7e60,0x1455, 0x798a,0x2827
.hword 0x7083,0x3d08, 0x7e3f,0x151c, 0x790a,0x29a4
.hword 0x6f5f,0x3f17, 0x7e1e,0x15e2, 0x7885,0x2b1f
.hword 0x6e31,0x4121, 0x7dfb,0x16a8, 0x77fb,0x2c99
.hword 0x6cf9,0x4326, 0x7dd6,0x176e, 0x776c,0x2e11
.hword 0x6bb8,0x4524, 0x7db1,0x1833, 0x76d9,0x2f87
.hword 0x6a6e,0x471d, 0x7d8a,0x18f9, 0x7642,0x30fc
.hword 0x691a,0x490f, 0x7d63,0x19be, 0x75a6,0x326e
.hword 0x67bd,0x4afb, 0x7d3a,0x1a83, 0x7505,0x33df
.hword 0x6657,0x4ce1, 0x7d0f,0x1b47, 0x7460,0x354e
.hword 0x64e9,0x4ec0, 0x7ce4,0x1c0c, 0x73b6,0x36ba
.hword 0x6371,0x5098, 0x7cb7,0x1cd0, 0x7308,0x3825
.hword 0x61f1,0x5269, 0x7c89,0x1d93, 0x7255,0x398d
.hword 0x6068,0x5433, 0x7c5a,0x1e57, 0x719e,0x3af3
.hword 0x5ed7,0x55f6, 0x7c2a,0x1f1a, 0x70e3,0x3c57
.hword 0x5d3e,0x57b1, 0x7bf9,0x1fdd, 0x7023,0x3db8
.hword 0x5b9d,0x5964, 0x7bc6,0x209f, 0x6f5f,0x3f17
.hword 0x59f4,0x5b10, 0x7b92,0x2162, 0x6e97,0x4074
.hword 0x5843,0x5cb4, 0x7b5d,0x2224, 0x6dca,0x41ce
.hword 0x568a,0x5e50, 0x7b27,0x22e5, 0x6cf9,0x4326
.hword 0x54ca,0x5fe4, 0x7aef,0x23a7, 0x6c24,0x447b
.hword 0x5303,0x616f, 0x7ab7,0x2467, 0x6b4b,0x45cd
.hword 0x5134,0x62f2, 0x7a7d,0x2528, 0x6a6e,0x471d
.hword 0x4f5e,0x646c, 0x7a42,0x25e8, 0x698c,0x486a
.hword 0x4d81,0x65de, 0x7a06,0x26a8, 0x68a7,0x49b4
.hword 0x4b9e,0x6747, 0x79c9,0x2768, 0x67bd,0x4afb
.hword 0x49b4,0x68a7, 0x798a,0x2827, 0x66d0,0x4c40
.hword 0x47c4,0x69fd, 0x794a,0x28e5, 0x65de,0x4d81
.hword 0x45cd,0x6b4b, 0x790a,0x29a4, 0x64e9,0x4ec0
.hword 0x43d1,0x6c8f, 0x78c8,0x2a62, 0x63ef,0x4ffb
.hword 0x41ce,0x6dca, 0x7885,0x2b1f, 0x62f2,0x5134
.hword 0x3fc6,0x6efb, 0x7840,0x2bdc, 0x61f1,0x5269
.hword 0x3db8,0x7023, 0x77fb,0x2c99, 0x60ec,0x539b
.hword 0x3ba5,0x7141, 0x77b4,0x2d55, 0x5fe4,0x54ca
.hword 0x398d,0x7255, 0x776c,0x2e11, 0x5ed7,0x55f6
.hword 0x3770,0x735f, 0x7723,0x2ecc, 0x5dc8,0x571e
.hword 0x354e,0x7460, 0x76d9,0x2f87, 0x5cb4,0x5843
.hword 0x3327,0x7556, 0x768e,0x3042, 0x5b9d,0x5964
.hword 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82
.hword 0x2ecc,0x7723, 0x75f4,0x31b5, 0x5964,0x5b9d
.hword 0x2c99,0x77fb, 0x75a6,0x326e, 0x5843,0x5cb4
.hword 0x2a62,0x78c8, 0x7556,0x3327, 0x571e,0x5dc8
.hword 0x2827,0x798a, 0x7505,0x33df, 0x55f6,0x5ed7
.hword 0x25e8,0x7a42, 0x74b3,0x3497, 0x54ca,0x5fe4
.hword 0x23a7,0x7aef, 0x7460,0x354e, 0x539b,0x60ec
.hword 0x2162,0x7b92, 0x740b,0x3604, 0x5269,0x61f1
.hword 0x1f1a,0x7c2a, 0x73b6,0x36ba, 0x5134,0x62f2
.hword 0x1cd0,0x7cb7, 0x735f,0x3770, 0x4ffb,0x63ef
.hword 0x1a83,0x7d3a, 0x7308,0x3825, 0x4ec0,0x64e9
.hword 0x1833,0x7db1, 0x72af,0x38d9, 0x4d81,0x65de
.hword 0x15e2,0x7e1e, 0x7255,0x398d, 0x4c40,0x66d0
.hword 0x138f,0x7e7f, 0x71fa,0x3a40, 0x4afb,0x67bd
.hword 0x113a,0x7ed6, 0x719e,0x3af3, 0x49b4,0x68a7
.hword 0x0ee4,0x7f22, 0x7141,0x3ba5, 0x486a,0x698c
.hword 0x0c8c,0x7f62, 0x70e3,0x3c57, 0x471d,0x6a6e
.hword 0x0a33,0x7f98, 0x7083,0x3d08, 0x45cd,0x6b4b
.hword 0x07d9,0x7fc2, 0x7023,0x3db8, 0x447b,0x6c24
.hword 0x057f,0x7fe2, 0x6fc2,0x3e68, 0x4326,0x6cf9
.hword 0x0324,0x7ff6, 0x6f5f,0x3f17, 0x41ce,0x6dca
.hword 0x00c9,0x7fff, 0x6efb,0x3fc6, 0x4074,0x6e97
.hword 0xfe6e,0x7ffe, 0x6e97,0x4074, 0x3f17,0x6f5f
.hword 0xfc13,0x7ff1, 0x6e31,0x4121, 0x3db8,0x7023
.hword 0xf9b8,0x7fd9, 0x6dca,0x41ce, 0x3c57,0x70e3
.hword 0xf75e,0x7fb5, 0x6d62,0x427a, 0x3af3,0x719e
.hword 0xf505,0x7f87, 0x6cf9,0x4326, 0x398d,0x7255
.hword 0xf2ac,0x7f4e, 0x6c8f,0x43d1, 0x3825,0x7308
.hword 0xf055,0x7f0a, 0x6c24,0x447b, 0x36ba,0x73b6
.hword 0xedff,0x7eba, 0x6bb8,0x4524, 0x354e,0x7460
.hword 0xebab,0x7e60, 0x6b4b,0x45cd, 0x33df,0x7505
.hword 0xe958,0x7dfb, 0x6add,0x4675, 0x326e,0x75a6
.hword 0xe707,0x7d8a, 0x6a6e,0x471d, 0x30fc,0x7642
.hword 0xe4b9,0x7d0f, 0x69fd,0x47c4, 0x2f87,0x76d9
.hword 0xe26d,0x7c89, 0x698c,0x486a, 0x2e11,0x776c
.hword 0xe023,0x7bf9, 0x691a,0x490f, 0x2c99,0x77fb
.hword 0xdddc,0x7b5d, 0x68a7,0x49b4, 0x2b1f,0x7885
.hword 0xdb99,0x7ab7, 0x6832,0x4a58, 0x29a4,0x790a
.hword 0xd958,0x7a06, 0x67bd,0x4afb, 0x2827,0x798a
.hword 0xd71b,0x794a, 0x6747,0x4b9e, 0x26a8,0x7a06
.hword 0xd4e1,0x7885, 0x66d0,0x4c40, 0x2528,0x7a7d
.hword 0xd2ab,0x77b4, 0x6657,0x4ce1, 0x23a7,0x7aef
.hword 0xd079,0x76d9, 0x65de,0x4d81, 0x2224,0x7b5d
.hword 0xce4b,0x75f4, 0x6564,0x4e21, 0x209f,0x7bc6
.hword 0xcc21,0x7505, 0x64e9,0x4ec0, 0x1f1a,0x7c2a
.hword 0xc9fc,0x740b, 0x646c,0x4f5e, 0x1d93,0x7c89
.hword 0xc7db,0x7308, 0x63ef,0x4ffb, 0x1c0c,0x7ce4
.hword 0xc5c0,0x71fa, 0x6371,0x5098, 0x1a83,0x7d3a
.hword 0xc3a9,0x70e3, 0x62f2,0x5134, 0x18f9,0x7d8a
.hword 0xc198,0x6fc2, 0x6272,0x51cf, 0x176e,0x7dd6
.hword 0xbf8c,0x6e97, 0x61f1,0x5269, 0x15e2,0x7e1e
.hword 0xbd86,0x6d62, 0x616f,0x5303, 0x1455,0x7e60
.hword 0xbb85,0x6c24, 0x60ec,0x539b, 0x12c8,0x7e9d
.hword 0xb98b,0x6add, 0x6068,0x5433, 0x113a,0x7ed6
.hword 0xb796,0x698c, 0x5fe4,0x54ca, 0x0fab,0x7f0a
.hword 0xb5a8,0x6832, 0x5f5e,0x5560, 0x0e1c,0x7f38
.hword 0xb3c0,0x66d0, 0x5ed7,0x55f6, 0x0c8c,0x7f62
.hword 0xb1df,0x6564, 0x5e50,0x568a, 0x0afb,0x7f87
.hword 0xb005,0x63ef, 0x5dc8,0x571e, 0x096b,0x7fa7
.hword 0xae31,0x6272, 0x5d3e,0x57b1, 0x07d9,0x7fc2
.hword 0xac65,0x60ec, 0x5cb4,0x5843, 0x0648,0x7fd9
.hword 0xaaa0,0x5f5e, 0x5c29,0x58d4, 0x04b6,0x7fea
.hword 0xa8e2,0x5dc8, 0x5b9d,0x5964, 0x0324,0x7ff6
.hword 0xa72c,0x5c29, 0x5b10,0x59f4, 0x0192,0x7ffe
.hword 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff
.hword 0xa3d7,0x58d4, 0x59f4,0x5b10, 0xfe6e,0x7ffe
.hword 0xa238,0x571e, 0x5964,0x5b9d, 0xfcdc,0x7ff6
.hword 0xa0a2,0x5560, 0x58d4,0x5c29, 0xfb4a,0x7fea
.hword 0x9f14,0x539b, 0x5843,0x5cb4, 0xf9b8,0x7fd9
.hword 0x9d8e,0x51cf, 0x57b1,0x5d3e, 0xf827,0x7fc2
.hword 0x9c11,0x4ffb, 0x571e,0x5dc8, 0xf695,0x7fa7
.hword 0x9a9c,0x4e21, 0x568a,0x5e50, 0xf505,0x7f87
.hword 0x9930,0x4c40, 0x55f6,0x5ed7, 0xf374,0x7f62
.hword 0x97ce,0x4a58, 0x5560,0x5f5e, 0xf1e4,0x7f38
.hword 0x9674,0x486a, 0x54ca,0x5fe4, 0xf055,0x7f0a
.hword 0x9523,0x4675, 0x5433,0x6068, 0xeec6,0x7ed6
.hword 0x93dc,0x447b, 0x539b,0x60ec, 0xed38,0x7e9d
.hword 0x929e,0x427a, 0x5303,0x616f, 0xebab,0x7e60
.hword 0x9169,0x4074, 0x5269,0x61f1, 0xea1e,0x7e1e
.hword 0x903e,0x3e68, 0x51cf,0x6272, 0xe892,0x7dd6
.hword 0x8f1d,0x3c57, 0x5134,0x62f2, 0xe707,0x7d8a
.hword 0x8e06,0x3a40, 0x5098,0x6371, 0xe57d,0x7d3a
.hword 0x8cf8,0x3825, 0x4ffb,0x63ef, 0xe3f4,0x7ce4
.hword 0x8bf5,0x3604, 0x4f5e,0x646c, 0xe26d,0x7c89
.hword 0x8afb,0x33df, 0x4ec0,0x64e9, 0xe0e6,0x7c2a
.hword 0x8a0c,0x31b5, 0x4e21,0x6564, 0xdf61,0x7bc6
.hword 0x8927,0x2f87, 0x4d81,0x65de, 0xdddc,0x7b5d
.hword 0x884c,0x2d55, 0x4ce1,0x6657, 0xdc59,0x7aef
.hword 0x877b,0x2b1f, 0x4c40,0x66d0, 0xdad8,0x7a7d
.hword 0x86b6,0x28e5, 0x4b9e,0x6747, 0xd958,0x7a06
.hword 0x85fa,0x26a8, 0x4afb,0x67bd, 0xd7d9,0x798a
.hword 0x8549,0x2467, 0x4a58,0x6832, 0xd65c,0x790a
.hword 0x84a3,0x2224, 0x49b4,0x68a7, 0xd4e1,0x7885
.hword 0x8407,0x1fdd, 0x490f,0x691a, 0xd367,0x77fb
.hword 0x8377,0x1d93, 0x486a,0x698c, 0xd1ef,0x776c
.hword 0x82f1,0x1b47, 0x47c4,0x69fd, 0xd079,0x76d9
.hword 0x8276,0x18f9, 0x471d,0x6a6e, 0xcf04,0x7642
.hword 0x8205,0x16a8, 0x4675,0x6add, 0xcd92,0x75a6
.hword 0x81a0,0x1455, 0x45cd,0x6b4b, 0xcc21,0x7505
.hword 0x8146,0x1201, 0x4524,0x6bb8, 0xcab2,0x7460
.hword 0x80f6,0x0fab, 0x447b,0x6c24, 0xc946,0x73b6
.hword 0x80b2,0x0d54, 0x43d1,0x6c8f, 0xc7db,0x7308
.hword 0x8079,0x0afb, 0x4326,0x6cf9, 0xc673,0x7255
.hword 0x804b,0x08a2, 0x427a,0x6d62, 0xc50d,0x719e
.hword 0x8027,0x0648, 0x41ce,0x6dca, 0xc3a9,0x70e3
.hword 0x800f,0x03ed, 0x4121,0x6e31, 0xc248,0x7023
.hword 0x8002,0x0192, 0x4074,0x6e97, 0xc0e9,0x6f5f
.hword 0x8001,0xff37, 0x3fc6,0x6efb, 0xbf8c,0x6e97
.hword 0x800a,0xfcdc, 0x3f17,0x6f5f, 0xbe32,0x6dca
.hword 0x801e,0xfa81, 0x3e68,0x6fc2, 0xbcda,0x6cf9
.hword 0x803e,0xf827, 0x3db8,0x7023, 0xbb85,0x6c24
.hword 0x8068,0xf5cd, 0x3d08,0x7083, 0xba33,0x6b4b
.hword 0x809e,0xf374, 0x3c57,0x70e3, 0xb8e3,0x6a6e
.hword 0x80de,0xf11c, 0x3ba5,0x7141, 0xb796,0x698c
.hword 0x812a,0xeec6, 0x3af3,0x719e, 0xb64c,0x68a7
.hword 0x8181,0xec71, 0x3a40,0x71fa, 0xb505,0x67bd
.hword 0x81e2,0xea1e, 0x398d,0x7255, 0xb3c0,0x66d0
.hword 0x824f,0xe7cd, 0x38d9,0x72af, 0xb27f,0x65de
.hword 0x82c6,0xe57d, 0x3825,0x7308, 0xb140,0x64e9
.hword 0x8349,0xe330, 0x3770,0x735f, 0xb005,0x63ef
.hword 0x83d6,0xe0e6, 0x36ba,0x73b6, 0xaecc,0x62f2
.hword 0x846e,0xde9e, 0x3604,0x740b, 0xad97,0x61f1
.hword 0x8511,0xdc59, 0x354e,0x7460, 0xac65,0x60ec
.hword 0x85be,0xda18, 0x3497,0x74b3, 0xab36,0x5fe4
.hword 0x8676,0xd7d9, 0x33df,0x7505, 0xaa0a,0x5ed7
.hword 0x8738,0xd59e, 0x3327,0x7556, 0xa8e2,0x5dc8
.hword 0x8805,0xd367, 0x326e,0x75a6, 0xa7bd,0x5cb4
.hword 0x88dd,0xd134, 0x31b5,0x75f4, 0xa69c,0x5b9d
.hword 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82
.hword 0x8aaa,0xccd9, 0x3042,0x768e, 0xa463,0x5964
.hword 0x8ba0,0xcab2, 0x2f87,0x76d9, 0xa34c,0x5843
.hword 0x8ca1,0xc890, 0x2ecc,0x7723, 0xa238,0x571e
.hword 0x8dab,0xc673, 0x2e11,0x776c, 0xa129,0x55f6
.hword 0x8ebf,0xc45b, 0x2d55,0x77b4, 0xa01c,0x54ca
.hword 0x8fdd,0xc248, 0x2c99,0x77fb, 0x9f14,0x539b
.hword 0x9105,0xc03a, 0x2bdc,0x7840, 0x9e0f,0x5269
.hword 0x9236,0xbe32, 0x2b1f,0x7885, 0x9d0e,0x5134
.hword 0x9371,0xbc2f, 0x2a62,0x78c8, 0x9c11,0x4ffb
.hword 0x94b5,0xba33, 0x29a4,0x790a, 0x9b17,0x4ec0
.hword 0x9603,0xb83c, 0x28e5,0x794a, 0x9a22,0x4d81
.hword 0x9759,0xb64c, 0x2827,0x798a, 0x9930,0x4c40
.hword 0x98b9,0xb462, 0x2768,0x79c9, 0x9843,0x4afb
.hword 0x9a22,0xb27f, 0x26a8,0x7a06, 0x9759,0x49b4
.hword 0x9b94,0xb0a2, 0x25e8,0x7a42, 0x9674,0x486a
.hword 0x9d0e,0xaecc, 0x2528,0x7a7d, 0x9592,0x471d
.hword 0x9e91,0xacfd, 0x2467,0x7ab7, 0x94b5,0x45cd
.hword 0xa01c,0xab36, 0x23a7,0x7aef, 0x93dc,0x447b
.hword 0xa1b0,0xa976, 0x22e5,0x7b27, 0x9307,0x4326
.hword 0xa34c,0xa7bd, 0x2224,0x7b5d, 0x9236,0x41ce
.hword 0xa4f0,0xa60c, 0x2162,0x7b92, 0x9169,0x4074
.hword 0xa69c,0xa463, 0x209f,0x7bc6, 0x90a1,0x3f17
.hword 0xa84f,0xa2c2, 0x1fdd,0x7bf9, 0x8fdd,0x3db8
.hword 0xaa0a,0xa129, 0x1f1a,0x7c2a, 0x8f1d,0x3c57
.hword 0xabcd,0x9f98, 0x1e57,0x7c5a, 0x8e62,0x3af3
.hword 0xad97,0x9e0f, 0x1d93,0x7c89, 0x8dab,0x398d
.hword 0xaf68,0x9c8f, 0x1cd0,0x7cb7, 0x8cf8,0x3825
.hword 0xb140,0x9b17, 0x1c0c,0x7ce4, 0x8c4a,0x36ba
.hword 0xb31f,0x99a9, 0x1b47,0x7d0f, 0x8ba0,0x354e
.hword 0xb505,0x9843, 0x1a83,0x7d3a, 0x8afb,0x33df
.hword 0xb6f1,0x96e6, 0x19be,0x7d63, 0x8a5a,0x326e
.hword 0xb8e3,0x9592, 0x18f9,0x7d8a, 0x89be,0x30fc
.hword 0xbadc,0x9448, 0x1833,0x7db1, 0x8927,0x2f87
.hword 0xbcda,0x9307, 0x176e,0x7dd6, 0x8894,0x2e11
.hword 0xbedf,0x91cf, 0x16a8,0x7dfb, 0x8805,0x2c99
.hword 0xc0e9,0x90a1, 0x15e2,0x7e1e, 0x877b,0x2b1f
.hword 0xc2f8,0x8f7d, 0x151c,0x7e3f, 0x86f6,0x29a4
.hword 0xc50d,0x8e62, 0x1455,0x7e60, 0x8676,0x2827
.hword 0xc727,0x8d51, 0x138f,0x7e7f, 0x85fa,0x26a8
.hword 0xc946,0x8c4a, 0x12c8,0x7e9d, 0x8583,0x2528
.hword 0xcb69,0x8b4d, 0x1201,0x7eba, 0x8511,0x23a7
.hword 0xcd92,0x8a5a, 0x113a,0x7ed6, 0x84a3,0x2224
.hword 0xcfbe,0x8972, 0x1073,0x7ef0, 0x843a,0x209f
.hword 0xd1ef,0x8894, 0x0fab,0x7f0a, 0x83d6,0x1f1a
.hword 0xd424,0x87c0, 0x0ee4,0x7f22, 0x8377,0x1d93
.hword 0xd65c,0x86f6, 0x0e1c,0x7f38, 0x831c,0x1c0c
.hword 0xd898,0x8637, 0x0d54,0x7f4e, 0x82c6,0x1a83
.hword 0xdad8,0x8583, 0x0c8c,0x7f62, 0x8276,0x18f9
.hword 0xdd1b,0x84d9, 0x0bc4,0x7f75, 0x822a,0x176e
.hword 0xdf61,0x843a, 0x0afb,0x7f87, 0x81e2,0x15e2
.hword 0xe1a9,0x83a6, 0x0a33,0x7f98, 0x81a0,0x1455
.hword 0xe3f4,0x831c, 0x096b,0x7fa7, 0x8163,0x12c8
.hword 0xe642,0x829d, 0x08a2,0x7fb5, 0x812a,0x113a
.hword 0xe892,0x822a, 0x07d9,0x7fc2, 0x80f6,0x0fab
.hword 0xeae4,0x81c1, 0x0711,0x7fce, 0x80c8,0x0e1c
.hword 0xed38,0x8163, 0x0648,0x7fd9, 0x809e,0x0c8c
.hword 0xef8d,0x8110, 0x057f,0x7fe2, 0x8079,0x0afb
.hword 0xf1e4,0x80c8, 0x04b6,0x7fea, 0x8059,0x096b
.hword 0xf43c,0x808b, 0x03ed,0x7ff1, 0x803e,0x07d9
.hword 0xf695,0x8059, 0x0324,0x7ff6, 0x8027,0x0648
.hword 0xf8ef,0x8032, 0x025b,0x7ffa, 0x8016,0x04b6
.hword 0xfb4a,0x8016, 0x0192,0x7ffe, 0x800a,0x0324
.hword 0xfda5,0x8006, 0x00c9,0x7fff, 0x8002,0x0192
// N=4096 t=2*PI*k/N for k=0,1,2,..,N/4-1
.hword 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000
.hword 0x7fff,0x0097, 0x7fff,0x0032, 0x7fff,0x0065
.hword 0x7fff,0x012e, 0x7fff,0x0065, 0x7fff,0x00c9
.hword 0x7ffd,0x01c4, 0x7fff,0x0097, 0x7fff,0x012e
.hword 0x7ffa,0x025b, 0x7fff,0x00c9, 0x7ffe,0x0192
.hword 0x7ff7,0x02f2, 0x7fff,0x00fb, 0x7ffc,0x01f7
.hword 0x7ff4,0x0389, 0x7fff,0x012e, 0x7ffa,0x025b
.hword 0x7fef,0x041f, 0x7ffe,0x0160, 0x7ff8,0x02c0
.hword 0x7fea,0x04b6, 0x7ffe,0x0192, 0x7ff6,0x0324
.hword 0x7fe4,0x054d, 0x7ffd,0x01c4, 0x7ff4,0x0389
.hword 0x7fdd,0x05e3, 0x7ffc,0x01f7, 0x7ff1,0x03ed
.hword 0x7fd6,0x067a, 0x7ffb,0x0229, 0x7fed,0x0452
.hword 0x7fce,0x0711, 0x7ffa,0x025b, 0x7fea,0x04b6
.hword 0x7fc5,0x07a7, 0x7ff9,0x028d, 0x7fe6,0x051b
.hword 0x7fbc,0x083e, 0x7ff8,0x02c0, 0x7fe2,0x057f
.hword 0x7fb2,0x08d4, 0x7ff7,0x02f2, 0x7fdd,0x05e3
.hword 0x7fa7,0x096b, 0x7ff6,0x0324, 0x7fd9,0x0648
.hword 0x7f9c,0x0a01, 0x7ff5,0x0356, 0x7fd3,0x06ac
.hword 0x7f90,0x0a97, 0x7ff4,0x0389, 0x7fce,0x0711
.hword 0x7f83,0x0b2d, 0x7ff2,0x03bb, 0x7fc8,0x0775
.hword 0x7f75,0x0bc4, 0x7ff1,0x03ed, 0x7fc2,0x07d9
.hword 0x7f67,0x0c5a, 0x7fef,0x041f, 0x7fbc,0x083e
.hword 0x7f58,0x0cf0, 0x7fed,0x0452, 0x7fb5,0x08a2
.hword 0x7f49,0x0d86, 0x7fec,0x0484, 0x7fae,0x0906
.hword 0x7f38,0x0e1c, 0x7fea,0x04b6, 0x7fa7,0x096b
.hword 0x7f27,0x0eb2, 0x7fe8,0x04e8, 0x7fa0,0x09cf
.hword 0x7f16,0x0f47, 0x7fe6,0x051b, 0x7f98,0x0a33
.hword 0x7f03,0x0fdd, 0x7fe4,0x054d, 0x7f90,0x0a97
.hword 0x7ef0,0x1073, 0x7fe2,0x057f, 0x7f87,0x0afb
.hword 0x7edd,0x1108, 0x7fe0,0x05b1, 0x7f7e,0x0b60
.hword 0x7ec8,0x119e, 0x7fdd,0x05e3, 0x7f75,0x0bc4
.hword 0x7eb3,0x1233, 0x7fdb,0x0616, 0x7f6c,0x0c28
.hword 0x7e9d,0x12c8, 0x7fd9,0x0648, 0x7f62,0x0c8c
.hword 0x7e87,0x135d, 0x7fd6,0x067a, 0x7f58,0x0cf0
.hword 0x7e70,0x13f2, 0x7fd3,0x06ac, 0x7f4e,0x0d54
.hword 0x7e58,0x1487, 0x7fd1,0x06de, 0x7f43,0x0db8
.hword 0x7e3f,0x151c, 0x7fce,0x0711, 0x7f38,0x0e1c
.hword 0x7e26,0x15b1, 0x7fcb,0x0743, 0x7f2d,0x0e80
.hword 0x7e0c,0x1645, 0x7fc8,0x0775, 0x7f22,0x0ee4
.hword 0x7df2,0x16da, 0x7fc5,0x07a7, 0x7f16,0x0f47
.hword 0x7dd6,0x176e, 0x7fc2,0x07d9, 0x7f0a,0x0fab
.hword 0x7dba,0x1802, 0x7fbf,0x080c, 0x7efd,0x100f
.hword 0x7d9e,0x1896, 0x7fbc,0x083e, 0x7ef0,0x1073
.hword 0x7d81,0x192a, 0x7fb9,0x0870, 0x7ee3,0x10d6
.hword 0x7d63,0x19be, 0x7fb5,0x08a2, 0x7ed6,0x113a
.hword 0x7d44,0x1a51, 0x7fb2,0x08d4, 0x7ec8,0x119e
.hword 0x7d25,0x1ae5, 0x7fae,0x0906, 0x7eba,0x1201
.hword 0x7d05,0x1b78, 0x7fab,0x0938, 0x7eac,0x1265
.hword 0x7ce4,0x1c0c, 0x7fa7,0x096b, 0x7e9d,0x12c8
.hword 0x7cc2,0x1c9f, 0x7fa3,0x099d, 0x7e8e,0x132b
.hword 0x7ca0,0x1d31, 0x7fa0,0x09cf, 0x7e7f,0x138f
.hword 0x7c7e,0x1dc4, 0x7f9c,0x0a01, 0x7e70,0x13f2
.hword 0x7c5a,0x1e57, 0x7f98,0x0a33, 0x7e60,0x1455
.hword 0x7c36,0x1ee9, 0x7f94,0x0a65, 0x7e50,0x14b9
.hword 0x7c11,0x1f7b, 0x7f90,0x0a97, 0x7e3f,0x151c
.hword 0x7bec,0x200e, 0x7f8b,0x0ac9, 0x7e2f,0x157f
.hword 0x7bc6,0x209f, 0x7f87,0x0afb, 0x7e1e,0x15e2
.hword 0x7b9f,0x2131, 0x7f83,0x0b2d, 0x7e0c,0x1645
.hword 0x7b78,0x21c3, 0x7f7e,0x0b60, 0x7dfb,0x16a8
.hword 0x7b50,0x2254, 0x7f7a,0x0b92, 0x7de9,0x170b
.hword 0x7b27,0x22e5, 0x7f75,0x0bc4, 0x7dd6,0x176e
.hword 0x7afd,0x2376, 0x7f71,0x0bf6, 0x7dc4,0x17d1
.hword 0x7ad3,0x2407, 0x7f6c,0x0c28, 0x7db1,0x1833
.hword 0x7aa8,0x2498, 0x7f67,0x0c5a, 0x7d9e,0x1896
.hword 0x7a7d,0x2528, 0x7f62,0x0c8c, 0x7d8a,0x18f9
.hword 0x7a51,0x25b8, 0x7f5d,0x0cbe, 0x7d77,0x195b
.hword 0x7a24,0x2648, 0x7f58,0x0cf0, 0x7d63,0x19be
.hword 0x79f7,0x26d8, 0x7f53,0x0d22, 0x7d4e,0x1a20
.hword 0x79c9,0x2768, 0x7f4e,0x0d54, 0x7d3a,0x1a83
.hword 0x799a,0x27f7, 0x7f49,0x0d86, 0x7d25,0x1ae5
.hword 0x796a,0x2886, 0x7f43,0x0db8, 0x7d0f,0x1b47
.hword 0x793a,0x2915, 0x7f3e,0x0dea, 0x7cfa,0x1ba9
.hword 0x790a,0x29a4, 0x7f38,0x0e1c, 0x7ce4,0x1c0c
.hword 0x78d8,0x2a32, 0x7f33,0x0e4e, 0x7cce,0x1c6e
.hword 0x78a6,0x2ac1, 0x7f2d,0x0e80, 0x7cb7,0x1cd0
.hword 0x7874,0x2b4f, 0x7f27,0x0eb2, 0x7ca0,0x1d31
.hword 0x7840,0x2bdc, 0x7f22,0x0ee4, 0x7c89,0x1d93
.hword 0x780c,0x2c6a, 0x7f1c,0x0f15, 0x7c72,0x1df5
.hword 0x77d8,0x2cf7, 0x7f16,0x0f47, 0x7c5a,0x1e57
.hword 0x77a2,0x2d84, 0x7f10,0x0f79, 0x7c42,0x1eb8
.hword 0x776c,0x2e11, 0x7f0a,0x0fab, 0x7c2a,0x1f1a
.hword 0x7736,0x2e9e, 0x7f03,0x0fdd, 0x7c11,0x1f7b
.hword 0x76fe,0x2f2a, 0x7efd,0x100f, 0x7bf9,0x1fdd
.hword 0x76c7,0x2fb6, 0x7ef7,0x1041, 0x7bdf,0x203e
.hword 0x768e,0x3042, 0x7ef0,0x1073, 0x7bc6,0x209f
.hword 0x7655,0x30cd, 0x7eea,0x10a4, 0x7bac,0x2101
.hword 0x761b,0x3159, 0x7ee3,0x10d6, 0x7b92,0x2162
.hword 0x75e1,0x31e4, 0x7edd,0x1108, 0x7b78,0x21c3
.hword 0x75a6,0x326e, 0x7ed6,0x113a, 0x7b5d,0x2224
.hword 0x756a,0x32f9, 0x7ecf,0x116c, 0x7b42,0x2284
.hword 0x752d,0x3383, 0x7ec8,0x119e, 0x7b27,0x22e5
.hword 0x74f0,0x340d, 0x7ec1,0x11cf, 0x7b0b,0x2346
.hword 0x74b3,0x3497, 0x7eba,0x1201, 0x7aef,0x23a7
.hword 0x7475,0x3520, 0x7eb3,0x1233, 0x7ad3,0x2407
.hword 0x7436,0x35a9, 0x7eac,0x1265, 0x7ab7,0x2467
.hword 0x73f6,0x3632, 0x7ea5,0x1296, 0x7a9a,0x24c8
.hword 0x73b6,0x36ba, 0x7e9d,0x12c8, 0x7a7d,0x2528
.hword 0x7375,0x3742, 0x7e96,0x12fa, 0x7a60,0x2588
.hword 0x7334,0x37ca, 0x7e8e,0x132b, 0x7a42,0x25e8
.hword 0x72f2,0x3852, 0x7e87,0x135d, 0x7a24,0x2648
.hword 0x72af,0x38d9, 0x7e7f,0x138f, 0x7a06,0x26a8
.hword 0x726c,0x3960, 0x7e78,0x13c1, 0x79e7,0x2708
.hword 0x7228,0x39e7, 0x7e70,0x13f2, 0x79c9,0x2768
.hword 0x71e3,0x3a6d, 0x7e68,0x1424, 0x79aa,0x27c7
.hword 0x719e,0x3af3, 0x7e60,0x1455, 0x798a,0x2827
.hword 0x7158,0x3b79, 0x7e58,0x1487, 0x796a,0x2886
.hword 0x7112,0x3bfe, 0x7e50,0x14b9, 0x794a,0x28e5
.hword 0x70cb,0x3c83, 0x7e48,0x14ea, 0x792a,0x2945
.hword 0x7083,0x3d08, 0x7e3f,0x151c, 0x790a,0x29a4
.hword 0x703b,0x3d8c, 0x7e37,0x154d, 0x78e9,0x2a03
.hword 0x6ff2,0x3e10, 0x7e2f,0x157f, 0x78c8,0x2a62
.hword 0x6fa9,0x3e94, 0x7e26,0x15b1, 0x78a6,0x2ac1
.hword 0x6f5f,0x3f17, 0x7e1e,0x15e2, 0x7885,0x2b1f
.hword 0x6f14,0x3f9a, 0x7e15,0x1614, 0x7863,0x2b7e
.hword 0x6ec9,0x401d, 0x7e0c,0x1645, 0x7840,0x2bdc
.hword 0x6e7d,0x409f, 0x7e03,0x1677, 0x781e,0x2c3b
.hword 0x6e31,0x4121, 0x7dfb,0x16a8, 0x77fb,0x2c99
.hword 0x6de4,0x41a3, 0x7df2,0x16da, 0x77d8,0x2cf7
.hword 0x6d96,0x4224, 0x7de9,0x170b, 0x77b4,0x2d55
.hword 0x6d48,0x42a5, 0x7de0,0x173c, 0x7790,0x2db3
.hword 0x6cf9,0x4326, 0x7dd6,0x176e, 0x776c,0x2e11
.hword 0x6caa,0x43a6, 0x7dcd,0x179f, 0x7748,0x2e6f
.hword 0x6c5a,0x4426, 0x7dc4,0x17d1, 0x7723,0x2ecc
.hword 0x6c09,0x44a5, 0x7dba,0x1802, 0x76fe,0x2f2a
.hword 0x6bb8,0x4524, 0x7db1,0x1833, 0x76d9,0x2f87
.hword 0x6b66,0x45a3, 0x7da7,0x1865, 0x76b4,0x2fe5
.hword 0x6b14,0x4621, 0x7d9e,0x1896, 0x768e,0x3042
.hword 0x6ac1,0x469f, 0x7d94,0x18c7, 0x7668,0x309f
.hword 0x6a6e,0x471d, 0x7d8a,0x18f9, 0x7642,0x30fc
.hword 0x6a1a,0x479a, 0x7d81,0x192a, 0x761b,0x3159
.hword 0x69c5,0x4817, 0x7d77,0x195b, 0x75f4,0x31b5
.hword 0x6970,0x4893, 0x7d6d,0x198d, 0x75cd,0x3212
.hword 0x691a,0x490f, 0x7d63,0x19be, 0x75a6,0x326e
.hword 0x68c4,0x498b, 0x7d58,0x19ef, 0x757e,0x32cb
.hword 0x686d,0x4a06, 0x7d4e,0x1a20, 0x7556,0x3327
.hword 0x6815,0x4a81, 0x7d44,0x1a51, 0x752d,0x3383
.hword 0x67bd,0x4afb, 0x7d3a,0x1a83, 0x7505,0x33df
.hword 0x6764,0x4b75, 0x7d2f,0x1ab4, 0x74dc,0x343b
.hword 0x670b,0x4bef, 0x7d25,0x1ae5, 0x74b3,0x3497
.hword 0x66b2,0x4c68, 0x7d1a,0x1b16, 0x7489,0x34f2
.hword 0x6657,0x4ce1, 0x7d0f,0x1b47, 0x7460,0x354e
.hword 0x65fc,0x4d59, 0x7d05,0x1b78, 0x7436,0x35a9
.hword 0x65a1,0x4dd1, 0x7cfa,0x1ba9, 0x740b,0x3604
.hword 0x6545,0x4e49, 0x7cef,0x1bda, 0x73e1,0x365f
.hword 0x64e9,0x4ec0, 0x7ce4,0x1c0c, 0x73b6,0x36ba
.hword 0x648b,0x4f37, 0x7cd9,0x1c3d, 0x738b,0x3715
.hword 0x642e,0x4fad, 0x7cce,0x1c6e, 0x735f,0x3770
.hword 0x63d0,0x5023, 0x7cc2,0x1c9f, 0x7334,0x37ca
.hword 0x6371,0x5098, 0x7cb7,0x1cd0, 0x7308,0x3825
.hword 0x6312,0x510d, 0x7cac,0x1d01, 0x72dc,0x387f
.hword 0x62b2,0x5181, 0x7ca0,0x1d31, 0x72af,0x38d9
.hword 0x6252,0x51f5, 0x7c95,0x1d62, 0x7282,0x3933
.hword 0x61f1,0x5269, 0x7c89,0x1d93, 0x7255,0x398d
.hword 0x6190,0x52dc, 0x7c7e,0x1dc4, 0x7228,0x39e7
.hword 0x612e,0x534f, 0x7c72,0x1df5, 0x71fa,0x3a40
.hword 0x60cb,0x53c1, 0x7c66,0x1e26, 0x71cc,0x3a9a
.hword 0x6068,0x5433, 0x7c5a,0x1e57, 0x719e,0x3af3
.hword 0x6005,0x54a4, 0x7c4e,0x1e88, 0x7170,0x3b4c
.hword 0x5fa1,0x5515, 0x7c42,0x1eb8, 0x7141,0x3ba5
.hword 0x5f3c,0x5586, 0x7c36,0x1ee9, 0x7112,0x3bfe
.hword 0x5ed7,0x55f6, 0x7c2a,0x1f1a, 0x70e3,0x3c57
.hword 0x5e72,0x5665, 0x7c1e,0x1f4b, 0x70b3,0x3caf
.hword 0x5e0c,0x56d4, 0x7c11,0x1f7b, 0x7083,0x3d08
.hword 0x5da5,0x5743, 0x7c05,0x1fac, 0x7053,0x3d60
.hword 0x5d3e,0x57b1, 0x7bf9,0x1fdd, 0x7023,0x3db8
.hword 0x5cd7,0x581e, 0x7bec,0x200e, 0x6ff2,0x3e10
.hword 0x5c6f,0x588c, 0x7bdf,0x203e, 0x6fc2,0x3e68
.hword 0x5c06,0x58f8, 0x7bd3,0x206f, 0x6f90,0x3ec0
.hword 0x5b9d,0x5964, 0x7bc6,0x209f, 0x6f5f,0x3f17
.hword 0x5b34,0x59d0, 0x7bb9,0x20d0, 0x6f2d,0x3f6f
.hword 0x5ac9,0x5a3b, 0x7bac,0x2101, 0x6efb,0x3fc6
.hword 0x5a5f,0x5aa6, 0x7b9f,0x2131, 0x6ec9,0x401d
.hword 0x59f4,0x5b10, 0x7b92,0x2162, 0x6e97,0x4074
.hword 0x5988,0x5b7a, 0x7b85,0x2192, 0x6e64,0x40cb
.hword 0x591c,0x5be3, 0x7b78,0x21c3, 0x6e31,0x4121
.hword 0x58b0,0x5c4c, 0x7b6a,0x21f3, 0x6dfe,0x4178
.hword 0x5843,0x5cb4, 0x7b5d,0x2224, 0x6dca,0x41ce
.hword 0x57d5,0x5d1c, 0x7b50,0x2254, 0x6d96,0x4224
.hword 0x5767,0x5d83, 0x7b42,0x2284, 0x6d62,0x427a
.hword 0x56f9,0x5dea, 0x7b34,0x22b5, 0x6d2e,0x42d0
.hword 0x568a,0x5e50, 0x7b27,0x22e5, 0x6cf9,0x4326
.hword 0x561b,0x5eb6, 0x7b19,0x2316, 0x6cc4,0x437b
.hword 0x55ab,0x5f1b, 0x7b0b,0x2346, 0x6c8f,0x43d1
.hword 0x553b,0x5f80, 0x7afd,0x2376, 0x6c5a,0x4426
.hword 0x54ca,0x5fe4, 0x7aef,0x23a7, 0x6c24,0x447b
.hword 0x5459,0x6047, 0x7ae1,0x23d7, 0x6bee,0x44d0
.hword 0x53e7,0x60aa, 0x7ad3,0x2407, 0x6bb8,0x4524
.hword 0x5375,0x610d, 0x7ac5,0x2437, 0x6b82,0x4579
.hword 0x5303,0x616f, 0x7ab7,0x2467, 0x6b4b,0x45cd
.hword 0x5290,0x61d1, 0x7aa8,0x2498, 0x6b14,0x4621
.hword 0x521c,0x6232, 0x7a9a,0x24c8, 0x6add,0x4675
.hword 0x51a8,0x6292, 0x7a8c,0x24f8, 0x6aa5,0x46c9
.hword 0x5134,0x62f2, 0x7a7d,0x2528, 0x6a6e,0x471d
.hword 0x50bf,0x6351, 0x7a6e,0x2558, 0x6a36,0x4770
.hword 0x504a,0x63b0, 0x7a60,0x2588, 0x69fd,0x47c4
.hword 0x4fd4,0x640f, 0x7a51,0x25b8, 0x69c5,0x4817
.hword 0x4f5e,0x646c, 0x7a42,0x25e8, 0x698c,0x486a
.hword 0x4ee8,0x64ca, 0x7a33,0x2618, 0x6953,0x48bd
.hword 0x4e71,0x6526, 0x7a24,0x2648, 0x691a,0x490f
.hword 0x4df9,0x6582, 0x7a15,0x2678, 0x68e0,0x4962
.hword 0x4d81,0x65de, 0x7a06,0x26a8, 0x68a7,0x49b4
.hword 0x4d09,0x6639, 0x79f7,0x26d8, 0x686d,0x4a06
.hword 0x4c91,0x6693, 0x79e7,0x2708, 0x6832,0x4a58
.hword 0x4c17,0x66ed, 0x79d8,0x2738, 0x67f8,0x4aaa
.hword 0x4b9e,0x6747, 0x79c9,0x2768, 0x67bd,0x4afb
.hword 0x4b24,0x67a0, 0x79b9,0x2797, 0x6782,0x4b4d
.hword 0x4aaa,0x67f8, 0x79aa,0x27c7, 0x6747,0x4b9e
.hword 0x4a2f,0x6850, 0x799a,0x27f7, 0x670b,0x4bef
.hword 0x49b4,0x68a7, 0x798a,0x2827, 0x66d0,0x4c40
.hword 0x4939,0x68fd, 0x797a,0x2856, 0x6693,0x4c91
.hword 0x48bd,0x6953, 0x796a,0x2886, 0x6657,0x4ce1
.hword 0x4840,0x69a9, 0x795b,0x28b6, 0x661b,0x4d31
.hword 0x47c4,0x69fd, 0x794a,0x28e5, 0x65de,0x4d81
.hword 0x4747,0x6a52, 0x793a,0x2915, 0x65a1,0x4dd1
.hword 0x46c9,0x6aa5, 0x792a,0x2945, 0x6564,0x4e21
.hword 0x464b,0x6af8, 0x791a,0x2974, 0x6526,0x4e71
.hword 0x45cd,0x6b4b, 0x790a,0x29a4, 0x64e9,0x4ec0
.hword 0x454f,0x6b9d, 0x78f9,0x29d3, 0x64ab,0x4f0f
.hword 0x44d0,0x6bee, 0x78e9,0x2a03, 0x646c,0x4f5e
.hword 0x4450,0x6c3f, 0x78d8,0x2a32, 0x642e,0x4fad
.hword 0x43d1,0x6c8f, 0x78c8,0x2a62, 0x63ef,0x4ffb
.hword 0x4351,0x6cdf, 0x78b7,0x2a91, 0x63b0,0x504a
.hword 0x42d0,0x6d2e, 0x78a6,0x2ac1, 0x6371,0x5098
.hword 0x424f,0x6d7c, 0x7895,0x2af0, 0x6332,0x50e6
.hword 0x41ce,0x6dca, 0x7885,0x2b1f, 0x62f2,0x5134
.hword 0x414d,0x6e17, 0x7874,0x2b4f, 0x62b2,0x5181
.hword 0x40cb,0x6e64, 0x7863,0x2b7e, 0x6272,0x51cf
.hword 0x4048,0x6eb0, 0x7851,0x2bad, 0x6232,0x521c
.hword 0x3fc6,0x6efb, 0x7840,0x2bdc, 0x61f1,0x5269
.hword 0x3f43,0x6f46, 0x782f,0x2c0c, 0x61b0,0x52b6
.hword 0x3ec0,0x6f90, 0x781e,0x2c3b, 0x616f,0x5303
.hword 0x3e3c,0x6fda, 0x780c,0x2c6a, 0x612e,0x534f
.hword 0x3db8,0x7023, 0x77fb,0x2c99, 0x60ec,0x539b
.hword 0x3d34,0x706b, 0x77e9,0x2cc8, 0x60aa,0x53e7
.hword 0x3caf,0x70b3, 0x77d8,0x2cf7, 0x6068,0x5433
.hword 0x3c2a,0x70fa, 0x77c6,0x2d26, 0x6026,0x547f
.hword 0x3ba5,0x7141, 0x77b4,0x2d55, 0x5fe4,0x54ca
.hword 0x3b20,0x7187, 0x77a2,0x2d84, 0x5fa1,0x5515
.hword 0x3a9a,0x71cc, 0x7790,0x2db3, 0x5f5e,0x5560
.hword 0x3a13,0x7211, 0x777e,0x2de2, 0x5f1b,0x55ab
.hword 0x398d,0x7255, 0x776c,0x2e11, 0x5ed7,0x55f6
.hword 0x3906,0x7299, 0x775a,0x2e40, 0x5e94,0x5640
.hword 0x387f,0x72dc, 0x7748,0x2e6f, 0x5e50,0x568a
.hword 0x37f7,0x731e, 0x7736,0x2e9e, 0x5e0c,0x56d4
.hword 0x3770,0x735f, 0x7723,0x2ecc, 0x5dc8,0x571e
.hword 0x36e8,0x73a0, 0x7711,0x2efb, 0x5d83,0x5767
.hword 0x365f,0x73e1, 0x76fe,0x2f2a, 0x5d3e,0x57b1
.hword 0x35d7,0x7421, 0x76ec,0x2f59, 0x5cf9,0x57fa
.hword 0x354e,0x7460, 0x76d9,0x2f87, 0x5cb4,0x5843
.hword 0x34c4,0x749e, 0x76c7,0x2fb6, 0x5c6f,0x588c
.hword 0x343b,0x74dc, 0x76b4,0x2fe5, 0x5c29,0x58d4
.hword 0x33b1,0x7519, 0x76a1,0x3013, 0x5be3,0x591c
.hword 0x3327,0x7556, 0x768e,0x3042, 0x5b9d,0x5964
.hword 0x329d,0x7592, 0x767b,0x3070, 0x5b57,0x59ac
.hword 0x3212,0x75cd, 0x7668,0x309f, 0x5b10,0x59f4
.hword 0x3187,0x7608, 0x7655,0x30cd, 0x5ac9,0x5a3b
.hword 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82
.hword 0x3070,0x767b, 0x762e,0x312a, 0x5a3b,0x5ac9
.hword 0x2fe5,0x76b4, 0x761b,0x3159, 0x59f4,0x5b10
.hword 0x2f59,0x76ec, 0x7608,0x3187, 0x59ac,0x5b57
.hword 0x2ecc,0x7723, 0x75f4,0x31b5, 0x5964,0x5b9d
.hword 0x2e40,0x775a, 0x75e1,0x31e4, 0x591c,0x5be3
.hword 0x2db3,0x7790, 0x75cd,0x3212, 0x58d4,0x5c29
.hword 0x2d26,0x77c6, 0x75b9,0x3240, 0x588c,0x5c6f
.hword 0x2c99,0x77fb, 0x75a6,0x326e, 0x5843,0x5cb4
.hword 0x2c0c,0x782f, 0x7592,0x329d, 0x57fa,0x5cf9
.hword 0x2b7e,0x7863, 0x757e,0x32cb, 0x57b1,0x5d3e
.hword 0x2af0,0x7895, 0x756a,0x32f9, 0x5767,0x5d83
.hword 0x2a62,0x78c8, 0x7556,0x3327, 0x571e,0x5dc8
.hword 0x29d3,0x78f9, 0x7542,0x3355, 0x56d4,0x5e0c
.hword 0x2945,0x792a, 0x752d,0x3383, 0x568a,0x5e50
.hword 0x28b6,0x795b, 0x7519,0x33b1, 0x5640,0x5e94
.hword 0x2827,0x798a, 0x7505,0x33df, 0x55f6,0x5ed7
.hword 0x2797,0x79b9, 0x74f0,0x340d, 0x55ab,0x5f1b
.hword 0x2708,0x79e7, 0x74dc,0x343b, 0x5560,0x5f5e
.hword 0x2678,0x7a15, 0x74c7,0x3469, 0x5515,0x5fa1
.hword 0x25e8,0x7a42, 0x74b3,0x3497, 0x54ca,0x5fe4
.hword 0x2558,0x7a6e, 0x749e,0x34c4, 0x547f,0x6026
.hword 0x24c8,0x7a9a, 0x7489,0x34f2, 0x5433,0x6068
.hword 0x2437,0x7ac5, 0x7475,0x3520, 0x53e7,0x60aa
.hword 0x23a7,0x7aef, 0x7460,0x354e, 0x539b,0x60ec
.hword 0x2316,0x7b19, 0x744b,0x357b, 0x534f,0x612e
.hword 0x2284,0x7b42, 0x7436,0x35a9, 0x5303,0x616f
.hword 0x21f3,0x7b6a, 0x7421,0x35d7, 0x52b6,0x61b0
.hword 0x2162,0x7b92, 0x740b,0x3604, 0x5269,0x61f1
.hword 0x20d0,0x7bb9, 0x73f6,0x3632, 0x521c,0x6232
.hword 0x203e,0x7bdf, 0x73e1,0x365f, 0x51cf,0x6272
.hword 0x1fac,0x7c05, 0x73cb,0x368d, 0x5181,0x62b2
.hword 0x1f1a,0x7c2a, 0x73b6,0x36ba, 0x5134,0x62f2
.hword 0x1e88,0x7c4e, 0x73a0,0x36e8, 0x50e6,0x6332
.hword 0x1df5,0x7c72, 0x738b,0x3715, 0x5098,0x6371
.hword 0x1d62,0x7c95, 0x7375,0x3742, 0x504a,0x63b0
.hword 0x1cd0,0x7cb7, 0x735f,0x3770, 0x4ffb,0x63ef
.hword 0x1c3d,0x7cd9, 0x734a,0x379d, 0x4fad,0x642e
.hword 0x1ba9,0x7cfa, 0x7334,0x37ca, 0x4f5e,0x646c
.hword 0x1b16,0x7d1a, 0x731e,0x37f7, 0x4f0f,0x64ab
.hword 0x1a83,0x7d3a, 0x7308,0x3825, 0x4ec0,0x64e9
.hword 0x19ef,0x7d58, 0x72f2,0x3852, 0x4e71,0x6526
.hword 0x195b,0x7d77, 0x72dc,0x387f, 0x4e21,0x6564
.hword 0x18c7,0x7d94, 0x72c5,0x38ac, 0x4dd1,0x65a1
.hword 0x1833,0x7db1, 0x72af,0x38d9, 0x4d81,0x65de
.hword 0x179f,0x7dcd, 0x7299,0x3906, 0x4d31,0x661b
.hword 0x170b,0x7de9, 0x7282,0x3933, 0x4ce1,0x6657
.hword 0x1677,0x7e03, 0x726c,0x3960, 0x4c91,0x6693
.hword 0x15e2,0x7e1e, 0x7255,0x398d, 0x4c40,0x66d0
.hword 0x154d,0x7e37, 0x723f,0x39ba, 0x4bef,0x670b
.hword 0x14b9,0x7e50, 0x7228,0x39e7, 0x4b9e,0x6747
.hword 0x1424,0x7e68, 0x7211,0x3a13, 0x4b4d,0x6782
.hword 0x138f,0x7e7f, 0x71fa,0x3a40, 0x4afb,0x67bd
.hword 0x12fa,0x7e96, 0x71e3,0x3a6d, 0x4aaa,0x67f8
.hword 0x1265,0x7eac, 0x71cc,0x3a9a, 0x4a58,0x6832
.hword 0x11cf,0x7ec1, 0x71b5,0x3ac6, 0x4a06,0x686d
.hword 0x113a,0x7ed6, 0x719e,0x3af3, 0x49b4,0x68a7
.hword 0x10a4,0x7eea, 0x7187,0x3b20, 0x4962,0x68e0
.hword 0x100f,0x7efd, 0x7170,0x3b4c, 0x490f,0x691a
.hword 0x0f79,0x7f10, 0x7158,0x3b79, 0x48bd,0x6953
.hword 0x0ee4,0x7f22, 0x7141,0x3ba5, 0x486a,0x698c
.hword 0x0e4e,0x7f33, 0x712a,0x3bd2, 0x4817,0x69c5
.hword 0x0db8,0x7f43, 0x7112,0x3bfe, 0x47c4,0x69fd
.hword 0x0d22,0x7f53, 0x70fa,0x3c2a, 0x4770,0x6a36
.hword 0x0c8c,0x7f62, 0x70e3,0x3c57, 0x471d,0x6a6e
.hword 0x0bf6,0x7f71, 0x70cb,0x3c83, 0x46c9,0x6aa5
.hword 0x0b60,0x7f7e, 0x70b3,0x3caf, 0x4675,0x6add
.hword 0x0ac9,0x7f8b, 0x709b,0x3cdc, 0x4621,0x6b14
.hword 0x0a33,0x7f98, 0x7083,0x3d08, 0x45cd,0x6b4b
.hword 0x099d,0x7fa3, 0x706b,0x3d34, 0x4579,0x6b82
.hword 0x0906,0x7fae, 0x7053,0x3d60, 0x4524,0x6bb8
.hword 0x0870,0x7fb9, 0x703b,0x3d8c, 0x44d0,0x6bee
.hword 0x07d9,0x7fc2, 0x7023,0x3db8, 0x447b,0x6c24
.hword 0x0743,0x7fcb, 0x700b,0x3de4, 0x4426,0x6c5a
.hword 0x06ac,0x7fd3, 0x6ff2,0x3e10, 0x43d1,0x6c8f
.hword 0x0616,0x7fdb, 0x6fda,0x3e3c, 0x437b,0x6cc4
.hword 0x057f,0x7fe2, 0x6fc2,0x3e68, 0x4326,0x6cf9
.hword 0x04e8,0x7fe8, 0x6fa9,0x3e94, 0x42d0,0x6d2e
.hword 0x0452,0x7fed, 0x6f90,0x3ec0, 0x427a,0x6d62
.hword 0x03bb,0x7ff2, 0x6f78,0x3eec, 0x4224,0x6d96
.hword 0x0324,0x7ff6, 0x6f5f,0x3f17, 0x41ce,0x6dca
.hword 0x028d,0x7ff9, 0x6f46,0x3f43, 0x4178,0x6dfe
.hword 0x01f7,0x7ffc, 0x6f2d,0x3f6f, 0x4121,0x6e31
.hword 0x0160,0x7ffe, 0x6f14,0x3f9a, 0x40cb,0x6e64
.hword 0x00c9,0x7fff, 0x6efb,0x3fc6, 0x4074,0x6e97
.hword 0x0032,0x7fff, 0x6ee2,0x3ff1, 0x401d,0x6ec9
.hword 0xff9b,0x7fff, 0x6ec9,0x401d, 0x3fc6,0x6efb
.hword 0xff05,0x7fff, 0x6eb0,0x4048, 0x3f6f,0x6f2d
.hword 0xfe6e,0x7ffe, 0x6e97,0x4074, 0x3f17,0x6f5f
.hword 0xfdd7,0x7ffb, 0x6e7d,0x409f, 0x3ec0,0x6f90
.hword 0xfd40,0x7ff8, 0x6e64,0x40cb, 0x3e68,0x6fc2
.hword 0xfcaa,0x7ff5, 0x6e4a,0x40f6, 0x3e10,0x6ff2
.hword 0xfc13,0x7ff1, 0x6e31,0x4121, 0x3db8,0x7023
.hword 0xfb7c,0x7fec, 0x6e17,0x414d, 0x3d60,0x7053
.hword 0xfae5,0x7fe6, 0x6dfe,0x4178, 0x3d08,0x7083
.hword 0xfa4f,0x7fe0, 0x6de4,0x41a3, 0x3caf,0x70b3
.hword 0xf9b8,0x7fd9, 0x6dca,0x41ce, 0x3c57,0x70e3
.hword 0xf922,0x7fd1, 0x6db0,0x41f9, 0x3bfe,0x7112
.hword 0xf88b,0x7fc8, 0x6d96,0x4224, 0x3ba5,0x7141
.hword 0xf7f4,0x7fbf, 0x6d7c,0x424f, 0x3b4c,0x7170
.hword 0xf75e,0x7fb5, 0x6d62,0x427a, 0x3af3,0x719e
.hword 0xf6c8,0x7fab, 0x6d48,0x42a5, 0x3a9a,0x71cc
.hword 0xf631,0x7fa0, 0x6d2e,0x42d0, 0x3a40,0x71fa
.hword 0xf59b,0x7f94, 0x6d14,0x42fb, 0x39e7,0x7228
.hword 0xf505,0x7f87, 0x6cf9,0x4326, 0x398d,0x7255
.hword 0xf46e,0x7f7a, 0x6cdf,0x4351, 0x3933,0x7282
.hword 0xf3d8,0x7f6c, 0x6cc4,0x437b, 0x38d9,0x72af
.hword 0xf342,0x7f5d, 0x6caa,0x43a6, 0x387f,0x72dc
.hword 0xf2ac,0x7f4e, 0x6c8f,0x43d1, 0x3825,0x7308
.hword 0xf216,0x7f3e, 0x6c75,0x43fb, 0x37ca,0x7334
.hword 0xf180,0x7f2d, 0x6c5a,0x4426, 0x3770,0x735f
.hword 0xf0eb,0x7f1c, 0x6c3f,0x4450, 0x3715,0x738b
.hword 0xf055,0x7f0a, 0x6c24,0x447b, 0x36ba,0x73b6
.hword 0xefbf,0x7ef7, 0x6c09,0x44a5, 0x365f,0x73e1
.hword 0xef2a,0x7ee3, 0x6bee,0x44d0, 0x3604,0x740b
.hword 0xee94,0x7ecf, 0x6bd3,0x44fa, 0x35a9,0x7436
.hword 0xedff,0x7eba, 0x6bb8,0x4524, 0x354e,0x7460
.hword 0xed6a,0x7ea5, 0x6b9d,0x454f, 0x34f2,0x7489
.hword 0xecd5,0x7e8e, 0x6b82,0x4579, 0x3497,0x74b3
.hword 0xec3f,0x7e78, 0x6b66,0x45a3, 0x343b,0x74dc
.hword 0xebab,0x7e60, 0x6b4b,0x45cd, 0x33df,0x7505
.hword 0xeb16,0x7e48, 0x6b30,0x45f7, 0x3383,0x752d
.hword 0xea81,0x7e2f, 0x6b14,0x4621, 0x3327,0x7556
.hword 0xe9ec,0x7e15, 0x6af8,0x464b, 0x32cb,0x757e
.hword 0xe958,0x7dfb, 0x6add,0x4675, 0x326e,0x75a6
.hword 0xe8c4,0x7de0, 0x6ac1,0x469f, 0x3212,0x75cd
.hword 0xe82f,0x7dc4, 0x6aa5,0x46c9, 0x31b5,0x75f4
.hword 0xe79b,0x7da7, 0x6a89,0x46f3, 0x3159,0x761b
.hword 0xe707,0x7d8a, 0x6a6e,0x471d, 0x30fc,0x7642
.hword 0xe673,0x7d6d, 0x6a52,0x4747, 0x309f,0x7668
.hword 0xe5e0,0x7d4e, 0x6a36,0x4770, 0x3042,0x768e
.hword 0xe54c,0x7d2f, 0x6a1a,0x479a, 0x2fe5,0x76b4
.hword 0xe4b9,0x7d0f, 0x69fd,0x47c4, 0x2f87,0x76d9
.hword 0xe426,0x7cef, 0x69e1,0x47ed, 0x2f2a,0x76fe
.hword 0xe392,0x7cce, 0x69c5,0x4817, 0x2ecc,0x7723
.hword 0xe2ff,0x7cac, 0x69a9,0x4840, 0x2e6f,0x7748
.hword 0xe26d,0x7c89, 0x698c,0x486a, 0x2e11,0x776c
.hword 0xe1da,0x7c66, 0x6970,0x4893, 0x2db3,0x7790
.hword 0xe148,0x7c42, 0x6953,0x48bd, 0x2d55,0x77b4
.hword 0xe0b5,0x7c1e, 0x6937,0x48e6, 0x2cf7,0x77d8
.hword 0xe023,0x7bf9, 0x691a,0x490f, 0x2c99,0x77fb
.hword 0xdf91,0x7bd3, 0x68fd,0x4939, 0x2c3b,0x781e
.hword 0xdeff,0x7bac, 0x68e0,0x4962, 0x2bdc,0x7840
.hword 0xde6e,0x7b85, 0x68c4,0x498b, 0x2b7e,0x7863
.hword 0xdddc,0x7b5d, 0x68a7,0x49b4, 0x2b1f,0x7885
.hword 0xdd4b,0x7b34, 0x688a,0x49dd, 0x2ac1,0x78a6
.hword 0xdcba,0x7b0b, 0x686d,0x4a06, 0x2a62,0x78c8
.hword 0xdc29,0x7ae1, 0x6850,0x4a2f, 0x2a03,0x78e9
.hword 0xdb99,0x7ab7, 0x6832,0x4a58, 0x29a4,0x790a
.hword 0xdb08,0x7a8c, 0x6815,0x4a81, 0x2945,0x792a
.hword 0xda78,0x7a60, 0x67f8,0x4aaa, 0x28e5,0x794a
.hword 0xd9e8,0x7a33, 0x67da,0x4ad3, 0x2886,0x796a
.hword 0xd958,0x7a06, 0x67bd,0x4afb, 0x2827,0x798a
.hword 0xd8c8,0x79d8, 0x67a0,0x4b24, 0x27c7,0x79aa
.hword 0xd839,0x79aa, 0x6782,0x4b4d, 0x2768,0x79c9
.hword 0xd7aa,0x797a, 0x6764,0x4b75, 0x2708,0x79e7
.hword 0xd71b,0x794a, 0x6747,0x4b9e, 0x26a8,0x7a06
.hword 0xd68c,0x791a, 0x6729,0x4bc7, 0x2648,0x7a24
.hword 0xd5fd,0x78e9, 0x670b,0x4bef, 0x25e8,0x7a42
.hword 0xd56f,0x78b7, 0x66ed,0x4c17, 0x2588,0x7a60
.hword 0xd4e1,0x7885, 0x66d0,0x4c40, 0x2528,0x7a7d
.hword 0xd453,0x7851, 0x66b2,0x4c68, 0x24c8,0x7a9a
.hword 0xd3c5,0x781e, 0x6693,0x4c91, 0x2467,0x7ab7
.hword 0xd338,0x77e9, 0x6675,0x4cb9, 0x2407,0x7ad3
.hword 0xd2ab,0x77b4, 0x6657,0x4ce1, 0x23a7,0x7aef
.hword 0xd21e,0x777e, 0x6639,0x4d09, 0x2346,0x7b0b
.hword 0xd191,0x7748, 0x661b,0x4d31, 0x22e5,0x7b27
.hword 0xd105,0x7711, 0x65fc,0x4d59, 0x2284,0x7b42
.hword 0xd079,0x76d9, 0x65de,0x4d81, 0x2224,0x7b5d
.hword 0xcfed,0x76a1, 0x65c0,0x4da9, 0x21c3,0x7b78
.hword 0xcf61,0x7668, 0x65a1,0x4dd1, 0x2162,0x7b92
.hword 0xced6,0x762e, 0x6582,0x4df9, 0x2101,0x7bac
.hword 0xce4b,0x75f4, 0x6564,0x4e21, 0x209f,0x7bc6
.hword 0xcdc0,0x75b9, 0x6545,0x4e49, 0x203e,0x7bdf
.hword 0xcd35,0x757e, 0x6526,0x4e71, 0x1fdd,0x7bf9
.hword 0xccab,0x7542, 0x6507,0x4e98, 0x1f7b,0x7c11
.hword 0xcc21,0x7505, 0x64e9,0x4ec0, 0x1f1a,0x7c2a
.hword 0xcb97,0x74c7, 0x64ca,0x4ee8, 0x1eb8,0x7c42
.hword 0xcb0e,0x7489, 0x64ab,0x4f0f, 0x1e57,0x7c5a
.hword 0xca85,0x744b, 0x648b,0x4f37, 0x1df5,0x7c72
.hword 0xc9fc,0x740b, 0x646c,0x4f5e, 0x1d93,0x7c89
.hword 0xc973,0x73cb, 0x644d,0x4f85, 0x1d31,0x7ca0
.hword 0xc8eb,0x738b, 0x642e,0x4fad, 0x1cd0,0x7cb7
.hword 0xc863,0x734a, 0x640f,0x4fd4, 0x1c6e,0x7cce
.hword 0xc7db,0x7308, 0x63ef,0x4ffb, 0x1c0c,0x7ce4
.hword 0xc754,0x72c5, 0x63d0,0x5023, 0x1ba9,0x7cfa
.hword 0xc6cd,0x7282, 0x63b0,0x504a, 0x1b47,0x7d0f
.hword 0xc646,0x723f, 0x6391,0x5071, 0x1ae5,0x7d25
.hword 0xc5c0,0x71fa, 0x6371,0x5098, 0x1a83,0x7d3a
.hword 0xc53a,0x71b5, 0x6351,0x50bf, 0x1a20,0x7d4e
.hword 0xc4b4,0x7170, 0x6332,0x50e6, 0x19be,0x7d63
.hword 0xc42e,0x712a, 0x6312,0x510d, 0x195b,0x7d77
.hword 0xc3a9,0x70e3, 0x62f2,0x5134, 0x18f9,0x7d8a
.hword 0xc324,0x709b, 0x62d2,0x515b, 0x1896,0x7d9e
.hword 0xc2a0,0x7053, 0x62b2,0x5181, 0x1833,0x7db1
.hword 0xc21c,0x700b, 0x6292,0x51a8, 0x17d1,0x7dc4
.hword 0xc198,0x6fc2, 0x6272,0x51cf, 0x176e,0x7dd6
.hword 0xc114,0x6f78, 0x6252,0x51f5, 0x170b,0x7de9
.hword 0xc091,0x6f2d, 0x6232,0x521c, 0x16a8,0x7dfb
.hword 0xc00f,0x6ee2, 0x6211,0x5243, 0x1645,0x7e0c
.hword 0xbf8c,0x6e97, 0x61f1,0x5269, 0x15e2,0x7e1e
.hword 0xbf0a,0x6e4a, 0x61d1,0x5290, 0x157f,0x7e2f
.hword 0xbe88,0x6dfe, 0x61b0,0x52b6, 0x151c,0x7e3f
.hword 0xbe07,0x6db0, 0x6190,0x52dc, 0x14b9,0x7e50
.hword 0xbd86,0x6d62, 0x616f,0x5303, 0x1455,0x7e60
.hword 0xbd05,0x6d14, 0x614e,0x5329, 0x13f2,0x7e70
.hword 0xbc85,0x6cc4, 0x612e,0x534f, 0x138f,0x7e7f
.hword 0xbc05,0x6c75, 0x610d,0x5375, 0x132b,0x7e8e
.hword 0xbb85,0x6c24, 0x60ec,0x539b, 0x12c8,0x7e9d
.hword 0xbb06,0x6bd3, 0x60cb,0x53c1, 0x1265,0x7eac
.hword 0xba87,0x6b82, 0x60aa,0x53e7, 0x1201,0x7eba
.hword 0xba09,0x6b30, 0x6089,0x540d, 0x119e,0x7ec8
.hword 0xb98b,0x6add, 0x6068,0x5433, 0x113a,0x7ed6
.hword 0xb90d,0x6a89, 0x6047,0x5459, 0x10d6,0x7ee3
.hword 0xb890,0x6a36, 0x6026,0x547f, 0x1073,0x7ef0
.hword 0xb813,0x69e1, 0x6005,0x54a4, 0x100f,0x7efd
.hword 0xb796,0x698c, 0x5fe4,0x54ca, 0x0fab,0x7f0a
.hword 0xb71a,0x6937, 0x5fc2,0x54f0, 0x0f47,0x7f16
.hword 0xb69e,0x68e0, 0x5fa1,0x5515, 0x0ee4,0x7f22
.hword 0xb623,0x688a, 0x5f80,0x553b, 0x0e80,0x7f2d
.hword 0xb5a8,0x6832, 0x5f5e,0x5560, 0x0e1c,0x7f38
.hword 0xb52d,0x67da, 0x5f3c,0x5586, 0x0db8,0x7f43
.hword 0xb4b3,0x6782, 0x5f1b,0x55ab, 0x0d54,0x7f4e
.hword 0xb439,0x6729, 0x5ef9,0x55d0, 0x0cf0,0x7f58
.hword 0xb3c0,0x66d0, 0x5ed7,0x55f6, 0x0c8c,0x7f62
.hword 0xb347,0x6675, 0x5eb6,0x561b, 0x0c28,0x7f6c
.hword 0xb2cf,0x661b, 0x5e94,0x5640, 0x0bc4,0x7f75
.hword 0xb257,0x65c0, 0x5e72,0x5665, 0x0b60,0x7f7e
.hword 0xb1df,0x6564, 0x5e50,0x568a, 0x0afb,0x7f87
.hword 0xb168,0x6507, 0x5e2e,0x56af, 0x0a97,0x7f90
.hword 0xb0f1,0x64ab, 0x5e0c,0x56d4, 0x0a33,0x7f98
.hword 0xb07b,0x644d, 0x5dea,0x56f9, 0x09cf,0x7fa0
.hword 0xb005,0x63ef, 0x5dc8,0x571e, 0x096b,0x7fa7
.hword 0xaf8f,0x6391, 0x5da5,0x5743, 0x0906,0x7fae
.hword 0xaf1a,0x6332, 0x5d83,0x5767, 0x08a2,0x7fb5
.hword 0xaea5,0x62d2, 0x5d61,0x578c, 0x083e,0x7fbc
.hword 0xae31,0x6272, 0x5d3e,0x57b1, 0x07d9,0x7fc2
.hword 0xadbd,0x6211, 0x5d1c,0x57d5, 0x0775,0x7fc8
.hword 0xad4a,0x61b0, 0x5cf9,0x57fa, 0x0711,0x7fce
.hword 0xacd7,0x614e, 0x5cd7,0x581e, 0x06ac,0x7fd3
.hword 0xac65,0x60ec, 0x5cb4,0x5843, 0x0648,0x7fd9
.hword 0xabf3,0x6089, 0x5c91,0x5867, 0x05e3,0x7fdd
.hword 0xab81,0x6026, 0x5c6f,0x588c, 0x057f,0x7fe2
.hword 0xab10,0x5fc2, 0x5c4c,0x58b0, 0x051b,0x7fe6
.hword 0xaaa0,0x5f5e, 0x5c29,0x58d4, 0x04b6,0x7fea
.hword 0xaa30,0x5ef9, 0x5c06,0x58f8, 0x0452,0x7fed
.hword 0xa9c0,0x5e94, 0x5be3,0x591c, 0x03ed,0x7ff1
.hword 0xa951,0x5e2e, 0x5bc0,0x5940, 0x0389,0x7ff4
.hword 0xa8e2,0x5dc8, 0x5b9d,0x5964, 0x0324,0x7ff6
.hword 0xa874,0x5d61, 0x5b7a,0x5988, 0x02c0,0x7ff8
.hword 0xa806,0x5cf9, 0x5b57,0x59ac, 0x025b,0x7ffa
.hword 0xa799,0x5c91, 0x5b34,0x59d0, 0x01f7,0x7ffc
.hword 0xa72c,0x5c29, 0x5b10,0x59f4, 0x0192,0x7ffe
.hword 0xa6c0,0x5bc0, 0x5aed,0x5a18, 0x012e,0x7fff
I will see if I can find a forum who can tell me why it no longer compiles

User avatar
Pito
Posts: 1627
Joined: Sat Mar 26, 2016 3:26 pm
Location: Rapa Nui

Re: Voice changer

Post by Pito » Wed Jun 15, 2016 6:48 am

For example the standard ARM's CMSIS Cortex M3 DSP lib includes everything you need for fft/ifft
CMSIS-DSP: DSP Library Collection with over 60 Functions for various data types: fix-point (fractional q7, q15, q31) and single precision floating-point (32-bit). The library is available for Cortex-M0, Cortex-M3, and Cortex-M4. The Cortex-M4 implementation is optimized for the SIMD instruction set.
You need to apply q15 fft/ifft.

Here it works with Teensy, so it must work with stm32duino too

https://forum.pjrc.com/threads/24228-Te ... -questions
Last edited by Pito on Wed Jun 15, 2016 6:53 am, edited 1 time in total.
Pukao Hats Cleaning Services Ltd.

User avatar
RogerClark
Posts: 7447
Joined: Mon Apr 27, 2015 10:36 am
Location: Melbourne, Australia
Contact:

Re: Voice changer

Post by RogerClark » Wed Jun 15, 2016 6:53 am

Where can these libs be downloaded from ?

I did a search on "ARM CMSIS Cortex M3 DSP lib" but can't find any downloadable code.

User avatar
Pito
Posts: 1627
Joined: Sat Mar 26, 2016 3:26 pm
Location: Rapa Nui

Re: Voice changer

Post by Pito » Wed Jun 15, 2016 6:54 am

Teensy_duino works with it, so just grab it from there

https://forum.pjrc.com/threads/24228-Te ... -questions
Pukao Hats Cleaning Services Ltd.

User avatar
RogerClark
Posts: 7447
Joined: Mon Apr 27, 2015 10:36 am
Location: Melbourne, Australia
Contact:

Re: Voice changer

Post by RogerClark » Wed Jun 15, 2016 6:55 am


User avatar
Pito
Posts: 1627
Joined: Sat Mar 26, 2016 3:26 pm
Location: Rapa Nui

Re: Voice changer

Post by Pito » Wed Jun 15, 2016 7:00 am

Pukao Hats Cleaning Services Ltd.

User avatar
RogerClark
Posts: 7447
Joined: Mon Apr 27, 2015 10:36 am
Location: Melbourne, Australia
Contact:

Re: Voice changer

Post by RogerClark » Wed Jun 15, 2016 9:32 pm

@pitp

I can get the CMSIS fft q15 to compile, but at the moment the code never returns from the fft function.

I dont think its crashed, as the board still resets via USB.

I need to find an example of using this q15 function, as I am not sure whether any "init" functions are needed prior to calling it. As I know some other fft arm functions require initialisation funcs to be called first.

I found what looked like a q15 init func, but it just crashes the MCU, so I think I have an issue with data types.

Actually, what I find more interesting, is how easy it is to pull in these ARM CMSIS code libraries.

I only had to being in 7 headers and 2 C files.

So as the ARM CMSIS libs have loads of other functions, I think there is a reasonable chance someone else may find them handy.

not just FFT, there are loads of other funcs ( as I am sure you are well aware)

Post Reply