纳米软件了解到DSP Builder可以帮助设计者完成基于FPGA的DSP设计。除了图形化的系统建模外,DSPBuilder还可以自动完成大部分的设计过程和仿真,直到把设计文件下载至DSP开发板上。该设计采用DSPBuilder开发工具,首先实现输出频率变化可控的直接数字合成(DDS)模块;然后根据Chirp函数的变化规律,控制DDS的输出频率变化规律。
1 Chirp函数的一般特性
电磁波在传输过程中,经过色散介质,如不均匀的波导,在高空电离层时会发生色散现象。Chirp函数在射电天文信号的消色散处理中发挥着重要的作用,研究在FPGA中实现Chirp函数是基于FPGA的射电宇宙信号处理的重要组成部分,如图1所示。
根据输出频率与当前采样时刻对应递变规律,Chirp函数一般分线性(Linear)Chirp函数和非线性(Nonlinear)chirp函数两种。图2,是两种Chirp函数在频域上的表现图。
从图2,图3可以看出,Chirp函数的频率输出与时间关系f-t关系可以总结为:对于线性Chirp函数,在连续域时间域内有关系式:
式中:k为常数;f0为初始输出频率;t为连续时间。
在离散时间域有关系式:
式中:k为常数;f0为初始输出频率;n为采样点。
对于非线性Chirp函数,在连续域时间域内有关系式:
式中:f(t)为非线性函数;f0为初始输出频率;t为连续时间。
在离散时间域有关系式:
式中:f(n)为非线性函数;f0为初始输出频率;n为采样点。
2 DDS模块的设计
数字式频率合成器(DDS)模块的工作原理是:将0~2π的正弦函数值分为N份,将各点的幅度值存入ROM中,再用一个相位累加器每次累加相位值ωT,得到当前的相位值,通过查找ROM得到当前的幅度值,其系统框图如图4所示。
DDS的主要参数包括:系统时钟频率、频率控制字长、频率分辨率、ROM单元数、ROM字长。该设计的DDS是10位的,时钟频率为转化为VHDL文件后的输入时钟频率。这是一个很灵活的输入频率。在此,假设输入频率为fin,频率控制字长为16位,ROM单元数为210,ROM字长为9位,而且频率分辨率为:
式中:fc为系统时钟频率。
频率控制字为:
式中:f为要合成的频率;T为系统时钟。可见,当输入频率控制字发生变化时,输出频率fout也发生相应的变化,从DDS到Chirp信号源的设计就是基于这一思想,如图5所示。
其中,输入端口1为初始相位控制字输入端,它的输入值决定了信号源的初始输出相位。输入口2为频率控制字FTW输入端,若在该输入端写入不同的频率控制字值,则可以在输出端口得到不同的输出频率。输入端口3为初始频率控制字输入端,它的输入值决定了信号源的初始偏置频率。
LUT为正弦数据查找表模块(Look Up Table)。根据DSP Builder的算法将一个完整的正弦波周期进行1 024次采样,并存储于LUT中。在Matlab中设置Matlab array:511*sin([0:2*pi/(2^10):2*pi]),左边的输入端为查找数据的地址输入端,右边的输出端为离散正弦波信号输出端。
第一个并行累加器模块(Parallel Adder Subtrac-tor)作为相位累加器,采用Altera提供的总线结构(AltBus)模块决定了该累加器的长度为16位,即该累加器最大可输出范围为216,由此决定了公式(5)。
第二个并行累加器模块(Parallel Adder Subtractor1)作为初相位偏置累加器,将初相位控制字与频率控制字累加,为输出频率提供一个初始偏置相位。
第三个并行累加器模块(Parallel Addersubtractor 2)作为初始频率偏置累加器,给输入的频率控制字提供一个偏置,是输出频率从一个用户自己可定义的初始频率开始变换运行。
利用总线位宽转换模块(Bus Conversion)只取出总线信号的高10位,用作驱动数据查找表模块的地址驱动信号。为了方便下一步设计,将图5封装成子系统模块(Subsystem Block),并命名为:DDS_Subsystem,如图6所示。
图6中in1为初始相位输入端,in2为输入频率控制字端,in3为初始频率输入端。
3 变频控制模块的设计
根据Chirp函数在频域上的性质,可以得出输入控制字与输出频率之间的对应关系有线性和非线性两种:
首先采用DSP Builder库中的单步增/减子模块(Increment/Decrement Block)建立采样点控制字产生单元。该模块能按照阶梯式规律步进逐一产生控制字信号,并保持一段时间在模块设置项(Clock Phase Se-lection)中设置,当增减方向(Direction)设置为Incre-ment时得时域输出,其表现如图7所示。
其次根据需要建立控制字变换模块,即对Incre-ment/Decrement模块输出的采样点控制字进行换算,转化为DDS的频率控制字。这需要根据不同Chirp函数的变化规律,例如:如果是线性频率的输出,则采样点应该与输出频率有线性的函数对应关系;如果是非线性频率的输出,则采样点应该与输出频率有非线性的函数对应关系。根据不同的传输函数建立该子模块:
例如:fout=kn+f0。当k=3时,建立子模块如图8所示。
将上述模块向上生成子模块后,连接的整体仿真如图9所示。
并在DDS的输出端建立FFT观测窗口。
4 验证与仿真
假设现在的初始相位为0,初始频率也为0,采样点步进控制字设置为输出12为步进循环增加模式。在时域输出观测窗口(Scope)中观察到图形如图10所示。
从图11中可见,输出信号的频率发生了周期性并且有规律的变化,证明了该设计能很好地实现Chirp信号源的功能。并且很轻松地生成HDL(VHDL或者Verilog HDL)代码下载到FPGA中运行,大大简化了FPGA设计。
5 结 语
根据Chirp函数特定的输入/输出(线性和非线性)关系,计算得出当前输入字与输出频率的对应关系,然后设计控制字子模块产生DDS模块的频率控制字,驱动DDS产生不同的输出频率,通过在Matlab的Simu-link环境下的仿真验证,得出不同时刻输出的频谱图,验证了该设计能很好地实现Chirp信号源。
楼主最近还看过