《2FSK调制解调系统设计(共32页).doc》由会员分享,可在线阅读,更多相关《2FSK调制解调系统设计(共32页).doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上2FSK调制解调系统设计作者姓名:舒珑塔(0) 晋良斌(9)专业名称:2013级信息工程指导教师:刘晓丽 讲师专心-专注-专业摘要2FSK是一种在无线通信中很有吸引力的数字调制方式,目前在短波,微波和卫星通信中均被采用。随着超大规模集成电路技术和计算机技术的飞速发展,数字信号处理(DSP)技术在通信领域中已有了广泛的应用。本论文研究并实现了基于DSP的全数字2FSK发送与接收系统。本文分析并防真了基于直接数字频率合成原理的2FSK全数字调制的方法;分析并防真了基于差分基带相位傅立叶变换的载波频偏和位定时算法.最终得到结果如下: 1.实
2、现了数字的2FSK数字化调制。本文在独立设计的DSP系统上进行了调制实验。通过改变程序中的参数,成功实现了多种速率的数据发送。 2.实现了2FSK信号的数字化接收。接收工作包括数据的读入,载波频偏估计,位同步,解调。 关键词:2FSK 调制 同步 解调Abstract2fsk is a very attractive digital modulation in a wireless communication method, currently in HF, are used in microwave and sate
3、llite communications.As VLSI Technology and the rapid development of computer technology, digital signal processing ( DSP ) technology in a wide range of applications in the field of communication.This thesis research and realization of DSP Based digital 2fsk sending and receiving systems. Analysis
4、and prevention of this article is based on the principle of direct digital frequency synthesis 2fsk digital modulation method ; analysis and prevention is based on the difference of base - band phase of the Fourier transform algorithm of bit timing and carrier frequency offset.Final results are as f
5、ollows :1. Enabling digital 2fsk digital modulation. This article about independent Design of DSP system modulation experiment. By changing the parameters in the program, the successful implementation of a variety of data sending rate.2. Implements 2fsk digital signals received. Receiving the data i
6、s read into the carrier frequency offset estimation, bit synchronization, and demodulation.Keywords: 2fsk,modulation,Synchronized,demodulation目录前言课题主要研究2FSK信号的调制解调系统的实现,完成对数字信号的调制及解调,使系统简单,并要调制解调过程容易实现,能正确的完成调制解调任务。 在现代数字通信系统中,频带传输系统的应用最为突出。用基带数字信号控制高频载波,把基带数字信号变换为频带数字信号的过程称为数字调制,已调信号通过信道传输到接收端
7、,在接收端通过解调器把频带数字信号还原成基带数字信号,这种数字信号的反变换称为数字解调,把包含调制和解调过程的传输系统叫做数字信号的频带传输系统。数字调制解调技术是现代通信的一个重要的内容,在数字通信系统中,由于基带数字信号包含了丰富的低频部分,如果要远距离传输,特别是在有限带宽的高频信道无线或光纤信道传输时,必须对数字信号进行载波调制,使基带信号的功率谱搬移到较高的载波频率上,这就称为数字调制(Digital Modulation) 。它可以分别对载波的幅度、频率、相位进行调制,于是有ASK(移幅键控) 、FSK(移频键控) 、PSK(移相键控)
8、60;等调制方式。数字调制同时也是时分复用的基本技术,其中FSK 是利用数字信号去调制载波的频率,是信息传输较早的一种传输方式,(2FSK) 在通信系统中应用广泛。以数字信号作为调制信号的调制技术。一般采用正弦波作为载波,这种数字调制又称为载波键控。用电键进行控制,这是借用了电报传输中的术语。载波键控是以数字信号作为电码,用它对正弦载波进行控制,使载波的某个参数随电码变化。 FSK(Frequency-shift keying)- 频移键控是利用载波的频率变化来传递数字信息。它是利用基带数字信号离散取值特点去键控载波频率以传递信息的一种数字调制技术。是信息传输中使用得较早的
9、一种调制方式,它的主要优点是: 实现起来较容易,抗噪声与抗衰减的性能较好。在中低速数据传输中得到了广泛的应用。1二进制频移键控(2FSK)1.1 FSK的基本原理FSK(Frequency-shift keying)频移键控-利用载频频率变化来传递数字信息,是信息传输中使用得较早的一种调制方式。主要优点:1. 实现起来较容易。2. 抗噪声与抗衰减的性能较好。3. 在中低速数据传输中得到了广泛的应用。 FSK用载波频率的变化来表征被传信息的状态的,被调载波的频率随二进制序列0、1状态而变化,即载频为时代表传0,载频为时代表传1。图一:2FSK的典型时域波形1.2 2FSK基本原理A. 表达式:在
10、2FSK中,载波的频率随二进制基带信号在f1和f2两个频率点间变化。故其表达式为B. 典型波形:由图可见,2FSK 信号的波形(a)可以分解为波形(b)和波形(c),也就是说,一个2FSK信号可以看成是两个不同载频的2ASK信号的叠加。因此,2FSK信号的时域表达式又可写成式中 g(t) 单个矩形脉冲,Ts 脉冲持续时间; jn和qn分别是第n个信号码元(1或0)的初始相位,通常可令其为零。因此,2FSK信号的表达式可简化为 1.2.1 2FSK信号的产生方法 1) 采用模拟调频电路来实现:信号在相邻码元之间的相位是连续变化的。2) 采用键控法来实现:相邻码元之间的相位不一定连续。 图二:信号
11、产生流程图2 调制原理从2FSK的调制方法有两种:(1)频率选择法;(2)载波调频法。不同的方法有不同的优缺点,在不同的情况下使用不同的方法。2FSK调制采用查表法,可以实现较好的实时性,特别适用于通信载波的生成。2.1 2FSK调制原理2FSK信号的产生通常有两种方式:(1)频率选择法;(2)载波调频法。l 频率选择法-产生的2FSK信号为两个彼此独立的载波振荡器输出信号之和,在二进制码元状态转换(或)时刻,2FSK信号的相位通常是不连续的,这会不利于已调信号功率谱旁瓣分量的收敛。l 载波调频法-在一个直接调频器中产生2FSK信号,这时的已调信号出自同一个振荡器,信号相位在载频变化时始终是连
12、续的,这将有利于已调信号功率谱旁瓣分量的收敛,使信号功率更集中于信号带宽内。 2.2 2FSK调制算法2FSK调制就是把输入数字序列变成适合于信道传输的变频正弦波-2FSK的DSP实现关键就是产生正弦或余弦波形。产生正弦波的方法有差分迭代法、泰勒级数展开法、查表法等多种方法。2FSK调制采用查表法,可以实现较好的实时性,特别适用于通信载波的生成。在DSP 的程序存储空间,使用Q15 定点数格式在0,2上以2/N的相位间隔固化N 点正弦值,以供查表(这些值可由MATLAB软件首先计算好),在此取N=12。这样对于F0和F1的取样间隔分别为: 使用DSP定时器T0,用来实现对数据解调DAC输出速率
13、的控制。这样,如要实现12Kbps的数传输速率,需要将DSP定时器T0的溢出率设置为192KHz。2.3 调制主程序流程图本文使用查表法提供2FSK调制所需要的两路正弦波,即sin0_table和sin1_table,当发送的数据为“0”时是发送sin0的数据,当发送的数据为“1”是发送sin1的数据。初始化完后,接收数据,判断“0”或“1”,打开中断,则定时器每隔一个周期产生一次中断,中断服务程序则完成一个采样点的输出。一个码元周期结束后,关中断,判断下一个发送数据,继续循环。图三:调至主程序流程图3解调原理3.1常见解调方法解调的原理就是将2FSK 信号分解为上下两路分别进行解调,然后进行
14、判别。2FSK信号的解调方法有:如包络检波法、相干解调法、鉴频法、过零检测法及差分检波法等。1) 非相干解调: 2) 相干解调:相干解调器的一般模型为相干解调器原理:为了无失真地恢复原基带信号,接收端必须提供一个与接收的已调载波严格同步(同频同相)的本地载波(称为相干载波),它与接收的已调信号相乘后,经低通滤波器取出低频分量,即可得到原始的基带调制信号。已调信号的一般表达式为与同频同相的相干载波c(t)相乘后,得经低通滤波器后,得到因为sI(t)是m(t)通过一个全通滤波器HI (w) 后的结果,故上式中的sd(t)就是解调输出,即 3) 过零检测法: 3.2 实验解调算法算法的基本思想是已调
15、信号和它的延时信号相乘,然后经过低通滤波,根据滤波结果的符号判断发送信号的值,从而实现信号的解调。 前面一部分是仅与k有关的常数。后面一部分是与n有关的高频分量,可通过对称系数低通滤波器h(n)来滤除。低通滤波器h(n)的截止频率设为12KHz,通过该低通滤波器后得到:k的选择是设计解调器的关键,应使差值: 最后,以利于正确区分两种频率,降低判决的误码率。根据实际的测试得到,当k=2时,可以得到较好的区分度。经过低通滤波后的数据U(n)经过判决算法后,可以得到最终所要的解调数据Y(n)。4实验流程4.1调制实验本次实验是2FSK基于DSP的调制实验,是在Code Composer Studio
16、2.2上实现的。4.1.1调制主程序详见附录1。4.1.2调制过程将实验原程序中的FSK_DATA数据变更为0x6b17。如图所示。在软件频率显示图中,将属性变为如图所示的情况。在经过程序和软件上的调试后,最终我们可以得到频率结果图。4.2解调实验本次实验是2FSK基于DSP的解调实验,是在Code Composer Studio2.2上实现的。4.2.1 解调主程序详见附录1。4.2.2 解调过程将实验原程序中的FSK调制数据改为。将频率显示图的属性更改为如图的属性,如此可方便的出最后的结果图。经过程序和软件属性的修改,得到了如图所示的结果图,我们一开始输入的FSK解调数为,可以从图上看出数
17、据为。是相符合的。总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。这次课程设计,至今我仍感慨颇多,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕
18、竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以所学过的知识理解得不够深刻,掌握得不够牢固。 这次课程设计历时两个星期多左右,通过这两个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。参考文献1 解月珍.秦履多.谢沅清.信号产生电路M.电子工业出版,1994.2 王慕坤.通信原理M.哈尔滨工业大学出版社,2003.3 鲜继清.张德民.现代通信系统M.西安电子科技大学出版社,2002.4 阎石.数字电子技术基础M.高等教育出版社,2006.5 苏涛.DSP实用技术M.西安电子科技
19、大学出版社,2002.6 高海林,钱满义.DSP技术及其应用M.北京交通大学出版社.2009.附件1 实验程序A1.1 调制主程序#include "myapp.h"int const sin0_table16=0, 1158,1638,1158,0,-1159,-1638,-1158,0, 1158,1638,1158,0,-1159,-1638,-1158;int const sin1_table16=0, 1254,2317,3027,3276,3027,2317,1254,0,-1254,-2317,-3027,-3276,-3027,-2317,-1254;/in
20、t const sin1_table16=0, 627,1158,1514,1638,1514,1158,627,0,-627,-1159,-1514,-1638,-1513,-1158,-626;/int const sin0_table16=0, 1158,1638,1158,0,-1159,-1638,-1158,0, 1158,1638,1158,0,-1159,-1638,-1158;unsigned int FSK_DATA = 0x6b17;unsigned int FSK_Tran_BUFF ;/变量的地址可以查看 工程目录中的.map文件(可以txt文本打开) 本例地址为0x
21、2001unsigned int FSK_Tran_Flag = 0;/定时中断控制位unsigned int Counter;unsigned int Counter0;unsigned int Counter1;unsigned int Temp_DATA;void main( void ) / unsigned int Counter; c54init(); asm(" SSBX CPL"); /需要注意的是函数中的局部变量编译成汇编后会进行直接寻址, /因此必须初始化DP页指针,这样在函数中使用局部变量就不会出现问题。 asm(" LD #0x40,DP&
22、quot;); /同样需要将SP指针初始化一下 SP = 0x3400; / asm(" RSBX INTM "); initCLK(CPU_SPEED_160M); initInterrupt(); asm(" rsbx INTM ");/开全局开中断 TCR = 0x0020;/TSS=0 Timer start,TRB=1 Reload Temp_DATA = FSK_DATA; for(Counter=0;Counter<16;Counter+) if(FSK_DATA&0x0001) sin0_Trans(); FSK_DATA
23、= FSK_DATA >> 1; else sin1_Trans(); FSK_DATA = FSK_DATA >> 1; /port8000=0; /port8000=0x8888; /port8000=0;/ for(;);void sin0_Trans(void)/unsigned int i;/unsigned int Counter0;for(Counter0=0;Counter0<16;Counter0+)while(!FSK_Tran_Flag);FSK_Tran_BUFF = sin0_tableCounter0;/在此加断点FSK_Tran_Fl
24、ag = 0;void sin1_Trans(void)/unsigned int i;/unsigned int Counter1;for(Counter1=0;Counter1<16;Counter1+)while(!FSK_Tran_Flag); FSK_Tran_BUFF = sin1_tableCounter1;/在此加断点FSK_Tran_Flag = 0;interrupt void TINT0_ISR( void ) FSK_Tran_Flag = 1; A1.2 解调主程序R#include "myapp.h"#include "math.
25、h"/*FSK延时相乘非相干解调测试程序*Fc=24kHz,F0=16KHz,F1=32KHz,Fs=192Khz *系数对称的FIR滤波器*N=8,h(n)=h(N-1-n)*y(n)=h0*x(n)+x(n-7)+h1*x(n-1)+x(n-6)* +h2*x(n-2)+x(n-5)+h3*x(n-3)+x(n-4)*/-所有全局变量的地址可以在工程目录的.map文件中查看-/本程序中先关变量的地址如下,程序如有改动,地址会有变动/*GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name address name- -d0 _DEC_By_NU
26、Mce _DEC_DATA_BEFcd _DEC_DATA_CURRd3 _DEC_DATA_Serd6 _DEC_Flag_Xcc _DEC_INcf _DEC_NUMd1 _DEC_NUM_Xd7 _DEC_OUTe3 _DSIP _FIRBUFFb _FIR_COEFf _FSK_DATA _LPFOUTd2 _ONCE_DEC_DONEdc _TINT0_ISRe4 _Temp_DATA*/int const FIR_COEF4=0x0005, 0x21AF,0x18AB,0x1C42;/FIR滤波器系数/int const FIR_COEF4=18*32768/,26316*3276
27、8/,19272*32768/,22079*32768/;/FIR滤波器系数/int const FIR_COEF4=0.3298*32768,0.4121*32768,0.4483*32768,0.7211*32768;/int const FIR_COEF4=0.001*32768,0.56*32768,0.93*32768,0.46*32768;/*前半部分噪音*后半部分FSK调制数据*F0和F1的余弦表*F0:32767,28508,16384,0,-16384,-28508,-32767,-28508,-16384, 0,16384,28508,*F1:28508,0,-28508,
28、-28508,0,28508,28508,0,-28508,-28508, 0,28508,*FSK调制数据表示"",程序运行结束后可以在DEC_OUTDataSer_Num数组中看到*/int const FSK_DATADataNum= /*噪音 64个点18295,-6420,19759,-29306,6924,-10388,12834,12498,-7547,0,-18295,6420,6084,10388,0,-8530,-12834,6420,622,18918,-7547,-6420,-6084,-10388,25843,-10388,19759,-25338
29、,-622,0,622,25338,-19759,10388,-25843,10388,6084,6420,7547,-18918,-622,-6420,12834,8530,0,-10388,-6084,-6420,18295,0,7547,-12498,-12834,10388,-6924,29306,-19759,6420,-18295,0,18295,-6420,19759,-29306, /*FSK调制数据11*16 0x0000,0x30FB,0x5A82,0x7641,0x7FFF,0x7641,0x5A82,0x30FB,0x0000,0xCF05,0xA57E,0x89BF,
30、0x8000,0x89BF,0xA57E,0xCF05,0x0000,0x5A82,0x7FFF,0x5A82,0x0000,0xA57E,0x8000,0xA57E,0x0000,0x5A82,0x7FFF,0x5A82,0x0000,0xA57E,0x8000,0xA57E,0x0000,0x5A82,0x7FFF,0x5A82,0x0000,0xA57E,0x8000,0xA57E,0x0000,0x5A82,0x7FFF,0x5A82,0x0000,0xA57E,0x8000,0xA57E,0x0000,0x30FB,0x5A82,0x7641,0x7FFF,0x7641,0x5A82
31、,0x30FB,0x0000,0xCF05,0xA57E,0x89BF,0x8000,0x89BF,0xA57E,0xCF05,0x0000,0x5A82,0x7FFF,0x5A82,0x0000,0xA57E,0x8000,0xA57E,0x0000,0x5A82,0x7FFF,0x5A82,0x0000,0xA57E,0x8000,0xA57E,0x0000,0x30FB,0x5A82,0x7641,0x7FFF,0x7641,0x5A82,0x30FB,0x0000,0xCF05,0xA57E,0x89BF,0x8000,0x89BF,0xA57E,0xCF05,0x0000,0x5A8
32、2,0x7FFF,0x5A82,0x0000,0xA57E,0x8000,0xA57E,0x0000,0x5A82,0x7FFF,0x5A82,0x0000,0xA57E,0x8000,0xA57E,0x0000,0x5A82,0x7FFF,0x5A82,0x0000,0xA57E,0x8000,0xA57E,0x0000,0x5A82,0x7FFF,0x5A82,0x0000,0xA57E,0x8000,0xA57E,0x0000,0x30FB,0x5A82,0x7641,0x7FFF,0x7641,0x5A82,0x30FB,0x0000,0xCF05,0xA57E,0x89BF,0x80
33、00,0x89BF,0xA57E,0xCF05,0x0000,0x30FB,0x5A82,0x7641,0x7FFF,0x7641,0x5A82,0x30FB,0x0000,0xCF05,0xA57E,0x89BF,0x8000,0x89BF,0xA57E,0xCF05,0x0000,0x30FB,0x5A82,0x7641,0x7FFF,0x7641,0x5A82,0x30FB,0x0000,0xCF05,0xA57E,0x89BF,0x8000,0x89BF,0xA57E,0xCF05;/*32767,28508,16384,0,-16384,-28508,-32767,-28508,-1
34、6384, 0,16384,28508,28508,0,-28508,-28508,0,28508,28508,0,-28508,-28508, 0,28508,32767,28508,16384,0,-16384,-28508,-32767,-28508,-16384, 0,16384,28508,32767,28508,16384,0,-16384,-28508,-32767,-28508,-16384, 0,16384,28508,28508,0,-28508,-28508,0,28508,28508,0,-28508,-28508, 0,28508,32767,28508,16384,
35、0,-16384,-28508,-32767,-28508,-16384, 0,16384,28508,28508,0,-28508,-28508,0,28508,28508,0,-28508,-28508, 0,28508,28508,0,-28508,-28508,0,28508,28508,0,-28508,-28508, 0,28508,32767,28508,16384,0,-16384,-28508,-32767,-28508,-16384, 0,16384,28508,28508,0,-28508,-28508,0,28508,28508,0,-28508,-28508, 0,2
36、8508,28508,0,-28508,-28508,0,28508,28508,0,-28508,-28508, 0,28508;*/int FIRBUFF8=0,0,0,0,0,0,0,0;/FIR滤波器输入缓冲区intLPFOUTDataNum;/滤波器输出intDEC_IN=0;/判决器输入intDEC_DATA_CURR=0;/当前采样点判决值intDEC_DATA_BEF=0;/前一次采样点判决值intDEC_NUM=0;/判决用计数器intDEC_By_NUM=0;/判决用计数器intDEC_NUM_X=0;/周期计数器intONCE_DEC_DONE=0;/一次有效判决结束in
37、tDEC_DATA_SerDEC_PASS_NUM=0,0;intDEC_Flag_X=0;/当前判决码元符号标志intDEC_OUTDataSer_Num=0,0,0,0,0,0,0,0,0,0,0,0;/判决器输出,结果存储在这里long Temp_DATA=0;/暂存数据int DSIP=0;/显示变量void main( void ) int Counter,Counter01; c54init(); asm(" SSBX CPL"); /需要注意的是函数中的局部变量编译成汇编后会进行直接寻址, /因此必须初始化DP页指针,这样在函数中使用局部变量就不会出现问题。
38、asm(" LD #0x40,DP"); /同样需要将SP指针初始化一下 SP = 0x3400; / asm(" RSBX INTM "); initCLK(CPU_SPEED_160M); initInterrupt(); asm(" SSBX INTM ");/管全局开中断 /TCR = 0x0020;/TSS=0 Timer start,TRB=1 Reload asm(" SSBX FRCT ");/所有数乘法都是小数乘 for(Counter=0;Counter<DataNum;Counter+)
39、 Temp_DATA = FSK_DATACounter*FSK_DATACounter+DELAY_MUL_NUM;/延时相乘, FIRBUFF7 = Temp_DATA>>16;/取乘积后的高16位,将最新样点放置在FIR滤波器缓冲区最新的位置 /Temp_DATA = FIR_COEF0*(FIRBUFF0+FIRBUFF7)+FIR_COEF1*(FIRBUFF1+FIRBUFF6)+FIR_COEF2*(FIRBUFF2+FIRBUFF5)+FIR_COEF3*(FIRBUFF3+FIRBUFF4);/FIR滤波器计算 /asm(" RSBX SXM "
40、;); Temp_DATA = (long)(FIR_COEF0*(FIRBUFF0+FIRBUFF7)+(long)(FIR_COEF1*(FIRBUFF1+FIRBUFF6)+(long)(FIR_COEF2*(FIRBUFF2+FIRBUFF5)+(long)(FIR_COEF3*(FIRBUFF3+FIRBUFF4);/FIR滤波器计算 for(Counter01=0;Counter01<7;Counter01+) FIRBUFFCounter01 = FIRBUFFCounter01+1;/更新FIR滤波器缓冲区数据 LPFOUTCounter= Temp_DATA>&g
41、t;16; DEC_IN = LPFOUTCounter ; DSIP = LPFOUTCounter ; /-判决开始- if(!ONCE_DEC_DONE)/如果ONCE_DEC_DONE已被设置表示已找到一个有效样点 if(DEC_IN<0) DEC_IN = 65536 - DEC_IN;/如果是负数的话,将其转换为正数 DEC_Flag_X = 0; else DEC_Flag_X = 1; if(DEC_IN >= DATA_THD)/是一个有效样点 /DEC_DATA_CURR = 1;/当前采样点判决值 DEC_DATA_SerDEC_NUM = DEC_Flag_X; DEC_NUM+;/判决计数器+1 if(DEC_NUM >=2)/在连续判决次数DEC_PASS_NUM内 if(DEC_DATA_SerDEC_NUM-1=DEC_DATA_SerDEC_NUM-2)/判决前次结果和当期结果是否一致 if(DEC_NUM>=DEC_PASS_NUM) ONCE_DEC_DONE = 1;/表示一次有效判决结束