一、DDS原理及结构
DDS(Direct Digital Synthesis)是一种把一系列数字信号通过D/A转换器转换成模拟信号的数字合成技术。它有查表法和计算法两种基本合成方法。由于ROM查询法结构简单,只需要在ROM中存放不同相位对应的幅度序列,然后通过相位累加器的输出对其寻址,经过数/模转换和低通滤波(LPF)输出便可以得到所需要的模拟信号。
ROM查表法。DDS技术实质上是实现了一个数字分频器的功能。对于一个周期的正弦波连续信号,可以沿其相位轴方向,以等量的相位间隔对其进行相位/幅度采样,得到一个周期性的正弦信号的离散相位的幅度序列,对模拟幅度进行量化后的幅值采用二进制数据编码,这样就把一个周期的正弦波连续信号转换成一系列离散的二进制数字量,然后存入存储器RAM中,每个存储器单元的地址即是相位取样地址,存储单元的内容是已经量化了的正弦波幅值。一个这样的只读存储器构成了一个与2π周期相位取样对应的正弦波函数表。DDS的基本原理主要由标准参考频率源、相位累加器、波形存储器和数/模转换器构成。
在时钟脉冲的控制下,频率控制字K由累加器得到相应的相码。相码寻址波形存储器进行相码—幅码变换输出不同的幅度编码,经过数/模变换器得到相应的阶梯波,最后经过低通滤波器对阶梯波进行平滑,即得到由频率控制字K决定的连续变化的输出波形。相位累加器是实现DDS的核心,它由一个N位字长的二进制加法器和一个由固定时钟脉冲取样的N位相位寄存器组成,在每个时钟脉冲到达时,相位寄存器采用上个时钟周期内相位寄存器的值与频率控制字K之和,并作为相位累加器在这一时钟周期的输出。fpga系统框图如图:
二、ROM表的生成
利用matalab产生.mif。.mif文件格式
WIDTH=8;//mif数据的深度,8代表每个数据都是8bit;
DEPTH=512;//数据的宽度,512代表总共有512的数据;
ADDRESS_RADIX=HEX;//地址的格式 HEX即代表以16进制来寻址 (uns–十进制,bin–二进制,hex–十六进制)
DATA_RADIX=HEX;//数据存储的格式,同上
CONTENT BEGIN//
0 : 80;
1 : 86;
2 : 8C;
3 : 92;
4 : 98;
END;//在content begin和end之间就是存储的数据
采用matlab生成.mif
MATALB程序:
clc;
clear all;
close all;
width = 8; %位宽
depth = 2 ^9; %深度(采样点个数)
x = linspace(0, 2 * pi, depth);
y = sin(x);
y = round(y * (2 ^ (width - 1) - 1) + 2 ^ (width - 1) - 1);%量化
plot(y<