QPSK调制.txt
上传用户:ljj2288
上传日期:2013-05-04
资源大小:5k
文件大小:4k
源码类别:

邮电通讯系统

开发平台:

C/C++

  1. QPSK调制的DSP实现
  2. 参数设定:  采样速率384000次/S  
  3.             载波频率48KHZ
  4.             传输数据速率64KB/S
  5.             汉明窗平方根升余弦滚降
  6.             滚降系数0.35
  7.             51阶FIR滤波
  8. 子程序说明
  9.   data_input 子程序用来从外部读入2b数据。
  10.   base_wave子程序用来进行基带低通根升余弦特性滤波,形成基带滤波。
  11.   freq_modem子程序用来将基带波形调制到48KHZ的载波上。
  12. 输入输出:
  13.  程序从外部变量DATA2读入2b数据
  14.  经过处理后,数据输出至D/A缓冲区SBW_DAB,形成16b数据
  15. 符号设定
  16. SW_FILR.set 500H
  17. SW_FILI.set 600H
  18. SW_FILL.set 80H
  19. SW_48k.set 700H
  20. SW_NULL.set 800H
  21. SW_2PP.set SW_NULL+51
  22. SW_2PN .set SW_NULL+102
  23. SW_4PP .set SW_NULL+153
  24. SW_4PN .set SW_NULL+204
  25. SW_DAB .set 6000H
  26. SW_DABL.set 200H
  27. SW_FILIN和SW_FILOUT分别作为滤波缓冲区的入口和出口
  28. SW_DAIN和SW_DAOUT分别作为D/A缓冲区的入口和出口
  29. 主要部分程序
  30. psk_modem
  31.     CALL data_input
  32.     CALL base_wave
  33.     CALL freq_modem
  34.     RET
  35. ini_mod 
  36. data_input
  37.    LD DATA2,A
  38.    AND #11B,A  ;读入2b数据
  39.    SFTL A,2  ;乘4
  40.    ADD #wave_table,A
  41.    READA DATA0;R(t)读入点
  42.    ADD #1,A
  43.    READA DATA1;I(t)读入点
  44.    RET
  45. base_wave
  46.    LD SW_FILIN,A;R(t)滤波缓冲区的入口放到A中
  47.    STLM A,AR1
  48.    ADD #100H,A;I(t)滤波缓冲区的入口比R(t)大100H
  49.    STLM A,AR2
  50.    LD DATA0,A
  51.    STLM A,AR3
  52.    LD DATA1,A
  53.    STLM A,AR4
  54.    STM #50,BRC;块重复执行51次
  55.    RPTBD change_in_pointer-1;快下界到change_in_pointer之前
  56.    STM #80H,BK ;设循环寻址的大小为80H
  57.    LD *AR3+,A
  58.    ADD *AR1,A
  59.    STL A,*AR1+%
  60.    LD *AR4+,A
  61.   ADD *AR2,A
  62.   STL A,*AR2+%
  63. change_in_pointer
  64.   LD SW_FILIN,A;更改滤波缓冲区的入口
  65.   SUB #SW_FILR,A
  66.   ADD #6,A
  67.   AND #7FH,A
  68.   ADD #SW_FILR,A
  69.   STL A,SW_FILIN
  70.   RET
  71. freq_modem
  72.   LD SW_DAOUT,A;将D/A缓冲区的出口放到A中
  73.   SUB SW_DAIN,A;D/A缓冲区的出口值减入口地址值
  74.   NOP
  75.   NOP
  76.   XC 2,ALEQ
  77.   ADD #SW_DABL,A
  78.   NOP
  79.   SUB #90H,A
  80.   BC sw_mod00,ALT;检查D/A缓冲区是否满
  81.   RSBX SXM
  82.   LD SW_FILIN,A
  83.   SUB SW_FILOUT,A
  84.   NOP
  85.   NOP
  86.   XC 2,ALT
  87.   ADD #80H,A
  88.   NOP
  89.   SUB #10H,A
  90.   SSBX SXM
  91.   BC sw_mod02,AGEQ;检查是否可以滤波
  92.   LD BIT_FLG,A
  93.   AND #11B,A
  94.   BC sw_mod00,ANEQ;检查D/A缓冲区是否满
  95. sw_mod02
  96.   LD SW_FILOUT,A
  97.   STLM A,AR2
  98.   ADD #100H,A
  99.   STLM A,AR3
  100.   LD SW_DAIN,A
  101.   ADD #SW_DAB,A;计算D/A缓冲区入口地址
  102.   STLM A,AR1
  103.   ST #3000H,DATA1
  104.   STM #SW_48K,AR4;余弦表的首地址放入AR4
  105.   STM #SW_48K+2,AR5;正弦表的首地址放入AR5
  106.   STM #7,BRC
  107.   RPTBD sw_mod01-1
  108.   STM #80H,BK
  109.   MPY *AR2,*AR4+,A
  110.   MACR *AR3,*AR5+,A;两路信号载波调制后相加
  111.   STH A,DATA0
  112.   LD DATA1,T
  113.   MPY DATA0,A
  114.   STH A,*AR1+;保存D/A数据
  115.   LD #0,A;清除数据
  116.   STL A,*AR2+%
  117.   STL A,*AR3+%
  118. sw_mod01
  119.    MVKD AR2,SW_FILOUT
  120.    LD SW_DAIN,A
  121.    ADD #8,A
  122.    AND #SW_DABL-1,A
  123.    STL A,SW_DAIN
  124. sw_mod00
  125.    RET
  126. ini_mod
  127.   SSBX FRCT
  128.   STM #SW_NULL,AR1
  129.   RPTZ A,#50
  130.   STL A,*AR1+;清空SW_NULL缓冲区
  131.   STM #SW_2PP,AR1
  132.   RPT #50
  133.   MVPD #scr_wave,*AR1+;从程序空间向数据空间读书据
  134.   NOP
  135.   STM #50,BRC;产生2PN波形表
  136.   STM #SW_2PP,AR1;
  137.   STM #SW_2PN,AR2
  138.   RPTB scr_movd00-1
  139.   LD *AR1+,A
  140.   NEG A
  141.   STL A,*AR2+
  142. scr_movd00
  143.   ST #5A82H,DATA0;将值0.707放入DATA0中
  144.   LD DATA0,T
  145.   STM #50,BRC
  146.   STM #SW_2PP,AR1;
  147.   STM #SW_4PP,AR2;产生4pp波形表
  148.   STM #SW_4PN,AR3;产生4PN波形表
  149.   RPTB scr_movd01-1
  150.   MPY *AR1+,A
  151.   STH A,*AR2+
  152.   NEG A
  153.   STH A,*AR3+
  154. scr_movd01
  155.   STM #SW_48K,AR1;正弦表移入SW_48k中
  156.   RPT #0FH
  157.   MVKD #sin_tab,*AR1+
  158.   RET
  159. wave_table
  160.    .word SW_2PP,SW_NULL;数据为00的情况
  161.    .word SW_4PP,SW_4PP
  162.    .word SW_NULL,SW_2PP;数据为01的情况
  163.    .word SW_4PN,SW_4PP
  164.    .word SW_2PN,SW_NULL;数据为10的情况
  165.    .word SW_4PN,SW_4PN
  166.    .word SW_NULL,SW_2PN;数据为11的情况
  167.    .word SW_4PP,SW_4PN
  168. scr_wave;滚降系数为0.35的根升余弦表
  169.    .word 0fff6H,00003H,00013H,0001eH,00019H,0fffaH,0ffc1H,0ff89H,0ff85H
  170.    .word 0ffe8H,000c2H,001dcH,002a9H,0026aH,00087H,0fcf9H,0f89cH,0f53cH
  171.    .word 0f52aH,0fa7eH,00633H,01781H,02bb9H,03ed2H,04c7dH,05174H,04c7dH
  172.    .word 03ed2H,02bb9H,01781H,00633H,0fa7eH,0f52aH,0f53cH,0f89cH,Ofcf9H
  173.    .word 00087H,0026aH,002a9H,001dcH,000c2H,0ffe8H,0ff85H,0ff89H,0ffc1H
  174.    .word 0fffaH,00019H,0001eH,00013H,0fff6H
  175. sin_tab;8点分正弦波表
  176.    .word 00000H,05a82H,07fffH,05a82H,00000H,0a57fH,08002H,0a57fH
  177.    .word 00000H,05a82H,07fffH,05a82H,00000H,0a57fH,08002H,0a57fH
  178.    .end
  179.    
  180.