home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Boldly Go Collection
/
version40.iso
/
TS
/
05B
/
W9GR_DSP.ZIP
/
LMS.TMS
< prev
next >
Wrap
Text File
|
1992-08-23
|
12KB
|
595 lines
IDT 'LMS'
TITL 'LMS Algorithm AutoNotcher/DeNoiser'
* COPYRIGHT (c) 1992 BY DAVID L. HERSHBERGER, W9GR
* ALL RIGHTS RESERVED
* NONCOMMERCIAL USE BY RADIO AMATEURS AND ELECTRONIC HOBBYISTS IS PERMITTED.
* THIS IS NOT PUBLIC DOMAIN SOFTWARE.
* THIS SOFTWARE MAY NOT BE USED WITHOUT A LICENSE AS THE BASIS
* FOR MANUFACTURE OF COMMERCIAL PRODUCTS.
* COMMERCIAL USE OF THIS SOFTWARE REQUIRES A LICENSE.
* LICENSING INQUIRIES MAY BE DIRECTED TO:
* QUANTICS
* P. O. BOX 2163
* NEVADA CITY, CALIFORNIA 95959-2163
* THIS TMS320C10 ASSEMBLY LANGUAGE PROGRAM IS WRITTEN FOR THE
* W9GR QUANTICS DIGITAL SIGNAL PROCESSOR DESCRIBED ON PAGE 43 OF
* THE SEPTEMBER 1992 ISSUE OF QST MAGAZINE.
* ("LOW COST DIGITAL SIGNAL PROCESSING FOR THE RADIO AMATEUR"
* BY DAVE HERSHBERGER, W9GR)
* FURTHER INFORMATION ON THE LMS ALGORITHM AS IMPLEMENTED HERE IS
* GIVEN IN THE ARTICLE "USING THE LMS ALGORITHM FOR QRM AND QRN
* REDUCTION" BY DR. STEVEN E. REYER, WA9VNJ, AND DAVID L. HERSHBERGER, W9GR,
* IN THE SEPTEMBER 1992 ISSUE OF QEX MAGAZINE.
* THE W9GR / QUANTICS DIGITAL SIGNAL PROCESSOR IS AVAILABLE IN KIT FORM
* (INCLUDING ALL PC BOARD MOUNTED COMPONENTS BUT NO ENCLOSURE OR POWER SUPPLY)
* FROM:
* QUANTICS
* P. O. BOX 2163
* NEVADA CITY, CALIFORNIA 95959
* Filter length = 24 Delay length = 65
* Both notcher and denoiser functions, selected by BIO switch
* LMS coefficients are decayed one at a time per program loop
* Each loop uses 301 instruction cycles
* FS = 5 MHZ / 301 = 16611 HZ
* BIO=1 > AUTOMATIC NOTCH
* BIO=0 > DENOISING FUNCTION
DSEG
DORG >00 PAGE 0
NBETA BSS 1 BETA VALUE (NOTCH)
NDECAY BSS 1 DECAY VALUE (NOTCH) (>8000 => NO DECAY)
CBETA BSS 1 BETA VALUE (DENOISE)
CDECAY BSS 1 DECAY VALUE (DENOISE) (>8000 => NO DECAY)
ONES BSS 1 ALL ONES FOR EX-OR
* END OF PAGE 0 TABLE READ VARIABLES
D BSS 65 INPUT SIGNAL DELAY (NOTCH)
X BSS 24 FILTER DELAY (NOTCH)
W BSS 24 LMS COEFFICIENTS
BETA BSS 1 BETA VALUE (NOTCH)
DECAY BSS 1 DECAY VALUE (>8000 => NO DECAY)
ONE BSS 1 CONSTANT 1
Y BSS 1 WIENER FIR FILTER OUTPUT
E BSS 1 ERROR SIGNAL
EBETA BSS 1 E*BETA
SQUARE BSS 1 INPUT SQUARED
LED BSS 1 LED DISPLAY
TEMP BSS 1 TEMPORARY STORAGE
HPFOUT BSS 1 HPF OUTPUT
DORG >80 PAGE 1
HPF BSS 5 HPF NETWORK COEFFICIENTS
MASK BSS 1 A/D, D/A 2'S COMPLEMENT CONVERSION MASK
LSBMAX BSS 1 8 BIT MASK
ONE1 BSS 1 CONSTANT 1
* END OF PAGE 1 TABLE READ VARIABLES
INP BSS 3 INPUT DELAY, USED FOR HPF
DENOM BSS 2 INPUT HPF DENOMINATOR DELAY
TOP EQU >8F
NFIR EQU 24 LENGTH OF WIENER FIR FILTER
NDEL EQU 65 LONG DELAY FOR NOTCHER
SDEL EQU 1 SHORT DELAY FOR DENOISER MODE
DEND
PSEG
B START
INTRPT B START
START DINT
SOVM
LDPK 0
LARP AR0
* ZERO ALL DATA MEMORY LOCATIONS
ZAC
LARK AR0,TOP
CLEAR SACL *,0
BANZ CLEAR
* STORE AWAY "1" VALUE
LACK 1
SACL ONE
* GET READY FOR TABLE READ, PAGE 0
LARK AR0,ONES ONES: LAST TABLE ENTRY
LT ONE
MPYK TBLEND
PAC
LARP AR0
* MOVE CONSTANTS TO DATA MEMORY, PAGE 0
MOVTBL TBLR *
SUB ONE
BANZ MOVTBL
* GET READY FOR TABLE READ, PAGE 1
LARK AR1,ONE1 ONE1: LAST TABLE ENTRY
LARK AR0,TBLEND1-TABLE1
LT ONE
MPYK TBLEND1
PAC
* MOVE CONSTANTS TO DATA MEMORY, PAGE 1
LARP AR1
MOVTBL1 LDPK 1
LARP AR1
TBLR *-,AR0
LDPK 0
SUB ONE
BANZ MOVTBL1
LARP AR0
LDPK 0
LARP AR0
LARK AR0,NDEL-1
LARK AR1,NFIR-1
* MAIN PROGRAM LOOP
AGAIN LDPK 1
IN INP,PA1 INPUT SAMPLE FROM A/D
OUT ONE1,PA0 START NEXT CONVERSION
ZALS INP PUT SAMPLE INTO ACC-L
XOR MASK A/D OFFSET BINARY=>2'S COMP
AND LSBMAX CLEAR ALL LOW ORDER BITS (NOISE)
SACL INP PUT BACK
* INPUT HIGHPASS FILTER:
* NUMERATOR:
ZAC
LT INP+2
MPY HPF+2
LTD INP+1
MPY HPF+1
LTD INP
MPY HPF
* DENOMINATOR:
LTA DENOM+1
MPY HPF+4
LTD DENOM
MPY HPF+3
APAC
ADD ONE1,11 ADD 0.5 TO ROUND
SACH DENOM,4 SAVE WITH SHIFT
LDPK 0
SACH HPFOUT,4 STORE ON PAGE 0 TOO
SAR AR0,TEMP STORE AR0
LACK D LOAD ACCUM WITH OFFSET
ADD TEMP ADD AR0 VALUE
SACL LED STORE USING LED AS TEMP LOCATION
LAR AR0,LED PUT INTO AR0
ZALH HPFOUT LOAD ACCUM WITH HPF OUTPUT
SACH *,0 SAVE HPF OUTPUT IN DELAY
LAR AR0,TEMP RESTORE AR0
* DECAY JUST ONE LMS COEFFICIENT (NOTCH)
* USE AR1 TO POINT TO COEFFICIENT TO BE DECAYED
* TEMPORARILY ADD W TO AR0 CONTENTS THEN RESTORE
LARP AR1 USE AR1
SAR AR1,TEMP STORE AR1
LACK W LOAD ACCUM WITH OFFSET
ADD TEMP ADD AR1 VALUE
SACL LED STORE USING LED AS TEMP LOCATION
LAR AR1,LED PUT INTO AR1
LT DECAY
MPY * MULTIPLY
PAC
SACH *,1 PUT BACK
LAR AR1,TEMP RESTORE AR1
BANZ ARDECAY
LARK AR1,NFIR-1
B BARGRA
ARDECAY NOP NOPS TO MAINTAIN SAMPLING RATE
NOP
NOP
* SQUARE INPUT FOR LED DISPLAY, 3DB/SEGMENT
BARGRA ZALH HPFOUT
SACH TEMP
LT TEMP
MPY TEMP
PAC
SACH TEMP
SUBH SQUARE
BGZ PEAK
ZALH SQUARE
SUBH ONE
ABS
SACH SQUARE
B DISPLAY
PEAK ZALH TEMP
SACH SQUARE
NOP NOPS TO MAINTAIN SAMPLING RATE
NOP
NOP
NOP
* CONVERT TO DISPLAY BY BITWISE OR
DISPLAY LAC SQUARE,12
SACH LED
LAC SQUARE,11
SACH TEMP
ZALS TEMP
OR LED
SACL LED
LAC SQUARE,10
SACH TEMP
ZALS TEMP
OR LED
SACL LED
LAC SQUARE,9
SACH TEMP
ZALS TEMP
OR LED
SACL LED
LAC SQUARE,8
SACH TEMP
ZALS TEMP
OR LED
SACL LED
LAC SQUARE,7
SACH TEMP
ZALS TEMP
OR LED
SACL LED
LAC SQUARE,6
SACH TEMP
ZALS TEMP
OR LED
SACL LED
LAC SQUARE,5
SACH TEMP
ZALS TEMP
OR LED
SACL LED
LAC SQUARE,4
SACH TEMP
ZALS TEMP
OR LED
SACL LED
LAC SQUARE,3
SACH TEMP
ZALS TEMP
OR LED
XOR ONES
SACL LED
OUT LED,PA2
* DATA DELAY MOVE
LARP AR0
BANZ WRAP
BIOZ DENAR0 TEST FOR NOTCH OR DENOISE
LARK AR0,NDEL-1 LOAD AR0 FOR LONG (AUTONOTCH) DELAY
B TWEAK
DENAR0 LARK AR0,SDEL-1 LOAD AR0 FOR SHORT (DENOISER) DELAY
B TWEAK
WRAP NOP NOPS TO MAINTAIN SAMPLING RATE
NOP
NOP
NOP
NOP
* TWEAK NOTCH COEFFICIENTS, BEFORE DOING FILTERING/DATA MOVE:
TWEAK LT EBETA
MPY X+23
PAC
ADDH W+23
SACH W+23
MPY X+22
PAC
ADDH W+22
SACH W+22
MPY X+21
PAC
ADDH W+21
SACH W+21
MPY X+20
PAC
ADDH W+20
SACH W+20
MPY X+19
PAC
ADDH W+19
SACH W+19
MPY X+18
PAC
ADDH W+18
SACH W+18
MPY X+17
PAC
ADDH W+17
SACH W+17
MPY X+16
PAC
ADDH W+16
SACH W+16
MPY X+15
PAC
ADDH W+15
SACH W+15
MPY X+14
PAC
ADDH W+14
SACH W+14
MPY X+13
PAC
ADDH W+13
SACH W+13
MPY X+12
PAC
ADDH W+12
SACH W+12
MPY X+11
PAC
ADDH W+11
SACH W+11
MPY X+10
PAC
ADDH W+10
SACH W+10
MPY X+9
PAC
ADDH W+9
SACH W+9
MPY X+8
PAC
ADDH W+8
SACH W+8
MPY X+7
PAC
ADDH W+7
SACH W+7
MPY X+6
PAC
ADDH W+6
SACH W+6
MPY X+5
PAC
ADDH W+5
SACH W+5
MPY X+4
PAC
ADDH W+4
SACH W+4
MPY X+3
PAC
ADDH W+3
SACH W+3
MPY X+2
PAC
ADDH W+2
SACH W+2
MPY X+1
PAC
ADDH W+1
SACH W+1
MPY X
PAC
ADDH W
SACH W
* NOTCHER/DENOISER FIR WIENER FILTER:
ZAC
LT X+23
MPY W+23
LTD X+22
MPY W+22
LTD X+21
MPY W+21
LTD X+20
MPY W+20
LTD X+19
MPY W+19
LTD X+18
MPY W+18
LTD X+17
MPY W+17
LTD X+16
MPY W+16
LTD X+15
MPY W+15
LTD X+14
MPY W+14
LTD X+13
MPY W+13
LTD X+12
MPY W+12
LTD X+11
MPY W+11
LTD X+10
MPY W+10
LTD X+9
MPY W+9
LTD X+8
MPY W+8
LTD X+7
MPY W+7
LTD X+6
MPY W+6
LTD X+5
MPY W+5
LTD X+4
MPY W+4
LTD X+3
MPY W+3
LTD X+2
MPY W+2
LTD X+1
MPY W+1
LTD X
MPY W
APAC
ADD ONE,15 ADD 0.5 TO ROUND
SACH Y,0
* E = D - Y
ZALH HPFOUT
SUBH Y
SACH E
LT E
MPY BETA
PAC
SACH EBETA
* TAKE DATA FROM DELAY LINE AND PUT IT IN FIR FILTER
SAR AR0,TEMP STORE AR0
LACK D LOAD ACCUM WITH OFFSET
ADD TEMP ADD AR0 VALUE
SACL LED STORE USING LED AS TEMP LOCATION
LAR AR0,LED PUT INTO AR0
ZALH *
SACH X
LAR AR0,TEMP RESTORE AR0
BIOZ DENOISE TEST FOR NOTCH OR DENOISE
* OUTPUT NOTCHED SIGNAL TO DAC
ZALS E NOTCHED OUTPUT SIGNAL
LDPK 1
XOR MASK 2'S COMP=>OFFSET BINARY
LDPK 0
SACL TEMP SAVE IT
OUT TEMP,PA1 TO D/A CONV
* LOAD NOTCH VALUES FOR DECAY AND BETA
ZALH NDECAY
SACH DECAY
ZALH NBETA
SACH BETA
B AGAIN
* OUTPUT DENOISED SIGNAL TO DAC
DENOISE ZALS Y CORRELATOR (DENOISED)
LDPK 1
XOR MASK 2'S COMP=>OFFSET BINARY
LDPK 0
SACL TEMP SAVE IT
OUT TEMP,PA1 TO D/A CONV
* LOAD DENOISE VALUES FOR DECAY AND BETA
ZALH CDECAY
SACH DECAY
ZALH CBETA
SACH BETA
B AGAIN
TABLE DATA >1000 NOTCHER BETA VALUE
DATA >7FE4 NOTCHER DECAY VALUE (>8000 => NO DECAY)
DATA >1800 DENOISE BETA VALUE
DATA >7D80 DENOISE DECAY VALUE (>8000 => NO DECAY)
TBLEND DATA ?1111111111111111 ONES
* 0.5 DB/40 DB ELLIPTIC IIR HPF
* PASS 300 HZ REJ 35 HZ
* HPF COEFFICIENTS:
TABLE1 DATA 3644,-7288,3644,7700,-3644
DATA ?1000000000000000 A/D, D/A 2'S COMPLEMENT CONVERSION MASK
DATA ?1111111100000000 A/D 8 BIT MASK
TBLEND1 DATA ?0000000000000001 CONSTANT ONE
* COPYRIGHT NOTICE
* ASCII DATA STRING EMBEDDED IN THE FOLLOWING DATA STATEMENTS:
* Copyright (c) 1992 by David L. Hershberger W9GR,
* DBA Quantics, P. O. Box 2163, Nevada City, CA 95959-2163.
* All rights reserved.
DATA >4343,>6F6F,>7070,>7979,>7272,>6969,>6767,>6868
DATA >7474,>2020,>2828,>6363,>2929,>2020,>3131,>3939
DATA >3939,>3232,>2020,>6262,>7979,>2020,>4444,>6161
DATA >7676,>6969,>6464,>2020,>4C4C,>2E2E,>2020,>4848
DATA >6565,>7272,>7373,>6868,>6262,>6565,>7272,>6767
DATA >6565,>7272,>2020,>5757,>3939,>4747,>5252,>2C2C
DATA >2020,>4444,>4242,>4141,>2020,>5151,>7575,>6161
DATA >6E6E,>7474,>6969,>6363,>7373,>2C2C,>2020,>5050
DATA >2E2E,>2020,>4F4F,>2E2E,>2020,>4242,>6F6F,>7878
DATA >2020,>3232,>3131,>3636,>3333,>2C2C,>2020,>4E4E
DATA >6565,>7676,>6161,>6464,>6161,>2020,>4343,>6969
DATA >7474,>7979,>2C2C,>2020,>4343,>4141,>2020,>3939
DATA >3535,>3939,>3535,>3939,>2D2D,>3232,>3131,>3636
DATA >3333,>2E2E,>2020,>4141,>6C6C,>6C6C,>2020,>7272
DATA >6969,>6767,>6868,>7474,>7373,>2020,>7272,>6565
DATA >7373,>6565,>7272,>7676,>6565,>6464,>2E2E
DEND
END