您的当前位置:首页正文

2FSK调制解调系统设计

2024-09-10 来源:钮旅网
成都理工大学工程技术学院课程论文

2FSK调制解调系统设计

作者姓名:舒珑塔(201320101130) 晋良斌(201320101129)

专业名称:2013级信息工程

指导教师:刘晓丽 讲师

2FSK调制解调系统设计

摘要

2FSK是一种在无线通信中很有吸引力的数字调制方式,目前在短波,微波和卫星通信中均被采用。随着超大规模集成电路技术和计算机技术的飞速发展,数字信号处理(DSP)技术在通信领域中已有了广泛的应用。本论文研究并实现了基于DSP的全数字2FSK发送与接收系统。本文分析并防真了基于直接数字频率合成原理的2FSK全数字调制的方法;分析并防真了基于差分基带相位傅立叶变换的载波频偏和位定时算法.最终得到结果如下:

1.实现了数字的2FSK数字化调制。本文在独立设计的DSP系统上进行了调制实验。通过改变程序中的参数,成功实现了多种速率的数据发送。

2.实现了2FSK信号的数字化接收。接收工作包括数据的读入,载波频偏估计,位同步,解调。

关键词 :2FSK 调制 同步 解调

- I -

2FSK调制解调系统设计

Abstract

2fsk is a very attractive digital modulation in a wireless communication method, currently in HF, are used in microwave and satellite 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 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 follows :

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 is read into the carrier frequency offset estimation, bit synchronization, and demodulation.

Keywords: 2fsk,modulation,Synchronized,demodulation

- II -

2FSK调制解调系统设计

目录

摘要 ............................................................................................................ I Abstract .................................................................................................. II 目录 ............................................................................ 错误!未定义书签。 前言 ...................................................................................................... - 1 - 1二进制频移键控(2FSK) ................................................................ - 2 -

1.1 FSK的基本原理 ...................................................................... - 2 -

1.2 2FSK基本原理 ........................................................................ - 2 - 1.2.1 2FSK信号的产生方法 ....................................................... - 3 - 2 调制原理 .......................................................................................... - 5 -

2.1 2FSK调制原理 ...................................................................... - 5 - 2.2 2FSK调制算法 ..................................................................... - 5 - 2.3 调制主程序流程图 ............................................................. - 6 - 3解调原理 ............................................................................................ - 7 -

3.1常见解调方法 .......................................................................... - 7 - 3.2 实验解调算法 ........................................................................ - 9 - 4实验流程 .......................................................................................... - 10 -

4.1调制实验 ................................................................................ - 10 - 4.1.1调制主程序 ...................................................................... - 10 - 4.1.2调制过程 .......................................................................... - 10 - 4.2解调实验 ................................................................................. - 11 - 4.2.1 解调主程序 ..................................................................... - 11 - 4.2.2 解调过程 ......................................................................... - 11 - 总结 .................................................................................................... - 13 - 参考文献 ............................................................................................ - 14 - 附件1 实验程序 .............................................................................. - 15 -

- III -

2FSK调制解调系统设计

A1.1 调制主程序 ....................................................................... - 15 - A1.2 解调主程序 ....................................................................... - 18 -

- IV -

2FSK调制解调系统设计

前言

课题主要研究2FSK信号的调制解调系统的实现,完成对数字信号的调制及解调,使系统简单,并要调制解调过程容易实现,能正确的完成调制解调任务。

在现代数字通信系统中,频带传输系统的应用最为突出。用基带数字信号控制高频载波,把基带数字信号变换为频带数字信号的过程称为数字调制,已调信号通过信道传输到接收端,在接收端通过解调器把频带数字信号还原成基带数字信号,这种数字信号的反变换称为数字解调,把包含调制和解调过程的传输系统叫做数字信号的频带传输系统。

数字调制解调技术是现代通信的一个重要的内容,在数字通信系统中,由于基带数字信号包含了丰富的低频部分,如果要远距离传输,特别是在有限带宽的高频信道无线或光纤信道传输时,必须对数字信号进行载波调制,使基带信号的功率谱搬移到较高的载波频率上,这就称为数字调制(Digital Modulation) 。它可以分别对载波的幅度、频率、相位进行调制,于是有ASK(移幅键控) 、FSK(移频键控) 、PSK(移相键控) 等调制方式。数字调制同时也是时分复用的基本技术,其中FSK 是利用数字信号去调制载波的频率,是信息传输较早的一种传输方式,(2FSK) 在通信系统中应用广泛。

以数字信号作为调制信号的调制技术。一般采用正弦波作为载波,这种数字调制又称为载波键控。用电键进行控制,这是借用了电报传输中的术语。载波键控是以数字信号作为电码,用它对正弦载波进行控制,使载波的某个参数随电码变化。

FSK(Frequency-shift keying)- 频移键控是利用载波的频率变化来传递数字信息。它是利用基带数字信号离散取值特点去键控载波频率以传递信息的一种数字调制技术。是信息传输中使用得较早的一种调制方式,它的主要优点是: 实现起来较容易,抗噪声与抗衰减的性能较好。在中低速数据传输中得到了广泛的应用。

- 1 -

2FSK调制解调系统设计

1二进制频移键控(2FSK)

1.1 FSK的基本原理

FSK(Frequency-shift keying)频移键控-----利用载频频率变化来传递数字信息,是信息传输中使用得较早的一种调制方式。

主要优点: 1. 实现起来较容易。

2. 抗噪声与抗衰减的性能较好。

3. 在中低速数据传输中得到了广泛的应用。

FSK用载波频率的变化来表征被传信息的状态的,被调载波的频率随二进制序列0、1状态而变化,即载频为时代表传0,载频为时代表传1。

图一:2FSK的典型时域波形

1.2 2FSK基本原理

A. 表达式:在2FSK中,载波的频率随二进制基带信号在f1和f2

两个频率点间变化。故其表达式为

B. 典型波形:

- 2 -

2FSK调制解调系统设计

由图可见,2FSK 信号的波形(a)可以分解为波形(b)和波形(c),也就是说,一个2FSK信号可以看成是两个不同载频的2ASK信号的叠加。因此,2FSK信号的时域表达式又可写成

式中 g(t) - 单个矩形脉冲,Ts - 脉冲持续时间;

n和n分别是第n个信号码元(1或0)的初始相位,通常可令其为零。因此,2FSK信号的表达式可简化为

1.2.1 2FSK信号的产生方法

1) 采用模拟调频电路来实现:信号在相邻码元之间的相位是连续变化的。 2) 采用键控法来实现:相邻码元之间的相位不一定连续。

- 3 -

2FSK调制解调系统设计

图二:信号产生流程图

- 4 -

2FSK调制解调系统设计

2 调制原理

从2FSK的调制方法有两种:(1)频率选择法;(2)载波调频法。不同的方法有不同的优缺点,在不同的情况下使用不同的方法。

2FSK调制采用查表法,可以实现较好的实时性,特别适用于通信载波的生成。

2.1 2FSK调制原理

2FSK信号的产生通常有两种方式:(1)频率选择法;(2)载波调频法。

 频率选择法

-------产生的2FSK信号为两个彼此独立的载波振荡器输出信号之和,在二进制码元状态转换(或)时刻,2FSK信号的相位通常是不连续的,这会不利于已调信号功率谱旁瓣分量的收敛。  载波调频法

------在一个直接调频器中产生2FSK信号,这时的已调信号出自同一个振荡器,信号相位在载频变化时始终是连续的,这将有利于已调信号功率谱旁瓣分量的收敛,使信号功率更集中于信号带宽内。

2.2 2FSK调制算法

2FSK调制就是把输入数字序列变成适合于信道传输的变频正弦波-----2FSK的DSP实现关键就是产生正弦或余弦波形。产生正弦波的方法有差分迭代法、泰勒级数展开法、查表法等多种方法。

2FSK调制采用查表法,可以实现较好的实时性,特别适用于通信载波的生成。

在DSP 的程序存储空间,使用Q15 定点数格式在[0,2π]上以2π/N的相位间隔固化N 点正弦值,以供查表(这些值可由MATLAB软件首先计算好),在此取N=12。这样对于F0和F1的取样间隔分别为:

i0NF/Fs1216/1921,发送数据“0”时0 i1NF/Fs1232/1922,发送数据“1”时 1- 5 -

2FSK调制解调系统设计

使用DSP定时器T0,用来实现对数据解调DAC输出速率的控制。这样,如要实现12Kbps的数传输速率,需要将DSP定时器T0的溢出率设置为192KHz。

2.3 调制主程序流程图

本文使用查表法提供2FSK调制所需要的两路正弦波,即sin0_table和sin1_table,当发送的数据为“0”时是发送sin0的数据,当发送的数据为“1”是发送sin1的数据。初始化完后,接收数据,判断“0”或“1”,打开中断,则定时器每隔一个周期产生一次中断,中断服务程序则完成一个采样点的输出。一个码元周期结束后,关中断,判断下一个发送数据,继续循环。

关中断设置中断程序入口地址初始化定时器和IMR寄存器接收要发送的数据查找表的首地址开中断N延时等待(AR7=0?)Y关中断图三:调至主程序流程图

- 6 -

2FSK调制解调系统设计

3解调原理

3.1常见解调方法

解调的原理就是将2FSK 信号分解为上下两路分别进行解调,然后进行判别。

2FSK信号的解调方法有:如包络检波法、相干解调法、鉴频法、过零检测法及差分检波法等。 1) 非相干解调:

2) 相干解调:

相干解调器的一般模型为

- 7 -

2FSK调制解调系统设计

相干解调器原理:为了无失真地恢复原基带信号,接收端必须提供一个与接收的已调载波严格同步(同频同相)的本地载波(称为相干载波),它与接收的已调信号相乘后,经低通滤波器取出低频分量,即可得到原始的基带调制信号。

已调信号的一般表达式为

与同频同相的相干载波c(t)相乘后,得

经低通滤波器后,得到

因为sI(t)是m(t)通过一个全通滤波器HI () 后的结果,故上式

中的sd(t)就是解调输出,即

3) 过零检测法:

- 8 -

2FSK调制解调系统设计

3.2 实验解调算法

算法的基本思想是已调信号和它的延时信号相乘,然后经过低通滤波,根据滤波结果的符号判断发送信号的值,从而实现信号的解调。

前面一部分是仅与k有关的常数。后面一部分是与n有关的高频分量,可通过对称系数低通滤波器h(n)来滤除。低通滤波器h(n)的截止频率设为12KHz,通过该低通滤波器后得到:

k的选择是设计解调器的关键,应使差值:

最后,以利于正确区分两种频率,降低判决的误码率。根据实际的测试得到,当k=2时,可以得到较好的区分度。经过低通滤波后的数据U(n)经过判决算法后,可以得到最终所要的解调数据Y(n)。

- 9 -

2FSK调制解调系统设计

4实验流程

4.1调制实验

本次实验是2FSK基于DSP的调制实验,是在Code Composer Studio2.2上实现的。

4.1.1调制主程序

详见附录1。

4.1.2调制过程

将实验原程序中的FSK_DATA数据变更为0x6b17。如图所示。

在软件频率显示图中,将属性变为如图所示的情况。

在经过程序和软件上的调试后,最终我们可以得到频率结果图。

- 10 -

2FSK调制解调系统设计

4.2解调实验

本次实验是2FSK基于DSP的解调实验,是在Code Composer Studio2.2上实现的。

4.2.1 解调主程序

详见附录1。

4.2.2 解调过程

将实验原程序中的FSK调制数据改为01101011000。

将频率显示图的属性更改为如图的属性,如此可方便的出最后的结果图。

- 11 -

2FSK调制解调系统设计

经过程序和软件属性的修改,得到了如图所示的结果图,我们一开始输入的FSK解调数为01101011000,可以从图上看出数据为01101011000。是相符合的。

- 12 -

2FSK调制解调系统设计

总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

这次课程设计,至今我仍感慨颇多,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以所学过的知识理解得不够深刻,掌握得不够牢固。

这次课程设计历时两个星期多左右,通过这两个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。

- 13 -

2FSK调制解调系统设计

参考文献

[1] 解月珍.秦履多.谢沅清.信号产生电路[M].电子工业出版,1994. [2] 王慕坤.通信原理[M].哈尔滨工业大学出版社,2003.

[3] 鲜继清.张德民.现代通信系统[M].西安电子科技大学出版社,2002. [4] 阎石.数字电子技术基础[M].高等教育出版社,2006. [5] 苏涛.DSP实用技术[M].西安电子科技大学出版社,2002.

[6] 高海林,钱满义.DSP技术及其应用[M].北京交通大学出版社.2009.

- 14 -

2FSK调制解调系统设计

附件1 实验程序

A1.1 调制主程序

#include \"myapp.h\"

int const sin0_table[16]={0, 1158,1638,1158,0,-1159,-1638,-1158,0, 1158,1638,1158,0,-1159,-1638,-1158};

int const sin1_table[16]={0, 1254,2317,3027,3276,3027,2317,1254,0,-1254,-2317,-3027,-3276,-3027,-2317,-1254};

//int const sin1_table[16]={0, 627,1158,1514,1638,1514,1158,627,0,-627,-1159,-1514,-1638,-1513,-1158,-626};

//int const sin0_table[16]={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文本打开) 本例地址为0x2001

unsigned 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\");

- 15 -

2FSK调制解调系统设计

//同样需要将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 = FSK_DATA >> 1; } else { sin1_Trans(); FSK_DATA = FSK_DATA >> 1; } }

//port8000=0;

//port8000=0x8888; //port8000=0;

- 16 -

2FSK调制解调系统设计

// 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_table[Counter0];//在此加断点

FSK_Tran_Flag = 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_table[Counter1];//在此加断点

FSK_Tran_Flag = 0; } }

interrupt void TINT0_ISR( void ) {

- 17 -

2FSK调制解调系统设计

FSK_Tran_Flag = 1; }

A1.2 解调主程序

R#include \"myapp.h\"

#include \"math.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 -------- ----

000020d0 _DEC_By_NUM 000020ce _DEC_DATA_BEF 000020cd _DEC_DATA_CURR 000020d3 _DEC_DATA_Ser 000020d6 _DEC_Flag_X 000020cc _DEC_IN 000020cf _DEC_NUM 000020d1 _DEC_NUM_X

- 18 -

2FSK调制解调系统设计

000020d7 _DEC_OUT 000020e3 _DSIP 00002000 _FIRBUFF 0000210b _FIR_COEF 0000210f _FSK_DATA 00002008 _LPFOUT

000020d2 _ONCE_DEC_DONE 000001dc _TINT0_ISR 000020e4 _Temp_DATA */

int const FIR_COEF[4]={0x0005, 0x21AF,0x18AB,0x1C42};//FIR滤波器系数 //int const FIR_COEF[4]={18*32768/100000,26316*32768/100000,19272*32768/100000,22079*32768/100000};//FIR滤波器系数 //int const FIR_COEF[4]={0.238917554963298*32768,0.098771820314121*32768,0.109997582034483*32768,0.116532535567211*32768}; //int const FIR_COEF[4]={0.08977454978001*32768,0.1142599216456*32768,0.1325311332693*32768,0.1422899911346*32768};

/************************************************* *前半部分噪音

************************************************* ************************************************* *后半部分FSK调制数据 *F0和F1的余弦表

*F0:32767,28508,16384,0,-16384,-28508,-32767,-28508,-16384, 0,16384,28508, *F1:28508,0,-28508,-28508,0,28508,28508,0,-28508,-28508, 0,28508,

*FSK调制数据表示\"01001011011\",程序运行结束后可以在DEC_OUT[DataSer_Num]数组中看到

*************************************************/ int const FSK_DATA[DataNum]={ //*噪音 64个点 18295,-6420,19759,-29306,6924,-10388,12834,12498, -7547,0,-18295,6420,6084,10388,0,-8530,

- 19 -

2FSK调制解调系统设计

-12834,6420,622,18918,-7547,-6420,-6084,-10388, 25843,-10388,19759,-25338,-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 01101011000 0x0000,0x30FB,0x5A82,0x7641,0x7FFF,0x7641,0x5A82,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,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,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,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,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,

- 20 -

2FSK调制解调系统设计

0x0000,0x30FB,0x5A82,0x7641,0x7FFF,0x7641,0x5A82,0x30FB,0x0000,0xCF05,0xA57E,0x89BF,0x8000,0x89BF,0xA57E,0xCF05 }; /*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,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,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,28508, 28508,0,-28508,-28508,0,28508,28508,0,-28508,-28508, 0,28508};*/ int FIRBUFF[8]={0,0,0,0,0,0,0,0};//FIR滤波器输入缓冲区 int LPFOUT[DataNum];//滤波器输出

int DEC_IN=0;//判决器输入

int DEC_DATA_CURR=0;//—当前采样点判决值 int DEC_DATA_BEF=0;//—前一次采样点判决值 int DEC_NUM=0;//—判决用计数器 int DEC_By_NUM=0;//—判决用计数器 int DEC_NUM_X=0;//—周期计数器

int ONCE_DEC_DONE=0;//一次有效判决结束

int DEC_DATA_Ser[DEC_PASS_NUM]={0,0}; int DEC_Flag_X=0;//当前判决码元符号标志

int DEC_OUT[DataSer_Num]={0,0,0,0,0,0,0,0,0,0,0,0};//判决器输出,结果存储在这里

long Temp_DATA=0;//暂存数据

int DSIP=0;//显示变量

- 21 -

2FSK调制解调系统设计

void main( void ) {

int Counter,Counter01; c54init();

asm(\" SSBX CPL\");

//需要注意的是函数中的局部变量编译成汇编后会进行直接寻址,

//因此必须初始化DP页指针,这样在函数中使用局部变量就不会出现问题。 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>16;//取乘积后的高16位,将最新样点放置在FIR滤波器缓冲区最新的位置 //Temp_DATA = FIR_COEF[0]*(FIRBUFF[0]+FIRBUFF[7])+FIR_COEF[1]*(FIRBUFF[1]+FIRBUFF[6])+FIR_COEF[2]*(FIRBUFF[2]+FIRBUFF[5])+FIR_COEF[3]*(FIRBUFF[3]+FIRBUFF[4]);//FIR滤波器计算 //asm(\" RSBX SXM \");

- 22 -

2FSK调制解调系统设计

Temp_DATA = (long)(FIR_COEF[0]*(FIRBUFF[0]+FIRBUFF[7]))+(long)(FIR_COEF[1]*(FIRBUFF[1]+FIRBUFF[6]))+(long)(FIR_COEF[2]*(FIRBUFF[2]+FIRBUFF[5]))+(long)(FIR_COEF[3]*(FIRBUFF[3]+FIRBUFF[4]));//FIR滤波器计算 for(Counter01=0;Counter01<7;Counter01++) { FIRBUFF[Counter01] = FIRBUFF[Counter01+1];//更新FIR滤波器缓冲区数据 }

LPFOUT[Counter]= Temp_DATA>>16;

DEC_IN = LPFOUT[Counter] ;

DSIP = LPFOUT[Counter] ;

//------------------------判决开始-----------------------------------------------

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)//是一个有效样点 {

- 23 -

2FSK调制解调系统设计

//DEC_DATA_CURR = 1;//—当前采样点判决值 DEC_DATA_Ser[DEC_NUM] = DEC_Flag_X; DEC_NUM++;//判决计数器+1 if((DEC_NUM >=2))//在连续判决次数DEC_PASS_NUM内 { if((DEC_DATA_Ser[DEC_NUM-1]==DEC_DATA_Ser[DEC_NUM-2]))//判决前次结果和当期结果是否一致 { if(DEC_NUM>=DEC_PASS_NUM) { ONCE_DEC_DONE = 1;//表示一次有效判决结束 DEC_OUT[DEC_NUM_X]= DEC_DATA_Ser[0];//存储判决结果 DEC_NUM_X++; DEC_NUM =0; } } else//如果前后两次判决记过不一样 DEC_NUM=0;//否则判决计数器清0 } } else//如果样点绝对值小于设定的阈值,则认为是一个无效数据,舍弃 { DEC_NUM = 0;//清0判决计数器 }

} else { DEC_By_NUM++; if(DEC_By_NUM==(DEC_BYPASS_NUM-1)) {

- 24 -

2FSK调制解调系统设计

ONCE_DEC_DONE = 0;//取消ONCE_DEC_DONE标志,从新开始判决 DEC_By_NUM = 0; } }

//---------------------判决结束-------------------------------------------------- }

//for(;;); }

interrupt void TINT0_ISR( void ) {

//FSK_Tran_Fla

- 25 -

2FSK调制解调系统设计

26

因篇幅问题不能全部显示,请点此查看更多更全内容