?? qpsk調制.txt
字號:
QPSK調制的DSP實現
參數設定: 采樣速率384000次/S
載波頻率48KHZ
傳輸數據速率64KB/S
漢明窗平方根升余弦滾降
滾降系數0.35
51階FIR濾波
子程序說明
data_input 子程序用來從外部讀入2b數據。
base_wave子程序用來進行基帶低通根升余弦特性濾波,形成基帶濾波。
freq_modem子程序用來將基帶波形調制到48KHZ的載波上。
輸入輸出:
程序從外部變量DATA2讀入2b數據
經過處理后,數據輸出至D/A緩沖區SBW_DAB,形成16b數據
符號設定
SW_FILR.set 500H
SW_FILI.set 600H
SW_FILL.set 80H
SW_48k.set 700H
SW_NULL.set 800H
SW_2PP.set SW_NULL+51
SW_2PN .set SW_NULL+102
SW_4PP .set SW_NULL+153
SW_4PN .set SW_NULL+204
SW_DAB .set 6000H
SW_DABL.set 200H
SW_FILIN和SW_FILOUT分別作為濾波緩沖區的入口和出口
SW_DAIN和SW_DAOUT分別作為D/A緩沖區的入口和出口
主要部分程序
psk_modem
CALL data_input
CALL base_wave
CALL freq_modem
RET
ini_mod
data_input
LD DATA2,A
AND #11B,A ;讀入2b數據
SFTL A,2 ;乘4
ADD #wave_table,A
READA DATA0;R(t)讀入點
ADD #1,A
READA DATA1;I(t)讀入點
RET
base_wave
LD SW_FILIN,A;R(t)濾波緩沖區的入口放到A中
STLM A,AR1
ADD #100H,A;I(t)濾波緩沖區的入口比R(t)大100H
STLM A,AR2
LD DATA0,A
STLM A,AR3
LD DATA1,A
STLM A,AR4
STM #50,BRC;塊重復執行51次
RPTBD change_in_pointer-1;快下界到change_in_pointer之前
STM #80H,BK ;設循環尋址的大小為80H
LD *AR3+,A
ADD *AR1,A
STL A,*AR1+%
LD *AR4+,A
ADD *AR2,A
STL A,*AR2+%
change_in_pointer
LD SW_FILIN,A;更改濾波緩沖區的入口
SUB #SW_FILR,A
ADD #6,A
AND #7FH,A
ADD #SW_FILR,A
STL A,SW_FILIN
RET
freq_modem
LD SW_DAOUT,A;將D/A緩沖區的出口放到A中
SUB SW_DAIN,A;D/A緩沖區的出口值減入口地址值
NOP
NOP
XC 2,ALEQ
ADD #SW_DABL,A
NOP
SUB #90H,A
BC sw_mod00,ALT;檢查D/A緩沖區是否滿
RSBX SXM
LD SW_FILIN,A
SUB SW_FILOUT,A
NOP
NOP
XC 2,ALT
ADD #80H,A
NOP
SUB #10H,A
SSBX SXM
BC sw_mod02,AGEQ;檢查是否可以濾波
LD BIT_FLG,A
AND #11B,A
BC sw_mod00,ANEQ;檢查D/A緩沖區是否滿
sw_mod02
LD SW_FILOUT,A
STLM A,AR2
ADD #100H,A
STLM A,AR3
LD SW_DAIN,A
ADD #SW_DAB,A;計算D/A緩沖區入口地址
STLM A,AR1
ST #3000H,DATA1
STM #SW_48K,AR4;余弦表的首地址放入AR4
STM #SW_48K+2,AR5;正弦表的首地址放入AR5
STM #7,BRC
RPTBD sw_mod01-1
STM #80H,BK
MPY *AR2,*AR4+,A
MACR *AR3,*AR5+,A;兩路信號載波調制后相加
STH A,DATA0
LD DATA1,T
MPY DATA0,A
STH A,*AR1+;保存D/A數據
LD #0,A;清除數據
STL A,*AR2+%
STL A,*AR3+%
sw_mod01
MVKD AR2,SW_FILOUT
LD SW_DAIN,A
ADD #8,A
AND #SW_DABL-1,A
STL A,SW_DAIN
sw_mod00
RET
ini_mod
SSBX FRCT
STM #SW_NULL,AR1
RPTZ A,#50
STL A,*AR1+;清空SW_NULL緩沖區
STM #SW_2PP,AR1
RPT #50
MVPD #scr_wave,*AR1+;從程序空間向數據空間讀書據
NOP
STM #50,BRC;產生2PN波形表
STM #SW_2PP,AR1;
STM #SW_2PN,AR2
RPTB scr_movd00-1
LD *AR1+,A
NEG A
STL A,*AR2+
scr_movd00
ST #5A82H,DATA0;將值0.707放入DATA0中
LD DATA0,T
STM #50,BRC
STM #SW_2PP,AR1;
STM #SW_4PP,AR2;產生4pp波形表
STM #SW_4PN,AR3;產生4PN波形表
RPTB scr_movd01-1
MPY *AR1+,A
STH A,*AR2+
NEG A
STH A,*AR3+
scr_movd01
STM #SW_48K,AR1;正弦表移入SW_48k中
RPT #0FH
MVKD #sin_tab,*AR1+
RET
wave_table
.word SW_2PP,SW_NULL;數據為00的情況
.word SW_4PP,SW_4PP
.word SW_NULL,SW_2PP;數據為01的情況
.word SW_4PN,SW_4PP
.word SW_2PN,SW_NULL;數據為10的情況
.word SW_4PN,SW_4PN
.word SW_NULL,SW_2PN;數據為11的情況
.word SW_4PP,SW_4PN
scr_wave;滾降系數為0.35的根升余弦表
.word 0fff6H,00003H,00013H,0001eH,00019H,0fffaH,0ffc1H,0ff89H,0ff85H
.word 0ffe8H,000c2H,001dcH,002a9H,0026aH,00087H,0fcf9H,0f89cH,0f53cH
.word 0f52aH,0fa7eH,00633H,01781H,02bb9H,03ed2H,04c7dH,05174H,04c7dH
.word 03ed2H,02bb9H,01781H,00633H,0fa7eH,0f52aH,0f53cH,0f89cH,Ofcf9H
.word 00087H,0026aH,002a9H,001dcH,000c2H,0ffe8H,0ff85H,0ff89H,0ffc1H
.word 0fffaH,00019H,0001eH,00013H,0fff6H
sin_tab;8點分正弦波表
.word 00000H,05a82H,07fffH,05a82H,00000H,0a57fH,08002H,0a57fH
.word 00000H,05a82H,07fffH,05a82H,00000H,0a57fH,08002H,0a57fH
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -