📄 fft.asm
字号:
brcc notzeroh
clr AH
notzeroh:
st Y+, AH ;/
dec CH
rjne ub_l1h
ret
rfsh_bars: ;Draw spectrum bars
cbi portd, Sync
ldi DL, LCD_H-7 ; (This routine refreshes LCD with bar length
nop
nop
nop
nop
nop ;Sync verl鋘gern
nop
nop
sbi portd, Sync ; component, 2nd value is fundamental freq
sendl:
rcall ds_hl ; and last value is highest freq)
subi DL, 8
brcc sendl
ret
make2p:
ld AH, Y+
cp AL, AH
brlo tausche1
rjmp weiter
tausche1:
mov AL, AH
rjmp weiter
make3p:
ld AH, Y+
cp AL, AH
brlo tausche3
rjmp weitert1
tausche3:
mov AL, AH
weitert1: ;AL=Max(1,2)
ld AH, Y+
cp AL, AH
brlo tausche4b
rjmp weiter
tausche4b:
mov AL, AH
rjmp weiter ;AL=Max(AL,AH)=Max(1,2,3
ds_hl: ldiw Y, LvlBuf+1
ldi CL, 16 ;24 Werte werden zu 16 zusammengefasst: 43-1333Hz
senl:
ld AL, Y+ ;1-8 8
cpi CL, 5 ;17-24 4
brlo make3p ;3 Werte zu einem zusammenfassen
cpi CL, 9 ;9-16 4
brlo make2p ;2 Werte zu einem zusammenfassen
weiter:
sub AL, DL
brcc gnull
ldi AH, 0
rjmp inull
gnull:
ldi AH, 0xFF
cpi AL, 8
brcc inull
ldi AH, bit7
loope:
subi AL, 1
brcs inull
asr AH
rjmp loope
inull:
mov AL, AH
rcall lcd_put
dec CL
brne senl
rjmp ds_hl2
make2p2:
ld AH, Y+
cp AL, AH
brlo tausche12
rjmp weiter2
tausche12:
mov AL, AH
rjmp weiter2
make3p2:
ld AH, Y+
cp AL, AH
brlo tausche32
rjmp weitert12
tausche32:
mov AL, AH
weitert12: ;AL=Max(1,2)
ld AH, Y+
cp AL, AH
brlo tausche4b2
rjmp weiter2
tausche4b2:
mov AL, AH
rjmp weiter2 ;AL=Max(AL,AH)=Max(1,2,3)
make4p2:
ld AH, Y+
cp AL, AH
brlo tausche42
rjmp weitert22
tausche42:
mov AL, AH
weitert22: ;AL=Max(1,2)
ld BL, Y+
ld BH, Y+
cp BL, BH
brlo tausche52
rjmp weitert32
tausche52:
mov BL, BH
weitert32: ;BL=Max(3,4)
cp AL, BL
brlo tausche62
rjmp weiter2 ;AL=Max(AL,BL)=Max(1,2,3,4)
tausche62:
mov AL, BL
rjmp weiter2 ;AL=Max(AL,BL)=Max(1,2,3,4)
ds_hl2: ldiw Y, LvlBuf2+5
ldi CL, 16 ;59 Werte werden zu 16 zusammengefasst: 1731-20021Hz
senl2:
ld AL, Y+ ;1-5 5
cpi CL, 2 ;17-31 2
brlo make8p2 ;8 Werte zu einem zusammenfassen
cpi CL, 4 ;17-31 2
brlo make6p2 ;6 Werte zu einem zusammenfassen
cpi CL, 6 ;23-22 2
brlo make4p2 ;4 Werte zu einem zusammenfassen
cpi CL, 9 ;17-22 3
brlo make3p2 ;3 Werte zu einem zusammenfassen
cpi CL, 12 ;5-10 3
brlo make2p2 ;2 Werte zu einem zusammenfassen
weiter2:
sub AL, DL
brcc gnull2
ldi AH, 0
rjmp inull2
gnull2:
ldi AH, 0xFF
cpi AL, 8
brcc inull2
ldi AH, bit7
loope2:
subi AL, 1
brcs inull2
asr AH
rjmp loope2
inull2:
mov AL, AH
rcall lcd_put
dec CL
brne senl2
ret
make6p2:
ld AH, Y+
cp AL, AH
brlo tausche72
rjmp weitert42
tausche72:
mov AL, AH
weitert42: ;AL=Max(1,2)
ld BL, Y+
ld BH, Y+
cp BL, BH
brlo tausche82
rjmp weitert52
tausche82:
mov BL, BH
weitert52: ;BL=Max(3,4)
cp AL, BL
brlo tausche92
rjmp weitert62 ;AL=Max(AL,BL)=Max(1,2,3,4)
tausche92:
mov AL, BL
weitert62: ;AL=Max(AL,BL)=Max(1,2,3,4)
ld BL, Y+
ld BH, Y+
cp BL, BH
brlo tausche102
rjmp weitert72
tausche102:
mov BL, BH
weitert72: ;BL=Max(5,6)
cp AL, BL
brlo tausche112
rjmp weiter2 ;AL=Max(AL,BL)=Max(1,2,3,4,5,6)
tausche112:
mov AL, BL
rjmp weiter2 ;AL=Max(AL,BL)=Max(1,2,3,4,5,6)
make8p2:
ld AH, Y+
cp AL, AH
brlo tausche122
rjmp weitert82
tausche122:
mov AL, AH
weitert82: ;AL=Max(1,2)
ld BL, Y+
ld BH, Y+
cp BL, BH
brlo tausche132
rjmp weitert92
tausche132:
mov BL, BH
weitert92: ;BL=Max(3,4)
cp AL, BL
brlo tausche142
rjmp weitert102 ;AL=Max(AL,BL)=Max(1,2,3,4)
tausche142:
mov AL, BL
weitert102: ;AL=Max(AL,BL)=Max(1,2,3,4)
ld BL, Y+
ld BH, Y+
cp BL, BH
brlo tausche152
rjmp weitert112
tausche152:
mov BL, BH
weitert112: ;BL=Max(5,6)
ld AH, Y+
ld BH, Y+
cp AH, BH
brlo tausche162
rjmp weitert122 ;AH=Max(AH,BH)=Max(7,8)
tausche162:
mov AH, BH
weitert122: ;AH=Max(AH,BH)=Max(7,8)
cp AH, BL
brlo tausche172
rjmp weitert132 ;AH=Max(AH,BL)=Max(5,6,7,8)
tausche172:
mov AH, BL
weitert132: ;AH=Max(AH,BH)=Max(5,6,7,8)
cp AL, AH
brlo tausche182
rjmp weiter2 ;AL=Max(AL,BL)=Max(1,2,3,4,5,6)
tausche182:
mov AL, BH
rjmp weiter2 ;AL=Max(AL,BL)=Max(1,2,3,4,5,6)
lcd_put:
sbis ucsra, udre
rjmp lcd_put
out udr, AL
inc BL
cpi BL, FFT_N
brne exitm
inc BH
clr BL
exitm:
ret
; These tables must be rebuilt when change FFT_N
t_cos_sin128: ; {cos(x),sin(x)} table (0 <= x < pi, in 64 steps)
.dw 32767, 0, 32727, 1607, 32609, 3211, 32412, 4807
.dw 32137, 6392, 31785, 7961, 31356, 9511, 30851, 11038
.dw 30272, 12539, 29621, 14009, 28897, 15446, 28105, 16845
.dw 27244, 18204, 26318, 19519, 25329, 20787, 24278, 22004
.dw 23169, 23169, 22004, 24278, 20787, 25329, 19519, 26318
.dw 18204, 27244, 16845, 28105, 15446, 28897, 14009, 29621
.dw 12539, 30272, 11038, 30851, 9511, 31356, 7961, 31785
.dw 6392, 32137, 4807, 32412, 3211, 32609, 1607, 32727
.dw 0, 32767, -1607, 32727, -3211, 32609, -4807, 32412
.dw -6392, 32137, -7961, 31785, -9511, 31356, -11038, 30851
.dw -12539, 30272, -14009, 29621, -15446, 28897, -16845, 28105
.dw -18204, 27244, -19519, 26318, -20787, 25329, -22004, 24278
.dw -23169, 23169, -24278, 22005, -25329, 20787, -26318, 19519
.dw -27244, 18204, -28105, 16845, -28897, 15446, -29620, 14009
.dw -30272, 12539, -30851, 11038, -31356, 9511, -31784, 7961
.dw -32137, 6392, -32412, 4807, -32609, 3211, -32727, 1607
t_hamming128: ; Hamming window (for 128 samples)
.dw 2621, 2639, 2693, 2784, 2910, 3073, 3270, 3502
.dw 3768, 4068, 4401, 4765, 5161, 5587, 6042, 6525
.dw 7036, 7571, 8132, 8715, 9320, 9945, 10588, 11249
.dw 11926, 12616, 13318, 14031, 14753, 15482, 16216, 16954
.dw 17694, 18433, 19171, 19905, 20634, 21356, 22069, 22772
.dw 23462, 24138, 24799, 25443, 26068, 26673, 27256, 27816
.dw 28352, 28862, 29345, 29800, 30226, 30622, 30987, 31319
.dw 31619, 31885, 32117, 32315, 32477, 32603, 32694, 32748
.dw 32767, 32748, 32694, 32603, 32477, 32315, 32117, 31885
.dw 31619, 31319, 30987, 30622, 30226, 29800, 29345, 28862
.dw 28352, 27816, 27256, 26673, 26068, 25443, 24799, 24138
.dw 23462, 22772, 22069, 21356, 20634, 19905, 19171, 18433
.dw 17694, 16954, 16216, 15482, 14753, 14031, 13318, 12616
.dw 11926, 11249, 10588, 9945, 9320, 8715, 8132, 7571
.dw 7036, 6526, 6042, 5587, 5161, 4765, 4401, 4068
.dw 3768, 3502, 3270, 3073, 2910, 2784, 2693, 2639
t_desc128: ; Descramble table (for 128 point FFT)
.dw 0*4, 64*4, 32*4, 96*4, 16*4, 80*4, 48*4, 112*4
.dw 8*4, 72*4, 40*4, 104*4, 24*4, 88*4, 56*4, 120*4
.dw 4*4, 68*4, 36*4, 100*4, 20*4, 84*4, 52*4, 116*4
.dw 12*4, 76*4, 44*4, 108*4, 28*4, 92*4, 60*4, 124*4
.dw 2*4, 66*4, 34*4, 98*4, 18*4, 82*4, 50*4, 114*4
.dw 10*4, 74*4, 42*4, 106*4, 26*4, 90*4, 58*4, 122*4
.dw 6*4, 70*4, 38*4, 102*4, 22*4, 86*4, 54*4, 118*4
.dw 14*4, 78*4, 46*4, 110*4, 30*4, 94*4, 62*4, 126*4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -