BPSKQPSK调制与解调DSP实现.docx

上传人:b****8 文档编号:28744489 上传时间:2023-07-19 格式:DOCX 页数:16 大小:275.13KB
下载 相关 举报
BPSKQPSK调制与解调DSP实现.docx_第1页
第1页 / 共16页
BPSKQPSK调制与解调DSP实现.docx_第2页
第2页 / 共16页
BPSKQPSK调制与解调DSP实现.docx_第3页
第3页 / 共16页
BPSKQPSK调制与解调DSP实现.docx_第4页
第4页 / 共16页
BPSKQPSK调制与解调DSP实现.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

BPSKQPSK调制与解调DSP实现.docx

《BPSKQPSK调制与解调DSP实现.docx》由会员分享,可在线阅读,更多相关《BPSKQPSK调制与解调DSP实现.docx(16页珍藏版)》请在冰豆网上搜索。

BPSKQPSK调制与解调DSP实现.docx

BPSKQPSK调制与解调DSP实现

数字调制解调的DSP实现

——BPSK、QPSK调制解调仿真

1系统的工作原理

1.1BPSK调制解调原理

在PSK调制时,载波的相位随调制信号状态不同而改变。

如果两个频率相同的载波同时开始振荡,这两个频率同时达到正最大值,同时达到零值,同时达到负最大值,此时它们就处于“同相”状态;如果一个达到正最大值时,另一个达到负最大值,则称为“反相”。

一般把信号振荡一次(一周)作为360度。

如果一个波比另一个波相差半个周期,我们说两个波的相位差180度,也就是反相。

当传输数字信号时,“1”码控制发0度相位,“0”码控制发180度相位。

载波相位只有0和π两种取值,分别对应于调制信号的“0”和“1”。

传“1“信号时,发起始相位为π的载波;当传“0”信号时,发起始相位为0的载波。

由“0”和“1”表示的二进制调制信号通过电平转换后,变成由“–1”和“1”表示的双极性NRZ(不归零)信号,然后与载波相乘,即可形成2PSK信号。

用开关电路去选择相位相差π的同频载波(如图1-1)产生。

图11

BPSK解调必须采用相干接收法(如图1-2)。

图12

1.2QPSK调制解调原理

正交相移键控(QuadraturePhaseShiftKeyin,QPSK)是一种数字调制方式。

它分为绝对相移和相对相移两种。

由于绝对相移方式存在相位模糊问题,所以在实际中主要采用相对移相方式DQPSK。

目前已经广泛应用于无线通信中,成为现代通信中一种十分重要的调制解调方式。

在四相绝对相移键控是利用载波的四种不同相位来表征数字信息的。

由于每一种载波相位代表两个比特信息,故每个四进制码元又被称为双比特码元。

双比特码元中的两个信息比特通常是按格雷码(即反射码)排列的。

图1-3(a)表示A方式时QPSK信号的矢量图,图(b)表示B方式时QPSK信号的矢量图。

图13QPSK信号的矢量图

QPSK信号常用的产生方法有三种:

正交调制法、相位选择法及脉冲插入法。

 1)正交调制法

  发送端采用正交调制法的方框图如图1-4所示,

图14QPSK调制系统方框图(正交法)

  2)相位选择法

图15相位选择法的方框图

  3)脉冲插入法

图16插入脉冲法产生QPSK信号原理方框图

QPSK信号的相干解调

图17QPSK信号的相干解调方框图

  QPSK同2PSK一样,在接收机解调时,由于相干载波相位的不确定性,使得解调后的输出信号不确定。

为了克服这种缺点,在实际通信中通常采用QDPSK系统。

2BPSK和QPSK的数学模型

2.1BPSK信号模型

BPSK信号的数学表达式为:

其中

若在某一码元持续时间T内观察是,式(1.1)可以简写为:

BPSK信号也相当于用矩形双极性不归零基带信号与载波信号相乘,故也可表示成:

2.2QPSK信号模型

BPSK信号的数学表达式为:

式中

常见的

有两种形式(见下表):

双比特码元

载波相位

A

B

A

B

0

0

0

5π/4

1

0

π/2

7π/4

1

1

π

π/4

0

1

3π/2

3π/4

3仿真结果

1、BPSK仿真结果:

BPSK调制解调过程

星座图

2、QPSK仿真结果

BPSK调制过程

4仿真代码

BPSK代码:

1.main.c

externvoidqpsk();

voidfilter(float*b,float*a,float*s,intN_b,intN_s);

#include"C54MATH.H"

DATAx[256];

DATAy[256];//正弦信号

DATAPulse[256];//被调信号

DATAPskSignal[256];//BPSK调制信号

DATAPskSignal01[256];//BPSK调制信号

DATARecMeg[256];

DATARecSig[256];

#defineN256

voidmain()

{inti,j;

for(i=0;i

{

x[i]=i*0x1000;

}

sine(x,y,N);

for(i=0;i

{

j=i/32;

switch(j%2)

{

case0:

Pulse[i]=-1;

break;

case1:

Pulse[i]=1;

break;

}

}

//调用汇编函数bpsk

bpsk();

for(i=0;i

{

PskSignal01[i]=PskSignal[i]*y[i+4];

if(PskSignal01[i]>0)

RecMeg[i]=1;

elseif(PskSignal01[i]<0)

RecMeg[i]=-1;

RecSig[i]=(RecMeg[i]+1)/2;

}

for(;;){};

}

2.psk_asm.asm

.title"psk_asm.asm"

.global_qpsk;定义为全局变量,提供给C调用

.global_y;C程序变量

.global_Pulse;C程序变量

.global_PskSignal;C程序变量

.mmregs

.text

_qpsk:

rsbxCPL

stm#8-1,AR2;循环变量256/32=8

stm#_y,AR4

stm#_Pulse,AR3

stm#_PskSignal,AR5

loop:

ld*AR3,A

bcphase0,AEQ;若为0状态信号,则相移0

sub#1,A

addm#4,AR4

bcphase1,AEQ;若为1状态信号,则相移pi

pskend:

addm#32,AR3

banzloop,*AR2-

ret

phase0:

rpt#32-1

mvdd*AR4+,*AR5+

bpskend

phase1:

rpt#32-1

mvdd*AR4+,*AR5+

addm#-36,AR4

bpskend

phase2:

rpt#32-1

mvdd*AR4+,*AR5+

addm#-40,AR4

bpskend

phase3:

rpt#32-1

mvdd*AR4+,*AR5+

addm#-44,AR4

bpskend

.end

3.bpsk.cmd

-c

-lrts.lib

-lc54math.lib

-stack0x200

-heap0x200

MEMORY

{

PAGE0:

INT_PM_DRAM:

origin=0080h,length=1000h

PAGE1:

INT_DM_1:

origin=1080h,length=01000h

}

SECTIONS

{

.text:

{}>INT_PM_DRAMPAGE0

.cinit:

{}>INT_PM_DRAMPAGE0

.switch:

{}>INT_PM_DRAMPAGE0

.data:

{}>INT_DM_1PAGE1

.stack:

{}>INT_DM_1PAGE1

.bss:

{}>INT_DM_1PAGE1

.sysmem:

{}>INT_DM_1PAGE1

.const:

{}>INT_DM_1PAGE1

.dout:

{}>INT_DM_1PAGE1

}

QPSK代码:

1.main.c

externvoidqpsk();

#include"C54MATH.H"

DATAx[256];

DATAy[256];//正弦信号

DATAPulse[256];//被调信号

DATAPskSignal[256];//QPSK调制信号

DATAPskSignal01[256];

DATARecMeg[256];

DATARecSig[256];

#defineN256

voidmain()

{

inti,j;

for(i=0;i

{x[i]=i*0x1000;

}

sine(x,y,N);

//产生一个被调信号(用-3,-1,1,3分别表示被调信号的四种状态)

for(i=0;i

{

j=i/32;

switch(j%4)

{

case0:

Pulse[i]=-3;

break;

case1:

Pulse[i]=-1;

break;

case2:

Pulse[i]=1;

break;

case3:

Pulse[i]=3;

break;

}

}

//调用汇编函数qpsk

qpsk();

for(i=0;i

for(;;){};

}

2.psk_asm.asm

.title"psk_asm.asm"

.global_qpsk;定义为全局变量,提供给C调用

.global_y;C程序变量

.global_Pulse;C程序变量

.global_PskSignal;C程序变量

.mmregs

.text

_qpsk:

rsbxCPL

stm#8-1,AR2;循环变量256/32=8

stm#_y,AR4

stm#_Pulse,AR3

stm#_PskSignal,AR5

loop:

ld*AR3,A

bcphase0,AEQ;若为0状态信号,则相移0

sub#1,A

addm#4,AR4

bcphase1,AEQ;若为1状态信号,则相移pi/2

sub#1,A

addm#8,AR4

bcphase2,AEQ;若为2状态信号,则相移pi

sub#1,A

addm#12,AR4

bcphase3,AEQ;若为3状态信号,则相移3*pi/2

pskend:

addm#32,AR3

banzloop,*AR2-

ret

phase0:

rpt#32-1

mvdd*AR4+,*AR5+

bpskend

phase1:

rpt#32-1

mvdd*AR4+,*AR5+

addm#-36,AR4

bpskend

phase2:

rpt#32-1

mvdd*AR4+,*AR5+

addm#-40,AR4

bpskend

phase3:

rpt#32-1

mvdd*AR4+,*AR5+

addm#-44,AR4

bpskend

.end

3.qpsk.cmd

-c

-lrts.lib

-lc54math.lib

-stack0x200

-heap0x200

MEMORY

{

PAGE0:

INT_PM_DRAM:

origin=0080h,length=1000h

PAGE1:

INT_DM_1:

origin=1080h,length=01000h

}

SECTIONS

{

.text:

{}>INT_PM_DRAMPAGE0

.cinit:

{}>INT_PM_DRAMPAGE0

.switch:

{}>INT_PM_DRAMPAGE0

.data:

{}>INT_DM_1PAGE1

.stack:

{}>INT_DM_1PAGE1

.bss:

{}>INT_DM_1PAGE1

.sysmem:

{}>INT_DM_1PAGE1

.const:

{}>INT_DM_1PAGE1

.dout:

{}>INT_DM_1PAGE1

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1