DDS
DDS即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于通信领域。 DDS主要由相位累加器、相位调制器、波形数据表以及D/A转换器构成。 其中相位累加器由N位加法器与N位寄存器构成。每来一个时钟,加法器就K和与累加寄存器输出的相位数据相加,相加的结果又反馈至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。即在每一个时钟脉冲输入时,相位累加器便把频率控制字累加一次。 K=2^N*f_out/f_clk 相位累加器输出的数据就是合成信号的相位。相位累加器的溢出频率,就是DDS输出的信号频率。用相位累加器输出的数据,作为波形存储器的相位采样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位到幅度的转换。波形存储器的输出送到D/A转换器,由D/A转换器将数字信号转换成模拟信号输出。我不使用P_word. 简单来讲就是对离散的信号进行连续的转化,线是由点构成的,说的就是这个道理。 频率字输入与输出频率同增同减,而相位字输入控制输出相位的调制。 波形数据表:等间距的采样。用matlab。 下面展示一些 定义类型 。
module dds
(
input wire sys_clk ,
input wire sys_rst_n ,
input wire [3:0] wave_select ,
output wire [7:0] data_out
);
下面展示一些 rom以sin
clc;
clear all;
F1=1;
Fs=2^12;
P1=0;
N=2^12;
t=[0:1/Fs:(N-1)/Fs];
ADC=2^7 - 1;
s=A*sin(2*pi*F1*t + pi*P1/180) + ADC;
plot(s);
fild = fopen('sin_wave_4096x8.mif','wt');
fprintf(fild, '%s\n','WIDTH=8;');
fprintf(fild, '%s\n\n','DEPTH=4096;');
fprintf(fild, '%s\n','ADDRESS_RADIX=UNS;');
fprintf(fild, '%s\n\n','DATA_RADIX=UNS;');
fprintf(fild, '%s\t','CONTENT');
fprintf(fild, '%s\n','BEGIN');
for i = 1:N
s0(i) = round(s(i));
if s0(i) <0
s0(i) = 0
end
fprintf(fild, '\t%g\t',i-1);
fprintf(fild, '%s\t',':');
fprintf(fild, '%d',s0(i));
fprintf(fild, '%s\n',';');
end
fprintf(fild, '%s\n','END;');
fclose(fild);
以ip_core为波形读取。点击Tools里面可以写人ipcore。
|