第9章DDS设计第9章DDS设计9.1DDS的基本原理9.2DDS的模块设计9.3FSK调制器设计第9章DDS设计9.1DDS的基本原理我们知道,对于正弦信号发生器,它的输出可以用下式来描述:).π2sin(sinoutouttfAtAS(9-1)第9章DDS设计其中Sout是指该信号发生器的输出信号波形,fout指输出信号对应的频率。上式的表述对于时间t是连续的,为了用数字逻辑实现该表达式,必须进行离散化处理。用基准时钟clk进行抽样,令正弦信号的相位:tfoutπ2(9-2)在一个clk周期Tclk内,相位的变化量为:clkoutclkoutπ2π2ΔffTf(9-3)第9章DDS设计其中fclk指clk的频率,对于,可以理解成“满”相位。为了对进行数字量化,把切割成2N份,由此,每个clk周期的相位增量可用量化值来表述为NB2π2且为整数。与(9-3)式联立,可得:clkout2ffBNclkout2ffBN(9-4)第9章DDS设计显然,信号发生器的输出可描述为:BBAfBBAASkkNk11sinΔ1out2π2sin)Δsin((9-5)其中,指前一个clk周期的相位值,同样可以得出NkkB2π211(9-6)第9章DDS设计由上面的推导可以看出,只要对相位的量化值进行简单的累加运算,就可以得到正弦信号的当前相位值;而用于累加的相位增量量化值决定了信号的输出频率fout,并呈现简单的线性关系。直接数字合成器DDS就是根据上述原理而设计的数字控制频率合成器。图9-1所示是一个基本的DDS结构,主要由相位累加器、相位调制器、正弦ROM查找表和D/A构成。图中的相位累加器、相位调制器、正弦ROM查找表是DDS结构中的数字部分,由于具有数控频率合成的功能,又合称为NCO(NumericallyControlledOscillators)。第9章DDS设计同步寄存器寄存器正弦信号输出clk系统时钟相位累加器相位调制器NNM数据线位宽频率字输入N同步寄存器M正弦ROM查找表D/A相位字输入图9-1基本DDS结构第9章DDS设计相位累加器是整个DDS的核心,在这里完成上文原理推导中的相位累加功能。相位累加器的输入是相位增量,又由于与输出频率fout是简单的线性关系:,故相位累加器的输入又可称为频率字输入,事实上,当系统基准时钟fckj是2N时,就等于fout。频率字输入在图9-1中还经过了一组同步寄存器,使得当频率字改变时不会干扰相位累加器的正常工作。clkout/2ffBN第9章DDS设计相位调制器接收相位累加器的相位输出,在这里加上一个相位偏移值,主要用于信号的相位调制,如PSK(相移键控)等。在不使用时可以去掉该部分,或者加一个固定的相位字输入。相位字输入也需要用同步寄存器保持同步。需要注意的是,相位字输入的数据宽度M与频率字输入N往往是不相等的,MN。第9章DDS设计正弦ROM查找表完成的查表转换,也可以理解成相位到幅度的转换,它的输入是相位调制器的输出,事实上就是ROM的地址值;输出送往D/A,转化成模拟信号。由于相位调制器的输出数据位宽M也是ROM的地址位宽,因此在实际的DDS结构中N往往很大,而M总为10位左右。M太大会导致ROM容量的成倍上升,而输出精度受D/A位数的限制未有很大改善。因此,在实际应用中,对于ROM容量的缩小,人们提出了很多解决方法。第9章DDS设计下面给出一些关于基本DDS结构的常用参量计算。1. DDS的输出频率fout由DDS工作原理推导的公式中很容易得出输出频率的计算:clkout2fBfN(9-7)是频率输入字,fclk是系统基准时钟的频率值,N是相位累加器的数据位宽,也是频率输入字的数据位宽。第9章DDS设计2. DDS的频率分辨率或称频率最小步进值,可用频率输入值步进一个最小间隔对应的频率输出变化量来衡量。由(9-7)易得Nff2clkout(9-8)3. DDS的频率输入字的计算的计算公式如下:clkout2ffBN第9章DDS设计对于通信上的应用,往往需要得到一对正交的正弦信号,以便进行正交调制和正交解调。在用模拟的压控振荡器VCO时,输出一组完全正交的信号较为困难,而对于DDS而言,只要在基本DDS结构中增加一块ROM查找表,在两块ROM中分别放置一对正交信号即可(如一个放置sin表、另一个放置cos表),如图9-2所示。第9章DDS设计同步寄存器寄存器正弦信号输出clk系统时钟相位累加器相位调制器NNM数据线位宽频率字输入N同步寄存器M正弦ROM查找表D/A相位字输入余弦信号输出余弦ROM查找表D/A图9-2正交信号发生器第9章DDS设计幅度调制在很多场合是需要的。我们改进基本DDS结构,在正弦ROM表后、D/A前放置一个幅度控制模块,一般采用乘法器来实现。如图9-3。第9章DDS设计相位累加器clk频率字输入相位字输入幅度调制送D/A相位调制器正弦ROM查找表图9-3幅度调制第9章DDS设计9.2DDS的模块设计9.2.1建立DDS模型首先在Simulink中新建一个模型,调用DSPBuilder模块构成图9-4所示的基本DDS子系统SubDDS。第9章DDS设计图9-4DDS子系统SubDDS第9章DDS设计图中,DDS子系统SubDDS共有三个输入,分别为Freqword(频率字输入)、Phaseword(相位字输入)和Amp(幅度控制输入);一个输出,为DDSout。输入/输出模块的参数设置如下:Freqword模块:(Altbus)库:AlteraDSPBuilder中BusManipulation库参数“BusType”设为“signedInteger”参数“NodeType”设为“Inputport”参数“numberofbits”设为“32”第9章DDS设计Phaseword模块:(Altbus)库:AlteraDSPBuilder中BusManipulation库参数“BusType”设为“signedInteger”参数“NodeType”设为“Inputport”参数“numberofbits”设为“16”Amp模块:(Altbus)库:AlteraDSPBuilder中BusManipulation库参数“BusType”设为“signedInteger”参数“NodeType”设为“Inputport”第9章DDS设计参数“numberofbits”设为“10”DDSout模块:(Altbus)库:AlteraDSPBuilder中BusManipulation库参数“BusType”设为“signedInteger”参数“NodeType”设为“Outputport”参数“numberofbits”设为“10”第9章DDS设计由Delay模块和ParallelAdderSubtractor模块以及Phaseword1模块构成相位累加器,其参数如下:ParallelAdderSubtractor模块:(ParallelAdderSubtractor)库:AlteraDSPBuilder中Arithmetic库参数“NumberofInputs”设为“2”,“Add(+)Sub(-)”设为“++”选择“Pipeline”参数“ClockPhaseSelection”设为“1”第9章DDS设计Delay模块:(Delay)库:AlteraDSPBuilder中Storage库参数“Depth”设为“1”参数“ClockPhaseSelection”设为“1”Phaseword1模块:(Altbus)库:AlteraDSPBuilder中BusManipulation库参数“BusType”设为“signedInteger”参数“NodeType”设为“InternalNode”参数“numberofbits”设为“32”第9章DDS设计相位调整部分由ParallelAdderSubtractor1模块和BusConversion2模块构成,参数如下:ParallelAdderSubtractor1模块:(ParallelAdderSubtractor)库:AlteraDSPBuilder中Arithmetic库参数“NumberofInputs”设为“2”,“Add(+)Sub(-)”设为“++”选择“Pipeline”参数“ClockPhaseSelection”设为“1”第9章DDS设计BusConversion2模块:(BusConversion)库:AlteraDSPBuilder中BusManipulation库参数“InputBusType”设为“signedInteger”参数“Input[numberofbits].[]”设为32参数“OutputBusType”设为“SignedInteger”参数“Output[numberofbits].[]”设为“10”参数“InputBitConnectedtoOutputMSB”设为“31”参数“InputBitConnectedtoOutputLSB”设为“22”使用“Round”第9章DDS设计剩下的模块构成幅度控制部分,模块参数如下:Product模块:(Product)库:AlteraDSPBuilder中Arithemtic库参数“Pipeline”设为“2”参数“ClockPhaseSelection”设为“1”不选择“UseLPM”第9章DDS设计BusConversion3模块:(BusConversion)库:AlteraDSPBuilder中BusManipulation库参数“InputBusType”设为“signedInteger”参数“Input[numberofbits].[]”设为“20”参数“OutputBusType”设为“SignedInteger”参数“Output[numberofbits].[]”设为“10”参数“InputBitConnectedtoOutputMSB”设为“18”参数“InputBitConnectedtoOutputLSB”设为“9”使用“Round”使用“Saturate”最后,建立子系统。至此,基本DDS模型就建立完成。第9章DDS设计9.2.2DDS模型的使用在此调用上面设计的DDS子系统SubDDS,构建一个简单的DDS应用模型,见图9-5。第9章DDS设计图9-5DDS的使用第9章DDS设计输入相位字为0,频率字为2000000,幅度控制值为124,设置Simulink的仿真停止时间StopTime为5,仿真步进FixedStepSize设为1e-3。下面开始仿真。图9-6显示了仿真结果。第9章DDS设计图9-6仿真结果第9章DDS设计9.3FSK调制器设计9.3.1FSK调制器原理二进制数字频率调制(2FSK)是利用二进制数字基带信号控制载波进行频谱变换的过程。第9章DDS设计在发送端,产生不同频率的载波振荡来传输数字信息“1”或“0”;在接收端,把不同频率的载波振荡还原成相应的数字基带信号。相邻两个振荡波形的相位可能是连续的,也可能是不连续的,因此有相位连续的FSK及相位不连续的FSK之分。FSK调制的方法有两种:(1)直接调频法。用数字基带矩形脉冲控制一个振荡器的某些参数,直接改变振荡频率,输出不同频率的信号。(2)频率键控法。用数字矩形脉冲控制电子开关在两个振荡器之间进行转换,从而输出不同频率的信号。第9章DDS设计9.3.2FSK模型在此设计一个FSK模型,在调制方法上选择直接调制法。采用DDS方法来生成频率可控的正弦信号,利用数字基带信号控制DDS的频率字输入,实现FSK调制。如图9-7所示,这是一个简化的DDS结构,由8 bit累加器作为相位累加器,由二选1选择器来选择累加器的相位,相位是由数字基带信号控制的。采用改变相位增量来控制频率的方法,可以产生相