FSK调制与解调的TMS320C54X实现Word文档格式.docx
《FSK调制与解调的TMS320C54X实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《FSK调制与解调的TMS320C54X实现Word文档格式.docx(28页珍藏版)》请在冰点文库上搜索。
![FSK调制与解调的TMS320C54X实现Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/b2631469-ffe1-4753-9b6c-794cb953c651/b2631469-ffe1-4753-9b6c-794cb953c6511.gif)
(1)哈佛结构;
(2)流水线操作;
(3)专用的硬件乘法器;
(4)特殊的DSP指令;
(5)快速的指令周期。
2.2、TMS320C54X特点
TMS320C54X是为实现低功耗、高性能而专门设计的定点DSP芯片,其主要应用是无线通信系统等。
该芯片的内部结构与TMS320C5X不同,因而指令系统与TMS320C5X和TMS320C2X等是互不兼容的。
TMS320C54X的主要特点包括:
(1)运算速度快。
指令周期为25/20/15/12.5/10ns,运算能力为40/50/66/80/100MIPS;
(2)优化的CPU结构。
内部有1个40位的算术逻辑单元,2个40位的累加器,2个40位加法器,1个17×
17的乘法器和1个40位的桶形移位器。
有4条内部总线和2个地址产生器。
此外,内部还集成了维特比加速器,用于提高维特比编译码的速度。
先进的DSP结构可高效地实现无线通信系统中的各种功能,如用TMS320C54X实现全速率的GSM需12.7MIPS,实现半速率GSM需26.2MIPS,而实现全速率GSM语音编码器仅需2.3MIPS,实现IS-54/136VSELP语音编码仅需12.8MIPS;
(3)低功耗方式。
TMS320C54X可以在3.3V或2.7V电压下工作,三个低功耗方式(IDLE1、IDLE2和IDLE3)可以节省DSP的功耗,TMS320C54X特别适合于无线移动设备。
用TMS320C54X实现IS54/136VSELP语音编码仅需31.1mW,实现GSM语音编码器仅需5.6mW;
(4)智能外设。
除了标准的串行口和时分复用(TDM)串行口外,TMS320C54X还提供了自动缓冲串行口BSP(auto-BufferedSerialPort)和与外部处理器通信的HPI(HostPortInterface)接口。
BSP可提供2K字数据缓冲的读写能力,从而降低处理器的额外开销,指令周期为20ns时,BSP的最大数据吞吐量为50Mbit/s,即使在IDLE方式下,BSP也可以全速工作。
HPI可以与外部标准的微处理器直接接口。
表2.4是TMS320C54X系列部分DSP芯片比较表。
TMS320C54X
指令周期(ns)
工作电压(V)
片内RAM(字)
片内ROM(字)
串行口
BSP
HPI
C541
20/25
5/3.3/3.0
5K
28K
2个标准口
C542
10K
2K
1个TDM口
1
C543
3.3/3.0
10K
C545
6K
48K
1个标准口
C546
C548
15/20/25
32K
2
LC/VC549
10/12.5/15
3.3/2.5
16K
VC5402
10
3.3/1.8
4K
表1
TMS320C54X的资源配置
三、FSK调制与解调原理
3.1、FSK概述
FSK是移频键控的简称,故二进制移频键控常简写为2FSK。
数字调频又可称作移频键控(FSK),它是利用载频频率变化来传递数字信息。
这种调制解调方式容易实现,抗噪声和抗衰减性能较强,因此在中低速数据传输系统中得到了较为广泛的应用。
在实际应用中,应用最为泛的是2FSK,故FSK常泛指为2FSK。
2FSK信号是0符号对应于载频为W1,而1符号对应于载频W2,而且两者之间的改变是瞬间完成的。
容易想到,2FSK信号可利用一个矩形脉冲序列对一个载波进行调频而获得。
这正是频率键控通信方式早期采用的实现方法,也是利用模拟调频法实现数字调频的方法。
2FSK信号的另一产生方法便是采用键控法,即用受矩形脉冲序列控制的开关电路对两个不同的独立频率源进行选通。
3.2、FSK调制原理
2FSK信号是用载波频率的变化来表征被传信息的状态的,被调载波的频率随二进制序列0、1状态而变化,即载频为
时代表传0,载频为
时代表传1。
显然,2FSK信号完全可以看成两个分别以
和
为载频、以
为被传二进制序列的两种2ASK信号的合成。
2FSK信号的典型时域波形如图1所示,其一般时域数学表达式为:
图12FSK信号的典型时域波形
式中,
,
是
的反码,即
因为2FSK属于频率调制,通常可定义其移频键控指数为
显然,h与模拟调频信号的调频指数的性质是一样的,其大小对已调波带宽有很大影响。
2FSK信号与2ASK信号的相似之处是含有载频离散谱分量,也就是说,二者均可以采用非相干方式进行解调。
可以看出,当h<
1时,2FSK信号的功率谱与2ASK的极为相似,呈单峰状;
当h>
>
1时,2FSK信号功率谱呈双峰状,此时的信号带宽近似为:
(Hz)
2FSK信号的产生通常有两种方式:
(1)频率选择法;
(2)载波调频法。
由于频率选择法产生的2FSK信号为两个彼此独立的载波振荡器输出信号之和,在二进制码元状态转换(
或
)时刻,2FSK信号的相位通常是不连续的,这会不利于已调信号功率谱旁瓣分量的收敛。
载波调频法是在一个直接调频器中产生2FSK信号,这时的已调信号出自同一个振荡器,信号相位在载频变化时始终是连续的,这将有利于已调信号功率谱旁瓣分量的收敛,使信号功率更集中于信号带宽内。
在这里,我们采用的是频率选择法,其调制原理框图如图2所示:
图22FSK调制原理框图
从“FSK基带输入”输入的基带信号分成两路,一路经过电压比较器1(LM339)得到同基带信号极性相同的高/低电平,另一路经过电压比较器2(LM339)得到同基带信号极性相反的高/低电平,分别接至模拟开关电路1、2(74HC4066),因此当基带信号为“1”时,模拟开关1打开,模拟开关2关闭,输出第一路载波(FSK载波输入1);
当基带信号为“0”时,模拟开关1关闭,模拟开关2打开,此时输出第二路载波(FSK载波输入2),再通过叠加就得到FSK调制信号输出。
下面为2FSK硬件实现框图:
图32FSK硬件实现框图
由图3可知,从“FSK-NRZ”输入的基带信号分成两路,1路经U5(LM339)反相后接至U4B(4066)的控制端,另1路直接接至U4A(4066)的控制端。
从“FSK载波A”和“FSK载波B”输入的载波信号分别接至U4A和U4B的输入端。
当基带信号为“1”时,模拟开关U4A打开,U4B关闭,输出第一路载波;
当基带信号为“0”时,U405A关闭,U405B打开,此时输出第二路载波,再通过相加器就可以得到FSK调制信号。
3.3、FSK解调原理
FSK有多种方法解调,如包络检波法、相干解调法、鉴频法、过零检测法及差分检波法等,相应的接收系统的框图如图10-3所示。
(a)非相干方式
(b)相干方式
(c)过零检测法
图42FSK解调原理框图
这里采用的是过零检测法对FSK调制信号进行解调。
2FSK信号的过零点数随不同载频而异,故检出过零点数就可以得到关于频率的差异,这就是过零检测法的基本思想。
用过零检测法对FSK信号进行解调的原理框图如图4(c)所示。
其中整形1和整形2的功能类似于比较器,可在其输入端将输入信号叠加在2.5V上。
2FSK调制信号从“FSKIN”输入。
U6(LM339)的判决电压设置在2.5V,可把输入信号进行硬限幅处理。
这样,整形1将FSK信号变为TTL电平;
整形2和抽样电路共同构成抽样判决器,其判决电压可通过电位器进行调节。
单稳1(74LS123)和单稳2(74LS123)分别被设置为上升沿触发和下降沿触发,它们与相加器U7(74LS32)一起共同对TTL电平的FSK信号进行微分、整流处理。
再通过低通滤波器滤除高次谐波,再依次通过整形2和抽样电路共同构成抽样判决器,便能得到FSK解调信号。
其判决电压可通过标号为“2FSK判决电压调节”的电位器进行调节,抽样判决用的时钟信号就是FSK基带信号的位同步信号。
抽样判决器的时钟信号就是FSK基带信号的位同步信号,该信号应从“FSK-BS”输入,可以从信号源直接引入,也可以从同步信号恢复模块引入。
3.4、本实验采用的方法
本实验是纯数字的调制方法:
先把两种频率的波形数据存储起来,当调制数据为1时选择W1的波形输出;
当调制数据为0时,选择频率为W2(事先已设置成W1=2*W2)的波形输出。
显然这与上述的键控法是一致的。
当然可以采用其它的调制方法,但此方法最简单、运算速度也最快。
本实验采用的是过零检测法进行解调,FSK信号通过整形1(LM339)将信号高电平限幅在5V,这样使FSK信号变为CMOS电平即矩形波序列,然后分两路分别输入单稳1、2(74HC123)及相加器(74HC32),就得到了代表FSK信号过零点的脉冲序列,单稳1和单稳2分别被设置为上升沿触发和下降沿触发,它们与相加器(74HC32)一起共同对TTL电平的FSK信号进行微分、整流处理。
解调程序是基于上述过零点检测法的思想而设计的:
对输入的FSK调制信号(F1的频率是F0的两倍)的样点进行循环检测,若检测到幅值大于amplitude时,再检测下一个间隔为distance(1/F1<
distance<
1/F0)的样点的幅值;
若此值大于amplitude,说明输入信号频率为F1,否则为F0;
示意图如下:
图5零点检测法解调原理
四、FSK调制与解调的DSP软件实现
4.1、FSK调制的数字振荡器设计
频移键控FSK调制是用数字基带信号来控制高频载波频率的变化,调制后的载波信号频率代表了要传送的数字信号。
二进制FSK(2FSK)是用2个高频载波f1和f2来表示2个数字信号“1”或“0”。
2FSK调制的常用方法是将f1和f2的正弦值预先计算出来,制成一个表,DSP工作时仅做查表运算即可实现。
在这里采用数字振荡器方法,用迭代方法产生正弦信号。
其原理如下:
一个传递函数为正弦序列sinkωT的Z变换为:
其中,A=2cosωT,B=-1,C=sinωT。
设初始条件为0,求出上式的反Z变换为:
这是一个二阶差分方程,对其求单位冲击响应便可得到正弦信号sinkXT。
利用单位冲击函数x[k-1]的性质,仅当
k=1时,x[k-1]=1,得到下列递推式:
k=0时 y[0]=Ay[-1]+By[-2]+0=0
k=1时 y[1]=Ay[0]+By[-1]+C=C
k=2时 y[2]=Ay[1]+By[0]+0=Ay[1]
k=3时 y[3]=Ay[2]+By[1]
……
k=n时 y[n]=Ay[n-1]+By[n-2]
在k>
2以后,y[k]能用y[k-1]和y[k-2]计算出来,这样通过迭代就能得到一系列的y[k]值。
所设计的数字振荡器产生16kHz和32kHz的正弦信号,分别代表数据0和1,设置采样频率为96kHz,通过确定上面递归差分方程系数就可求得16kHz和32kHz正弦信号的系数(下标为0的系数是16kHz正弦信号的系数,下标为1的系数是32kHz正弦信号的系数)。
A0=2cosω0T=2cos(2π×
16000/96000)=1
B0=-1
C0=sinω0T=sin(2π×
16000/96000)=0.86602540
A1=2cosω1T=2cos(2π×
32000/96000)=-1
B1=-1
C1=sinω1T=sin(2π×
32000ˆ96000)=0.86602540
图6数字振荡器仿真波形图
DSP程序在初始化时先分别计算出产生16kHz与32kHz信号所需要的y[1]和y[2]值,然后开放定时器中断,以后每次进入定时器中断服务程序时,利用已计算出的y[1]和y[2]值重新计算出新的y[0]值,对其求单位冲击响应就可得到16kHz和32kHz的正弦信号。
4.2、FSK调制的定时与中断设计
为了保证96kHz的采样频率,需要用到TMS320C5420的中断与定时器。
定时器主要由3个寄存器组成,分别是定时器寄存器TIM,每计数一次自动减1;
定时器周期寄存器PRD,当TIM减为0后,CPU自动将PRD的值装入TIM;
定时器控制寄存器TCR。
定时器控制寄存器TCR各个比特位的具体定义如表1所示。
表2 定时器控制寄存器TCR的定义
TMS320C54X的定时器工作原理是:
当CLKOUT信号时钟沿到来时,触发PSC。
PSC是一个减1计数器,CLKOUT信号时钟沿使PSC减1,直到PSC为0,然后用TDDR重新装入PSC,同时将TIM减1,直到TIM减为0,这时CPU发出TINT中断,同时在TOUT引脚输出一个脉冲信号,脉冲宽度与CLKOUT一致,然后用PRD重新装入,重复下去直到系统或定时器复位。
当系统复位或定时器单独复位时,TIM和PRD都置成最大值FFFH,TDDR位清0,定时器控制寄存器的停止状态位TSS被清零,定时器启动,并将定时器扩展周期TDDR中的值加载到定时器预置计数器PSC中,而且将定时器周期寄存器PRD中的值重新加载到定时器寄存器TIM中。
定时器中断的频率由下式决定:
其中,tC表示CLKOUT的周期,即TINT=95kHz。
由上式可确定定时时间常数TDDR=0,PRD=333。
TMS320C54X的中断是通过中断屏蔽寄存器IMR来实现的。
IMR是一个存储器映射寄存器,用于控制中断源的屏蔽和开放。
当ST1寄存器中的INTM位为0时,全局中断允许。
IMR中的某一位为1时,该中断开放。
以下是IMR寄存器各个比特位的定义:
其中,HPINT表示HPI接口中断,INT3~INT0为外部引脚产生的中断;
TXINT和TRINT为TDM串口的发送和接收中断;
BXINT和BRINT为BSP串口的发送和接收中断;
TINT为定时器中断。
图7为2FSK调制主程序流程图,图8为中断程序流程图。
按图7和图8的流程编制程序即可实现2FSK调制功能。
图7FSK调制主程序流程图图8 中断程序流程图
4.3、FSK调制的软件实现步骤
4.3.1、添加源文件
运行CCS软件,新建一个项目,新建一个源文件,在项目中添加源文件:
在新建立了一个源文件以后,要想使用CCS编译器对该源文件进行编译还需要将源文件添加到项目中去。
添加方法是在工程管理器中右键单击FSK.pjt,在弹出的菜单中选择AddFiles,然后将刚才建立的FSK.asm文件添加到该项目中去。
图9建立并添加源文件
4.3.2、编写源程序
在工程管理器中双击FSK.asm,将出现文本编辑窗口,在该文本编辑窗口中输入如下内容:
**************************************************************************
*FSK调制程序——F0为64个点,一个周期波形;
F1为64个点,两个周期波形*
.title"
FSK.asm"
.mmregs
.copy"
FSKCOEFF.inc"
.defstart
indata.usect"
buffer"
1
outdata.usect"
32
STACK.usect"
STACK"
10
********************************************************
.text
start:
LD#indata,DP
STM#indata,AR1
input:
nop
STM#outdata,AR4
LD*AR1,A;
读入数据
BCA1,AGT;
ifA>
0,thengotoA1
STM#F0,AR3;
A=0
BOUT
A1:
STM#F1,AR3;
A=1
BOUT
OUT:
RPT#63
MVDD*AR3+,*AR4+
nop
Binput
.end
4.3.3、编写链接配置文件
vectors.obj
FSK.obj
-oFSK.out
-mFSK.map
-estart
MEMORY
{
PAGE0:
EPROM:
org=0090H,len=0F70H
VECS:
org=0080H,len=0010H
PAGE1:
DARAM:
org=2000H,len=2000H
}
SECTIONS
.text:
EPROMPAGE0
F0:
F1:
.bss:
DARAMPAGE1
STACK:
buffer:
.vectors:
VECSPAGE0
}
4.3.4、编写中断向量表文件
*********************************
*Resetvectors*
.title"
vectors.asm"
.refstart
.sect"
.vectors"
Bstart
4.3.5、建立波形文件
FSKCOEFF.inc,:
F0:
.word0,3211,6392,9512,12539,15446,18204,20787
.word23170,25330,27245,28898,30273,31357,32138,32610
.word32767,32610,32138,31357,30273,28898,27245,25330
.word23170,20787,18204,15446,12539,9512,6392,3211
.word0,-3211,-6392,-9512,-12539,-15446,-18204,-20787
.word-23170,-25330,-27245,-28898,-30273,-31357,-32138,-32610
.word-32768,-32610,-32138,-31357,-30273,-28898,-27245,-25330
.word-23170,-20787,-18204,-15446,-12539,-9512,-6392,-3211
F1:
.word0,6352,12464,18102,23054,27131,30178,32081
.word32766,32208,30428,27493,23515,18645,13067,6994
.word655,-5708,-11855,-17552,-22584,-26758,-29917,-31941
.word-32753,-32322,-30665,-27844,-23967,-19180,-13665,-7632
4.3.6、编译和链接,并装载可执行文件
把FSK.asm、vectors.asm、FSK.cmd、FSKCOEFF.inc依次添加到项目后,点击Project-CompileFile,在项目编译成功之后点击Project-Build选项对该项目进行链接,生成*.out文件。
要让程序代码在DSP内部运行必需将生成的*.OUT文件装载到DSP内部,装载方法是选择生成的FSK.out文件就可