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

📄 lmsilter.asm

📁 《DSP原理及应用》配套源代码
💻 ASM
字号:
****************************************************** 
**************** lmsfilter for dsp ******************* 
****************************************************** 
                .mmregs
DATA_SIZE       .set     256            ;input data size
FILTER          .set     10             ;filter size
STACK_SIZE      .set     256            ;stack size

STACK           .usect   "stack",STACK_SIZE
;SYSTEM_STACK    .set     STACK_SIZE+STACK

DATA_DP         .usect   "filter_vars",0
filter          .usect   "filter_vars",FILTER*2
outputdata      .usect   "filter_vars",DATA_SIZE
errordata       .usect   "filter_vars",DATA_SIZE  


   			    .def	start


                .data
                .global   inputdata
inputdata
      .WORD 10408,    16451,    10820,    12227,    18146,    13106,    11485
      .WORD 15737,     9840,     3644,     8171,     4118,    -4355,     -624
      .WORD -2443,   -11575,   -10290,    -8288,   -16156,   -16663,   -10543
      .WORD-15433,   -17113,    -8010,   -11188,   -11286,    -3102,    -2176
      .WORD -3726,     4075,     8836,     3665,    10937,    16347,    11278
      .WORD 13449,    19214,    13116,    11330,    16515,    10916,     4581
      .WORD  7920,     4852,    -3773,    -1259,    -2437,   -12459,   -10499
      .WORD -8657,   -16091,   -15654,   -11133,   -15864,   -17015,    -8342
      .WORD-10862,   -11228,    -2376,    -1394,    -3423,     4160,     7802
      .WORD  5087,    10683,    16178,    11318,    12040,    18459,    13601
      .WORD 10019,    16146,    10320,     4708,     9071,     3873,    -4214
      .WORD  -704,    -3586,   -11606,    -9998,    -8837,   -17008,   -16095
      .WORD-10402,   -15357,   -16675,    -8536,   -11140,   -11943,    -2908
      .WORD -1887,    -4719,     5099,     7887,     5169,    10683,    16744
      .WORD 11122,    12021,    18500,    12911,    10354,    16272,    10118
      .WORD  5139,     8244,     3601,    -3640,     -574,    -3111,   -12231
      .WORD-10076,    -8626,   -17231,   -15279,   -10646,   -16684,   -17179
      .WORD -7936,   -10141,   -11216,    -2285,     -903,    -3720,     5052
      .WORD  7833,     3880,    10946,    16387,    10515,    12519,    18743
      .WORD 12257,    10662,    16038,    10388,     3906,     9196,     4417
      .WORD -4219,     -912,    -2419,   -11865,   -11209,    -9233,   -16353
      .WORD-15469,   -10824,   -15744,   -17280,    -9320,   -10469,   -11427
      .WORD -2313,     -875,    -4650,     4739,     8016,     4821,     9834
      .WORD 15507,    10613,    12142,    18944,    12333,    11383,    15673
      .WORD 10308,     4892,     8156,     4732,    -4849,     -955,    -2853
      .WORD-11303,   -11279,    -9263,   -16185,   -15864,    -9999,   -16150
      .WORD-16554,    -8656,   -10620,   -12215,    -2220,     -836,    -3474
      .WORD  4939,     9086,     4804,    10259,    15884,    10219,    12041
      .WORD 18582,    13394,    10321,    15635,    10087,     4313,     8034
      .WORD  5145,    -4469,     -908,    -2155,   -12436,   -11063,    -8792
      .WORD-16193,   -16849,   -10633,   -15990,   -16297,    -8395,   -10178
      .WORD-11597,    -2151,     -600,    -3487,     3862,     9267,     5004
      .WORD  9600,    15632,    10160,    13017,    18309,    13654,     9879
      .WORD 15890,     9795,     4551,     8900,     4029,    -4107,    -1672
      .WORD -3324,   -11575,    -9976,    -8166,   -17320,   -15900,   -10976
      .WORD-15948,   -15898,    -8530,   -10618,   -11542,    -2163,    -1343
      .WORD -4333,     5094,     8127,     4794   

                .global   referdata
referdata
      .WORD     0,     3196,     6270,     9102,    11585,    13623,    15137,    16069 
      .WORD 16384,    16069,    15137,    13623,    11585,     9102,     6270,     3196  
      .WORD     0,    -3196,    -6270,    -9102,   -11585,   -13623,   -15137,   -16069  
      .WORD-16384,   -16069,   -15137,   -13623,   -11585,    -9102,    -6270,    -3196  
      .WORD     0,     3196,     6270,     9102,    11585,    13623,    15137,    16069 
      .WORD 16384,    16069,    15137,    13623,    11585,     9102,     6270,     3196  
      .WORD     0,    -3196,    -6270,    -9102,   -11585,   -13623,   -15137,   -16069  
      .WORD-16384,   -16069,   -15137,   -13623,   -11585,    -9102,    -6270,    -3196  
      .WORD     0,     3196,     6270,     9102,    11585,    13623,    15137,    16069 
      .WORD 16384,    16069,    15137,    13623,    11585,     9102,     6270,     3196  
      .WORD     0,    -3196,    -6270,    -9102,   -11585,   -13623,   -15137,   -16069  
      .WORD-16384,   -16069,   -15137,   -13623,   -11585,    -9102,    -6270,    -3196  
      .WORD     0,     3196,     6270,     9102,    11585,    13623,    15137,    16069 
      .WORD 16384,    16069,    15137,    13623,    11585,     9102,     6270,     3196  
      .WORD     0,    -3196,    -6270,    -9102,   -11585,   -13623,   -15137,   -16069  
      .WORD-16384,   -16069,   -15137,   -13623,   -11585,    -9102,    -6270,    -3196  
      .WORD     0,     3196,     6270,     9102,    11585,    13623,    15137,    16069 
      .WORD 16384,    16069,    15137,    13623,    11585,     9102,     6270,     3196  
      .WORD     0,    -3196,    -6270,    -9102,   -11585,   -13623,   -15137,   -16069  
      .WORD-16384,   -16069,   -15137,   -13623,   -11585,    -9102,    -6270,    -3196  
      .WORD     0,     3196,     6270,     9102,    11585,    13623,    15137,    16069 
      .WORD 16384,    16069,    15137,    13623,    11585,     9102,     6270,     3196  
      .WORD     0,    -3196,    -6270,    -9102,   -11585,   -13623,   -15137,   -16069  
      .WORD-16384,   -16069,   -15137,   -13623,   -11585,    -9102,    -6270,    -3196  
      .WORD     0,     3196,     6270,     9102,    11585,    13623,    15137,    16069 
      .WORD 16384,    16069,    15137,    13623,    11585,     9102,     6270,     3196  
      .WORD     0,    -3196,    -6270,    -9102,   -11585,   -13623,   -15137,   -16069  
      .WORD-16384,   -16069,   -15137,   -13623,   -11585,    -9102,    -6270,    -3196  
      .WORD     0,     3196,     6270,     9102,    11585,    13623,    15137,    16069 
      .WORD 16384,    16069,    15137,    13623,    11585,     9102,     6270,     3196  
      .WORD     0,    -3196,    -6270,    -9102,   -11585,   -13623,   -15137,   -16069  
      .WORD-16384,   -16069,   -15137,   -13623,   -11585,    -9102,    -6270,    -3196  


                .text
                .asg     AR2,INPUTDATA
                .asg     AR3,FILTER
                .asg     AR4,OUTPUTDATA
                .asg     AR5,ERRORDATA
                .asg     AR6,REFERDATA

start:          
                SSBX     FRCT            ;打开小数计算标志位
                SSBX     INTM
                LD       #DATA_DP,DP 
                stm      #80,ar3
                rpt      #10
                mvpd     inputdata,*ar3+
                STM      #STACK,SP
                CALL     lmsfilter_start
                NOP
                NOP
                NOP
LOOP            
                B        LOOP


****************************************************** 
*****************  lms 整体程序  *********************
****************************************************** 
                .def     delta
                .def     lmsfilter_start
delta           .set     -08F5H ;delta=-0.07
one             .set     0001h    

                .text 
lmsfilter_start:
                STM      #inputdata,INPUTDATA
                STM      #filter,FILTER
                STM      #outputdata+9,OUTPUTDATA
                STM      #errordata+9,ERRORDATA
                STM      #referdata+9,REFERDATA
                STM      #filter+15,AR1         ;定义AR1为万用寄存器
                
                ;整体循环#DATA_SIZE-#FILTER次
                STM      #DATA_SIZE-10-1,BRC
                RPTB     lmsfilter_end 
                SUB      B,B 
                
                ;用LMS指令求出结果放在B的高16位中          
                RPT      #9
                LMS      *INPUTDATA+,*FILTER+
                ;取出B中高16位的结果
                STH      B,*AR1
                SUB      B,B
                LD       *AR1,B
                
                ;输出滤波结果和误差结果
                STL      B,*OUTPUTDATA+
                SUB      *REFERDATA+,B
                STL      B,*ERRORDATA
                 
                ;求出参数梯度值
                MPY      *ERRORDATA+,#delta,B 
                STH      B,*AR1
                SUB      B,B
                LD       *AR1,B
                ;一下两步的作用是使临时乘法寄存器TREG中存入参数梯度
                STL      B,*AR1
                MPY      *AR1,#one,B
                
                ;存入大循环的次数开始地址和结束地址
                PSHM     RSA
                PSHM     REA 
                PSHM     BRC
                
                ;收回已经指向下一位的输入数据指针和滤波器系数指针
                LD       *INPUTDATA-,A
                LD       *FILTER-,A  
                
                ;一下小循环是改变滤波器各系数值
                STM      #9,BRC
                RPTB     circle_end
                SUB      A,A
                LD       B,A
                MPY      *INPUTDATA-,B           ;x(n)*e*delta    
                STH      B,*AR1
                SUB      B,B
                LD       *AR1,B
                ADD      *FILTER,B
                STL      B,*FILTER-
                SUB      B,B
                LD       A,B
                NOP
circle_end:                
                NOP
                NOP
                
                ;以下程序为恢复大循环参数值
                STM      #DATA_SIZE-10-1,BRC
                RPTB     lmsfilter_end 
                POPM     BRC
                POPM     REA
                POPM     RSA
                NOP
                NOP
                LD       *INPUTDATA+,A
                LD       *INPUTDATA+,A
                LD       *FILTER+,A
                LD       *REFERDATA,A
                NOP
lmsfilter_end:
                NOP
                NOP
                RET
                .end                
                

⌨️ 快捷键说明

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