基于FPGA的电台接口转换模块设计
扫描二维码
随时随地手机看文章
摘要:目前市场上电台接口转换模块大多都采用模拟电路,其带来稳定性差,工艺复杂等缺陷。通过采用数字信号处理技术来处理信号通信,提高信号的传输速率和降低传输的误码率,并提高系统的稳定性,节省信道资源。这里采用FPGA作为核心芯片来设计和开发,利用DSP Builder来仿真FFT实验,用OuartusⅡ软件开发设计此接口转换模块,最终获得的模块电路系统稳定,PTT信号更纯净。
关键词:FFT;FIR;Cordic算法;稳定处理
一般来说,无线电台通信采用半双工通信方式,一方在发送话音信号的同时,不能接收另一方的话音信号。因此电台的通信接口分为两部分,一部分为话音信号接口,用于发送接收话音,另一部分为PTT控制信号接口,用于控制电台的发送接收状态。然而,目前有许多通信设备,如民航、海事、铁路交通的内部通信以及应急通信等,为了实现电台的远程遥控,并且节省信道资源,将PTT控制信号调制成已知的单频信号与话音信号一起发送,确保PTT控制信号传输的可靠性。当内通设备与电台直接相连时,接口不兼容。因此需要设计一种电台接口转换模块,能够将单频信号与话音信号分离开来,实现电台与内通设备的通信。
现代的大规模FPGA既能处理过去DSP处理器领域的功能,同时又大大地降低专用集成电路方案的风险和前期成本,因此采用FPGA作为核心芯片和先进的数字信号处理技术来开发将为开发带来诸多的优势。
1 设计原理
基于FPGA的电台接口转换模块是基于数字信号处理技术,将设备的话音信号通过模/数转换器转化为数字信号传输到输入缓冲区,数字话音信号一方面经过FIR(Finite Impulse Response)带阻滤波器,滤除某一已知的单频信号,发送到输出缓冲区,再通过数模转换器转化为话音信号,传输给电台;另一方面,通过时频变换、阈值检测以及稳定处理三个步骤,检测出单频信号,据此产生PTT(Push-to-Talk)控制信号输出,其接口转换模块功能框图如图1所示。
2 FFT处理器设计
在Altera可编程逻辑器件中数字信号处理系统设计需要能够同时具有高速运算以及硬件语言描述的开发工具。Altera DSP Builder集成了这些工具。Altera公司的DSP Builder大大缩短了DSP开发周期,在友好开发环境里它能帮助使用者生成一个有关DSP设计的高级硬件描述语言。IP中的FFT MegaCore function是一个具有良好性能,高度参数化的快速傅里叶变换的进程。该设计采用DSP Builder模型这个共享开发平台中的Megacore functions完成FFT处理器和FIR陷波滤波器的设计。
I/O数据流结构的设计如下:
在FFT MegaCore宏功能模块中主要的参数指标就是数据流相应的时序规则,下面简要介绍一下流结构的时序原理图,如图2所示。
在图2中,sink_valid是FFT模块的输出信号,它表示FFT处理器是否做好接收数据的准备。sink_ready和sink_valid都处于高位时,FFT开始运行,等待sink_sop信号置位开始输入数据,只要这两个信号中任一个信号置低位,就表明FFT还未准备好,FFT将处于等待状态,直到这两个信号都处于高位才开始运行。sink_sop是一帧信号传输的起始信号,sink_eop表示一帧信号传输结束信号。
3 FIR陷波滤波器的设计
窗函数设计法在设计常用FIR数字滤波器中有非常广泛的应用,正确的选择窗函数可以提高所设计的数字滤波器的性能,或者在满足技术指标的条件下,减少FIR数字滤波器的阶数。窗函数设计法主要目标是获得最窄的主瓣宽度和尽可能大的旁瓣衰减。若阻带衰减不高,则滤除不干净,衰减过高,可能将有用信号也一并滤除。据资料可知,矩形窗、汉宁窗的阻带衰减很低,海明窗较好一点,布莱克曼窗应该是最恰当的。
图3是加布莱克曼窗后的陷波滤波器,采用Matlab工具产生,横坐标为频率范围,纵坐标为各频率点上的幅度。
由图3可知,陷波滤波器在频率为2 kHz的地方幅度最低,达-60 dB,其过渡带宽200 Hz,大体上能满足设计的需求。
4 Cordic算法实现求模
目前实现Cordic算法主要有两种基本的结构:较为简洁的状态机和高速全流水线处理器。在此采用高速全流水线处理器。在流水线结构中,各阶段数据处理不影响后面数据的输入,在每个时钟周期到来是将各阶段的数据不断前移,后面的数据不断输入,犹如一个FIFO缓冲期,在每个时钟周期到来时地址不断向前移一位,后来的数据不断的往里输,在各时钟周期不同地址间数据不会相互影响。这就保证了实时系统的数据能不断地流入而不会导致冲突。图4所示为5级迭代快速Cordic流水线结构:
如图5所示,采用QuartusⅡ的SignalTap采集的数据,经计算其准确率高达98%以上,能够满足设计的需求。根据图5所示计算mmsource_ exp信号,此信号是指数修正信号,是有符号型,将其转换成十进制数的-2。先计算头二组mmsource_real信号和mmource_imag信号数据。它们也是有符号数,因此将其转化为十进制数,转换结果为{-1,-80;-2,-17;-11,-53;26,-51},而根据Cordic算法得出的结果从图5中读出,依次为{5 209;1 113;3 517;3 723}。而实际经模修改后得到的标准值分别为{5 120;1 088;5 317;3 648}。
5 稳定处理
FFT阈值法的原理是先对原始信号做FFT处理,适当预设滤波阈值,将低于该阈值的频带设定为无效信号,定义为接收器没有接收到信号。当然阈值以下,并不能代表该周期产生了单频信而由于信道上或者硬件本身的干扰,单检测周期的测量值超过阈值或者在号或没产生。仅凭单检测周期的阈值检测而产生PTT控制信号会带来话音控制的不稳定性。
设计的算法能极大地提高阈值测试的稳定性。具体处理如下,流程如图6所示。
为实现该功能,需自定义一个计数器,初始值为0,计数器值定义在0到T(T>0)之间。若在加操作中使计数器值大于T,则将计数器值饱和到T;若在减操作中使计数器小于0,则将计数器值饱和到0。
第一步,检测测量值是否过阈值。若过阈值,计数器值加m,进行第二步;若不过阈值,计数器值减n,进行第四步。
第二步,若计数器值大于T,则饱和到T值。进行第三步。
第三步,检测计数器值,若计数器值等于T,则启动输出PTT控制信号,结束流程;若计数器值小于T,则维持上一次的PTT控制信号输出状态,结束流程。
第四步,若计数器值小于0,则饱和到0值。进行第五步。
第五步,检测计数器值,若计数器值等于0,则取消输出PTT控制信号,结束流程;若计数器值大于0,则维持上一次的PTT控制信号输出状态,结束流程。
在流程中,m,n值的选择取决于信道上或者硬件本身干扰的大小。若没有单频信号而误检出单频信号的错误概率比较大,则m的取值应较小;反之,若没有单频信号而误检出单频信号的错误概率比较小,则m的取值可以较大。同理,若有单频信号而未检出单频信号的错误概率比较大,则n的取值应较小;反之,若有单频信号而未检出单频信号的错误概率比较小,则n的取值可以较大。
图7所示,在CycloneⅢ实验板运行时采用SignalTapⅡ对状态机的各项内容进行验证,保证状态机运行良好。将相关程序下载到Cyclone-Ⅲ芯片里,实时采集音频数据对状态机进行分析。
在图7中,mmod在一个采样周期结束后ostart信号被触发,其获得的总能量为1 427,比预设阈值要低,因此ocounter1的状态不变,仍保持在第0状态,而ocounter2的状态则由第3状态跳到第2状态,这实践的结果和理论都是保持一致的,可以说明程序的正确性,状态机运行正常。
6 结语
本文可以用于一切需要PTT信号端的设备上,应用极其广泛,如:对讲机、飞机场指挥塔的应答系统以及目前已在美国推出的PTT手机业务等均运用到该技术。而在做该课题时遇到一些问题,如:陷波滤波器其阻带带宽偏大,需要寻求一种更好的算法来解决其带宽问题;其次,FIR消耗内存较大,这样会消耗大部分的FPGA逻辑资源,会导致较大系统的资源不够,因此需要设计更好的数据流结构和算法来处理这个问题。这将是笔者以后需要继续研究学习的。