DDS产生双频正弦波及叠加

DDS简介

直接数字式频率合成器(Direct Digital Synthesizer)

img

在这里插入图片描述

在这里插入图片描述

在参考频率时钟的驱动下,DDS模块开始工作;当每来一个参考时钟时,累加器就把频率控制字FW与寄存器输出的值进行累加,将相加后的结果再输入到寄存器中,而累加寄存器就将在上一个参考时钟作用时产生的数据通过反馈的方式输送到累加器中。这样,在时钟的作用下,就可以不停的对频率控制字进行累加。此时,用相位累加器输出的数据作为地址在波形存储器中通过查找地址所对应的幅值表,就可以完成其从相位到幅值之间的转化。

相位累加器 Phase = Phase + fre_word,可以暂且理解为i = i + 1一样的东西。

频率控制字 fre_word,这个东西的值直接影响输出信号的频率
D D S 核 频 率 分 辨 率 : f out  = f c l k 2 B θ ( n ) Δ θ DDS核频率分辨率 : f_{\text {out }}=\frac{f_{c l k} }{2^{B_{\theta(n)}}}\Delta \theta DDS:fout =2Bθ(n)fclkΔθ
其中Δθ:频率控制字,取值后文用fre_word表示。 B θ ( n ) B_{θ(n)} Bθ(n):相位累加器位宽,后文用B表示。fclk:DDS工作时钟频率分辨率就是当Δθ=1时的fout

在参考信号与加法器或寄存器的位数给定时,信号最终的输出频率主要由频率控制字决定。故当频率控制字变化时,输出频率也跟着变化,从而可以实现调频的基本功能。

先假如我们需要的信号频率范围:1M-10MHz,分辨率10KHz。
取Δθ=1,fout=0.01MHz,B=10bit,我们可得DDS工作时钟fclk=10.24MHz。

同理1KHz-8.192MHz,分辨率1KHz。
取Δθ=1,fout=1KHz,B=13bit,我们可得DDS工作时钟fclk=8.192MHz。

即产生一个正弦波信号需要2部分:
1. 时钟分频器
2. DDS IP核

时钟设置

IP Catalog->Clocking Wizard
Input Frequency 50MHz (根据自己板子选)
在这里插入图片描述
Output Clocks根据需求输出10.24MHz和8.192MHz
在这里插入图片描述

DDS设置

IP Catalog->DDS Compiler->Component Name
在这里插入图片描述
这个做的比较简单,暂时不对相位做出要求
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

13位的DDS设置方法类似,最终Summary大概是这样:
在这里插入图片描述

频率叠加

本质:有符号数相加

测试代码

部分程序
/*************************************************************************
                        PLL IP calling
**************************************************************************/
clk_wiz_0 clk_wiz_0_inst
(// Clock in ports
.clk_in1    (sys_clk    ),             // IN 50Mhz
// Clock out ports
.clk_out1   (CLK_10240K  ),             // OUT 200Mhz
.clk_out2   (CLK_8192K  ),             // OUT 200Mhz
// Status and control signals	 
.reset      (~rst_n     ),             // RESET IN
.locked     (locked     )
);     

 /*************************************************************************
                       DDS IP calling
**************************************************************************/        
DDS_10KHZ DDS_10_inst (
  .aclk(CLK_10240K ),                                  // input wire aclk
  .s_axis_config_tvalid( fre_word_en ),  // input wire s_axis_config_tvalid
  .s_axis_config_tdata( fre_word_10 ),    // input wire [15 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid10),      // output wire m_axis_data_tvalid
  .m_axis_data_tdata( rdata_10 )        // output wire [7 : 0] m_axis_data_tdata
);

DDS_1KHz DDS_13_inst (
  .aclk(CLK_8192K ),                                  // input wire aclk
  .s_axis_config_tvalid( fre_word_en ),  // input wire s_axis_config_tvalid
  .s_axis_config_tdata( fre_word_13 ),    // input wire [15 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid13),      // output wire m_axis_data_tvalid
  .m_axis_data_tdata( rdata_13 )        // output wire [7 : 0] m_axis_data_tdata
);


 /*************************************************************************
                       Multi-frequency add
**************************************************************************/               
//       由于最高位存在符号位,因此不能直接叠加
//       相当于加一个有符号数的加法
       always@(posedge sys_clk)
       begin
             rrdata_10 <= { rdata_10[7],rdata_10[7:0]};
             rrdata_13 <= { rdata_13[7],rdata_13[7:0]};
             rdata_add = rrdata_13+ rrdata_10 ; 
       end
      
       assign data_add = rdata_add ; 
部分仿真程序
	pll_test uut (
		.sys_clk(sys_clk), 		
		.rst_n(rst_n), 
		.clk_out(clk_out),
		.fw_10(fw_10),
		.fw_13(fw_13),
        .data_10(data_10),
        .data_13(data_13),
        .data_add(data_add)
	);

	initial begin
		// Initialize Inputs
		sys_clk = 0;
		rst_n = 0;
        fw_10 = 10'b00_0000_0001;
        fw_13 = 10'b0_0000_0000_0001;
		// Wait 100 ns for global reset to finish
		#100;
          rst_n = 1;        
		// Add stimulus here
		#20000;
      //  $stop;
	 end
仿真结果查看

波形设置:右键单击
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MATLAB验证

f1=110^3; %1KHz
f2=1010^3; %10KHz
y1 = sin(2pif1.t);
y2 = sin(2pif2.t);
y = sin(2pif1.t)+sin(2pi*f2.*t);

在这里插入图片描述

参考网页

1.FPGA学习(一)——产生频率可控的正弦波
2.Vivado DDS IP配置与仿真(1)正弦、余弦信号发生器

附:本文程序下载链接

  • 0
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: AD9850DDS是一款数字频率合成器,用于产生各种类型的信号波形,包括正弦波、三角波和方波。 AD9850DDS采用了直接数字合成(DDS)技术,通过数字控制相位和幅度来实现信号波形的产生。其内部包含一个数字控制振荡器(NCO),可以根据输入的控制信号频率和相位信息,生成特定频率和相位的信号波形。 要产生正弦波,可以通过设定所需频率和相位信息,将AD9850DDS设置为正弦波模式。这样,当输入相位和频率数据后,AD9850DDS将开始产生对应频率和相位的正弦波信号。 要产生三角波,可以通过设定所需频率和相位信息,将AD9850DDS设置为三角波模式。在这种模式下,AD9850DDS将通过调整振荡器的相位和频率,产生连续性变化的三角波形。 要产生方波,可以通过设定所需频率和相位信息,将AD9850DDS设置为方波模式。在这种模式下,AD9850DDS将以设定的频率进行周期性的相位切换,产生方波信号。 总之,AD9850DDS是一个非常灵活和多功能的信号波形产生器,可通过设定所需频率和相位信息,产生正弦波、三角波和方波等不同信号波形。 ### 回答2: AD9850DDS是一种数字直接合成器,可以通过数字控制产生不同类型的信号波形,其中包括正弦波、三角波和方波。 AD9850DDS的工作原理是利用数字信号对相位累加器和幅度累加器进行控制,以产生不同频率和振幅的输出信号。 在产生正弦波时,AD9850DDS通过不断累加相位值,在每个时刻计算出对应相位的正弦波幅度,并输出该信号。这样就可以实现不同频率的正弦波。 在产生三角波时,可以将相位值按线性方式递增,并在达到最大值时迅速归零,然后从零开始递增。这样就可以产生具有三角形状的波形。 在产生方波时,可以将幅度值在两个取值(高电平和低电平)之间切换,使得输出信号在不同时间间隔内保持相同的幅度。这样就可以产生具有方形状的波形。 总结起来,AD9850DDS通过数字控制相位和幅度来生成不同类型的信号波形,包括正弦波、三角波和方波。这种数字合成的方式具有灵活性高、精度高等优点,广泛应用于科学研究、通信系统等领域。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sherry_who

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值