logo资料库

DDS原理及实现.pdf

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
1 DDS原理简介 数字频率合成器( Direct Digital Synthesizer )是从相位概念出发直接 合成所需波形的一种频率合成技术。 一个直接数字频率合成器由相位累加器、 加 法器、波形存储 ROM、D/A 转换器和低通滤波器( LPF)构成。 DDS的原理框图如 图 1.2 所示: N 位 S(n) S(t) 累加器 加法器 加法器 ROM D/A LPF 频率控制 字 K 相位控制字 P 波形控制字 W 参考时钟 clkf 图 1.2 DDS 原理框图 其中 K 为频率控制字、 P为相位控制字、 W为波形控制字、 clkf 为参考时钟频 率, N为相位累加器的字长, D为 ROM数据位及 D/A 转换器的字长。相位累加器 在时钟 clkf 的控制下以步长 K 作累加,输出的 N位二进制码与相位控制字 P、波 形控制字 W相加后作为波形 ROM的地址,对波形 ROM进行寻址, 波形 ROM输出 D 位的幅度码 S(n) 经过 D/A 转换器变成阶梯波 S(t) ,再经过低通滤波器平滑后就 可以得到合成的信号波形。 合成的信号波形的形状取决于波形 ROM中存放的幅度 值,因此用 DDS可以产生任意波形。这里我们用 DDS实现正弦波的合成。 A) 频率预臵与调节电路 K被称为频率控制字 , 也叫相位增量 .DDS方程为: f out fclk K 2N , out f 为输 clkf 出频率, clkf 为时钟频率。当 K=1时,DDS输出最低频率(也即频率分辨率) 为 2N , 而 DDS的最大输出频率由 Nyquist 采样定理决定, 即 f out f clk 2 ,也就是说 K 最 大值为 2 1N 。因此,只要 N足够大,DDS可以得到很细的频率间隔。 要改变 DDS 的输出频率,只要改变频率控制字 K 即可。 B) 累加器 相位累加器由 N位加法器与 N位寄存器级联构成。每来一个时钟脉冲 clkf ,
加法器将频率控制字 K 与寄存器输出的累加相位数据相加, 再把相加后的结果送 至寄存器的数据输入端。 寄存器将加法器在上一个时钟作用后所产生的相位数据 反馈到加法器的输入端; 以使加法器在下一个时钟的作用下继续与频率控制字进 行相加。这样,相位累加器在时钟作用下, 进行相位累加。 当相位累加器累加满 量里就会产生一次溢出,完成一个周期性的动作。 C) 控制相位的累加器 通过改变相位控制字 P可以控制输出信号的相位参数。 令相位加法器的字长 为 N,当相位控制字由 0 跃变到 P(P 0)时,波形存储器的输入为相位累加器 的输出与相位控制字 P之和,因而其输出的幅度编码相位会增加 P 2 N ,从而使最 后输出的信号产生相移。 D) 控制波形的加法器 通过改变波形控制字 W可以控制输出信号的波形。 由于波形存储器中的不同 波形是分块存储的, 所以当波形控制字改变时, 波形存储器的输入为改变相位后 的地址与波形控制字 W(波形地址)之和,从而使最后输出的信号产生相移。 E)波形存储器 用相位累加器输出的数据作为波形存储器的取样地址,进行波形的相位—幅 值转换,即可以给定的时间上确定输出的波形的抽样幅值。 N位的寻址 ROM相当 于把 0°~ 360°的正弦信号离散成具有 2 N 个样值的序列,若波形 ROM有 D位数 据位,则 2N 个样值的幅值以 D位二进制数值固化在 ROM中,按照地址的不同可 以输出相应相位的正弦信号的幅值。 E) D/A 转换器 D/A 转换器的作用是把合成的正弦波数字量转换成模拟量。正弦幅度量化序 列 S(n) 经 D/A 转换后变成了包络为正弦波的阶梯波 S(t) 。需要注意的是,频率 合成器对 D/A 转换器的分辨率有一定的要求, D/A 转换器的分辨率越高, 合成的 正弦波 S(t) 台阶数就越多,输出波形的精度也就越高。 F) 低通滤波器 对 D/A 输出的阶梯波 S(t) 进行频谱分析,可以 S(t) 中除了主频 out f 外,还 相存在分布在 out f ,2 out f ……两边正负 out f 处的非谐波分量, 幅值包络为辛格函 数。因此,为了取出主频 out f ,必须在 D/A 转换器的输出端接入截止频率为 out f /2 的低通滤波器。
2 FPGA 的 DDS载波实现方法 实现通信中不少信道都不能直接传送基带信号, 必须用基带信号对载波波形 的某些参量进行控制, 使载波的这些参量随基带信号的变化而变化, 即所谓正弦 载波调制。 从原理上来说, 受调载波的波形可以是任意的, 只要已调信号适合于信道传 输就可以了。但实际上,在大多数数字通信系统中,都选择正弦信号作为载波。 这是因为正弦信号形式简单,便于产生及接收。 方法一 : 用 ROM核来实现 说明:将载波一个周期的采样值直接写入 V代码中的,而不是用 ROM 核。(利用 ROM核需要将载波一个周期的采样值写入 COE文件中,插入 ROM核中) 优点: 用不同的初始值寻址可以输出不同频率和不同初始相位的载 波。 方法二: 用 DDS核来实现 优点: 频率和初始相位都可以任意设定。 缺点: 在使用时比较难控制 方法三: 用 Sine-Cosine Look-up Table 核来实现 代码: module sine__cosine(clk,reset,in_rdy,desine,decosine,out_rdy); input clk,reset,in_rdy; output [7:0] desine,decosine; output out_rdy; wire out_rdy; wire RFD,RDY; reg ND; reg[3:0] THETA; always @(posedge clk) begin
if(reset) begin ND<=0;THETA<=0;end else if(in_rdy) begin THETA<=THETA+1; ND<=in_rdy; end end 、 // 核例化 sinecosine sinecosine( .THETA(THETA), // Bus [3 : 0] .CLK(clk), .SCLR(reset), .ND(ND), .RFD(RFD), .RDY(out_rdy), .SINE(desine), // Bus [7 : 0] .COSINE(decosine)); // Bus [7 : 0] endmodule 仿真图: 第一路为正弦波,第二路为余弦波 说明:可以对 THETA赋不同初始值即可以实现不同初始相位的载波。 此正弦波和余弦波一个周期是采样 16 个点,可以在 IP 核进行参数设臵修改 的。其频率为 clkf /16 ,输出位宽为 8 位宽。 优点: 载波频率是时钟频率的 1 2 N 其中 N 在 IP 核中可设臵,设臵很简单, 初始相位也可以通过修改 THETA参数来实现 ,实现起来很方便。也比较容易控制。
方法四: 将载波一个周期的采样点值写入代码中来实现。 代码: module sine(clk,reset,en,out_rdy,out); input clk,reset,en; output out_rdy; output [7:0] out; reg out_rdy; reg [7:0] out; reg[2:0] addr; always @(posedge clk) begin:initial_control if(reset) begin addr<=3'd0; end else if(en) begin addr<=addr+1; end end always @(posedge clk) begin:Red_sig if(en) case(addr) 4'd0:begin out<=8'd45;out_rdy<=1; end 4'd1:begin out<=8'd64;out_rdy<=1; end 4'd2:begin out<=8'd45;out_rdy<=1; end 4'd3:begin out<=8'd0;out_rdy<=1; end 4'd4:begin out<=8'd211;out_rdy<=1;end 4'd5:begin out<=8'd192;out_rdy<=1; end
4'd6:begin out<=8'd211;out_rdy<=1; end 4'd7:begin out<=8'd0;out_rdy<=1; end endcase end endmodule 仿真图: 说明:此正弦载波一个周期是采样 8 个点,即频率为 clkf / 8 其输出位宽为 8 位宽。 若想产生余弦载波的话,只需将 Red_sig 中 out 的值改变即可。 优点:与模块使能信号 en 同时输出,没有延时。在设计调制解调时,不用 设计基带信号与载波同步。 相对于用核产生要方便一些, 因为用核产生时, 因为 设臵了握手信号,载波较使能信号都有固定时间的延时,例如用 Sine-Cosine Look-up Table 核来实现载波时,一般都有 2 或 3 个系统时钟的延时,致使载波 与基带信号不同步,需将基带信号延时以使两路信号同步。 缺点: 若载波的一个周期采样多个点的话,将采样值直接写入 V 代码中, 就有点麻烦了。
分享到:
收藏