0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ROM存储1/4周期正弦信号构造DDS详解

Hx 作者:工程师陈翠 2018-07-14 05:57 次阅读

Matlab仿真

注意:由于采用了1/4周期存储,要求整个周期的数值是中心对称的,半个周期的数值是轴对称的。这就意味着采样点中不应该有0值得存在。

Matlab仿真——ROM表存储数据

%% ROM产生 (无符号数)

ROM_N=2^10; %ROM表深度

DATA_L=14; %ROM位宽

t=1:ROM_N;

y=(2^DATA_L-1)*(sin(2*pi*(t-0.5)/ROM_N/4));%-0.5保证对称性

ROM_DATA=round(y);

Matlab仿真——DDS程序(请原谅我没有用case……)

%% 正弦波dds产生

F_CLK=10*10^6; %时钟频率10M

PINC_IN_L=32; %增量长度

DDS_CLK=10*10^3; %dds输出频率10k

PHASE_IN=0; %初始相位

pinc=round(DDS_CLK*2^PINC_IN_L/F_CLK); %相位增量

SIM_L=4000; %仿真长度

phase=PHASE_IN+pinc*(0:SIM_L-1);

addr=mod((floor(phase/2^PINC_IN_L*ROM_N)),ROM_N*4);

flag=floor(addr/ROM_N);

dds_out=1:SIM_L;

for i=1:SIM_L

if(flag(i)==0)

dds_out(i)=ROM_DATA(addr(i)+1);

else if(flag(i)==1)

dds_out(i)=ROM_DATA(2047-addr(i)+1);

else if(flag(i)==2)

dds_out(i)=-ROM_DATA(addr(i)-2048+1);

else

dds_out(i)=-ROM_DATA(4095-addr(i)+1);

end

end

end

end

plot(dds_out);

3.DDS的解释

Xilinx的DDS核的User Guide中队DDS做了很详细的说明,本节不再重复此内容,本节将叙述一种全新的DDS理解方式。这种理解方式解决了频率控制字长于ROM表深度时DDS的理解上的问题。

连续还是离散?

连续还是离散,在于我们用什么眼光去看待。如下图所示,我们可以理解蓝色的图是离散的,而红色的线是连续的。然而,对于我们要获取的信息而言,这两幅图是完全没有区别的。抽样定理中有理想抽样和平顶抽样(采样保持电路)之分,然而在频域效果上,是并没有很大区别的。

ROM存储1/4周期正弦信号构造DDS详解

ROM表存储的是连续的数值

按照上面的理论,可以认为ROM表中存储的是正弦信号的平顶采样结果。如下图所示(一个全周期的ROM表,对称性满足1/4周期存储的要求)

ROM存储1/4周期正弦信号构造DDS详解

上图的频谱在信号与系统中有提及,上述波形的形成方式可以认为是在乘以周期为T的冲击函数,之后卷积一个宽度为T的窗函数。对应可以求得其频域。(具体可参考平顶抽样)

频率控制字

频率控制字控制对上述的阶梯函数的采样,如果这样理解的话,就没有所谓的相位截取取ROM表的值的疑惑了。频谱图能够清晰的表现这一过程,然而由于blog表达不便,此处不做详细说明。

此处能够解释DDS产生的杂散。

4.Verilog实现

老师教导我们,Verilog和Matlab代码应该是完全一致的,也就是说程序的思路,命名是一样的。但是下面的程序没有做到一致性……

`timescale 1ns / 1ps

module DDS_10k(

input clk_10M,

input rst,

output[13:0] D_SIN,

output[13:0] D_COS

);

parameter pinc=32‘d4294967; //10k

reg[31:0] addr_temp=32’d0;

reg[9:0] addra,addrb;

reg mark_a,mark_b;

always@(posedge(clk_10M)) //复位

begin

if(rst==0)

addr_temp《=32‘d0;

else

addr_temp《=addr_temp+pinc;

end

always@(posedge(clk_10M)) //1/4周期控制

begin

case(addr_temp[31:30])

2’b00:

begin

addra《=addr_temp[29:20];

mark_a《=0;

addrb《=~addr_temp[29:20];

mark_b《=0;

end

2‘b01:

begin

addra《=~addr_temp[29:20];

mark_a《=0;

addrb《=addr_temp[29:20];

mark_b《=1;

end

2’b10:

begin

addra《=addr_temp[29:20];

mark_a《=1;

addrb《=~addr_temp[29:20];

mark_b《=1;

end

2‘b11:

begin

addra《=~addr_temp[29:20];

mark_a《=1;

addrb《=addr_temp[29:20];

mark_b《=0;

end

endcase

end

//ROM表读取

ROM_SIN_1k18 rom_dds (

.clka(clk_10M), // input clka

.addra(addra), // input [9 : 0] addra

.douta(D_SIN[12:0]), // output [12 : 0] douta

.clkb(clk_10M), // input clkb

.addrb(addrb), // input [9 : 0] addrb

.doutb(D_COS[12:0]) // output [12 : 0] doutb

);

reg sin_mark_temp;

reg cos_mark_temp;

assign D_SIN[13]=sin_mark_temp;

assign D_COS[13]=cos_mark_temp;

//此处ROM没有添加register,因此输出和地址有一个周期的延时,故Mark也要有一周期延时

always@(posedge(clk_10M))

begin

sin_mark_temp《=mark_a;

cos_mark_temp《=mark_b;

end

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ROM
    ROM
    +关注

    关注

    4

    文章

    525

    浏览量

    84824
  • DDS
    DDS
    +关注

    关注

    21

    文章

    614

    浏览量

    151733
收藏 人收藏

    评论

    相关推荐

    新型DDS器件产生正弦信号和各种调制信号的设计

    设计了一种采用新型DDS器件产生正弦信号和各种调制信号的设计方法。采用该方法设计的正弦信号发生
    发表于 01-10 11:34 6586次阅读
    新型<b class='flag-5'>DDS</b>器件产生<b class='flag-5'>正弦</b>波<b class='flag-5'>信号</b>和各种调制<b class='flag-5'>信号</b>的设计

    DDS正弦信号发生器

    ,所起到的作用就是对基准时钟进行分频得到输出时钟,且有:DDS的频率分辨率为: ,即此时=1,输出时钟频率最小。DDS的基本工作流程就是通过相位的累加,得到当前的相位值,然后用当前的相位值(转换为
    发表于 02-23 16:14

    用Verilog通过DDS合成正弦信号

    本帖最后由 蓝e 于 2016-7-12 22:32 编辑 用Verilog通过DDS合成正弦信号主要原理:DDS:直接数字合成,正弦
    发表于 03-22 23:42

    基于FPGA的三相正弦DDS电路的设计与实现

    波。其原理图如图1所示: 3.正弦波发生原理及逻辑设计3.1 正弦函数表的设计在传统正弦函数ROM 表的设计中,通常将0 到2π整个
    发表于 10-18 16:29

    请问有能直接产生特殊波形信号DDS芯片吗?

    最近在做一个项目,要设计一个信号源,产生一个加汉宁窗的五周期正弦信号,频率50KHz,就是上面图片的这种形式波形。我想求助一下ADI的工程师,或者有经验的高手,ADI有没有能直接产
    发表于 12-10 09:58

    基于DDS原理和FPGA技术的基本信号发生器设计

    摘要:本设计基于DDS原理和FPGA技术按照顺序存储方式,将对正弦波、方波、三角波、锯齿波四种波形的取样数据依次全部存储ROM波形表里,通
    发表于 06-21 07:10

    浅析DDS信号发生器

    精细的频率调节。采用这种方法设计的信号源可工作于调制状态,可对输出电平进行调节,也可输出各种波形。一个完整周期的函数波形被存储在上面所示的存储器查找表中。相位累加器跟踪输出函数的电流相
    发表于 08-04 06:09

    基于DDS技术的高频正弦波发生器的设计

    以混合信号单片机C8051F020 及DDS 芯片AD9834 为核心,采用直接数字合成(DDS)技术完成多功能高频正弦信号发生器的设计。该
    发表于 08-10 15:27 107次下载

    基于DDS技术的高频正弦波发生器的设计

    以混合信号单片机C8051F020 及DDS 芯片AD9834 为核心,采用直接数字合成(DDS)技术完成多功能高频正弦信号发生器的设计。该
    发表于 12-18 15:32 111次下载

    正弦周期信号的分解与合成

    正弦周期信号的分解与合成 一、实验目的1.用同时分析法观测50Hz 非正弦周期信号的频谱,并
    发表于 09-24 11:03 1.3w次阅读
    非<b class='flag-5'>正弦</b><b class='flag-5'>周期</b><b class='flag-5'>信号</b>的分解与合成

    正弦周期信号电路的稳态计算

    正弦周期信号电路的稳态计算 对于非正弦周期信号激励的稳态电路,无法用直流电路或
    发表于 07-27 10:21 3309次阅读
    非<b class='flag-5'>正弦</b><b class='flag-5'>周期</b><b class='flag-5'>信号</b>电路的稳态计算

    基于FPGA的DDS基本信号发生器的设计

    本设计基于DDS原理和FPGA技术按照顺序存储方式,将对正弦波、方波、三角波、锯齿波四种波形的取样数据依次全部存储ROM波形表里,通过外接
    发表于 07-12 14:23 0次下载
    基于FPGA的<b class='flag-5'>DDS</b>基本<b class='flag-5'>信号</b>发生器的设计

    基于ARM与DDS的高精度正弦信号发生器设计

    基于ARM与DDS的高精度正弦信号发生器设计
    发表于 01-04 15:02 0次下载

    一文详解Vivado调用ROM IP core设计DDS

    DDS直接数字式频率合成器(Direct Digital Synthesizer) 下面是使用MATLAB生成正弦波、三角波、方波的代码,直接使用。
    的头像 发表于 07-02 06:12 9655次阅读
    一文<b class='flag-5'>详解</b>Vivado调用<b class='flag-5'>ROM</b> IP core设计<b class='flag-5'>DDS</b>

    基于FPGA 的DDS正弦信号发生器的设计和实现

    电子发烧友网站提供《基于FPGA 的DDS正弦信号发生器的设计和实现.pdf》资料免费下载
    发表于 03-24 09:34 3次下载