- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
用NI技术设计的OFDM发射接收系统
对于单线程系统,一般分为数据的采集模块、分析处理模块、显示存储模块。这三个模块在时间上是顺序执行的,即后一个模块需等待前一个模块数据的到来时才开始工作。然而本系统对实时性要求比较高,比如在收端,USB声卡的播放需要收端的音频译码模块在400ms内处理完一帧,才能及时提供给USB声卡样点连续地播放声音,这就需要音频译码模块前的所有基带处理部分需要在400ms内完成一个物理帧到音频帧的解调。同样在发端,USB声卡每秒采集19200个样点给音频编码模块进行编码,每400ms输出一音频编码帧,FEC、映射及OFDM成帧等模块也必须在400ms内处理完成,否则会出现丢帧和覆盖的现象。可以肯定,用单线程这种顺序化的执行方式效率很低,每个模块都要等待前一个模块的数据,对于实时性要求较高和复杂性较高的系统不适用。
本系统使用的是多线程技术,可以将处理模块拆分成多个线程,使多个线程并行运行,只要保证每个线程的运行时间小于音频处理模块,系统就会正常工作。其中发端算法用3个线程完成音频编码,FEC、映射、OFDM成帧等处理,并将OFDM数据写到板卡RAM中。收端算法用6个线程完成从板卡RAM中读取OFDM基带数据、同步、均衡、FFT、解映射、解FEC等处理,最后由音频译码模块将音频帧送给USB声卡进行播放。为了保证线程间数据传递有序进行,CVI还提供了事件通知、安全队列、线程优先级等函数,保证线程间的同步和数据的传递。本系统使用的是全局BUFFER和安全队列回调函数方式使两个线程间获得同步。即两个线程间共享一个BUFFER和安全队列,前一个线程将每次计算得到的数据写到BUFFER中,并产生一标志位FLAG,写入安全队列,后一线程捕捉到安全队列中的FLAG,判断是否满足回调函数的条件,满足则启动该线程,并将BUFFER中的数据读出,不满足则继续捕捉FLAG。通过对安全队列中FLAG的读写,控制线程启动的时间,使得两线程对数据的读写达到平衡。程序中控制流程如图3所示。图4为由PXI5671输出到频谱仪E4440A的OFDM频谱。
图3 线程控制流程图
图4 PXI5671输出的OFDM频谱
结论
本系统用LabWindows/CVI8.5软件完成OFDM的数字基带处理,在PXI硬件平台上完成射频信号的处理,有效地对OFDM系统进行验证。而搭建FPGA PCB平台完成OFDM Demo样机,首先在芯片的选型、制板上就需要大量的时间和人员,且具有一定的风险性;其次在软件代码开发方面,需要花大量的时间对FPGA代码进行仿真测试和集成,而且改动起来灵活性差。然而基于NI技术的OFDM系统的开发,由于在软件上仿真代码的可移植性,和上变频等硬件平台的实用性,减少了OFDM系统的开发周期,节约了开发成本和人员。