基于DDS的AM调制的设计.docx
《基于DDS的AM调制的设计.docx》由会员分享,可在线阅读,更多相关《基于DDS的AM调制的设计.docx(24页珍藏版)》请在冰豆网上搜索。
基于DDS的AM调制的设计
摘要:
实验利用QuartusII软件实现直接数字频率合成,具有频率字和相位字的控制功能,从而改变频率和相位。
还具有相位清零功能以及波形切换功能。
并且通过修改存储器ROM中的数据来提高精度和设计图形。
本文主要介绍实验中功能实现的方案,原理,以及相关操作。
还有实验中遇到的问题和解决方法。
关键字:
数字频率合成频率字相位字精度提高
Abstract
TheexperimentistodesigntheDirectDigitalSynthesizer(DDS)withtheQuartusII.Thedesignedsynthesizershouldbeabletochangethephaseandfrequency,anditalsocansetthephasetozeroorchangethewaves.Inaddition,wecansetthedataintheROMtoimprovetheaccuracyoftheDDSanddesignspecialfigures.
Thetextismainlytointroducethemethods,principle,andoperations.Wealsotalkabouttheproblemsandsolutionsintheexperiment.
Keywords
DirectDigitalSynthesizerfrequencyphaseimproveaccuracy
目录
1.引言…………………………………………………………(4)
2.设计要求……………………………………………………(6)
3.工作原理介绍………………………………………………(7)
4.各个子模块设计原理………………………………………(8)
4.1频率预置与调节电路…………………………………(8)
4.2累加器模块…………………………………………(9)
4.3波形存储模块………………………………………(11)
4.4D/A转化器与低通滤波器…………………………(12)
4.5调制与解调电路……………………………………(13)
4.6显示测频模块………………………………………(15)
4.6.1测频模块……………………………………(15)
4.6.2显示模块……………………………………(17)
4.7脉冲发生电路………………………………………(18)
5.仿真结果……………………………………………………(20)
6.设计结论和感想……………………………………………(22)
7.实验总结……………………………………………………(23)
8.参考文献……………………………………………………(24)
引言
DDS同DSP(数字信号处理)一样,是一项关键的数字化技术。
DDS是直接数字式频率合成器(DirectDigitalSynthesizer)的英文缩写。
与传统的频率合成器相比,DDS具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。
ØDDS的性能特点:
DDS在相对带宽、频率转换时间、高分头放力、相位连续性、正交输出以及集成化等一系列性能指标方面远远超过了传统频率合成技术所能达到的水平,为系统提供了优于模拟信号源的性能。
(1)输出频率相对带宽较宽
输出频率带宽为50%fs(理论值)。
但考虑到低通滤波器的特性和设计难度以及对输出信号杂散的抑制,实际的输出频率带宽仍能达到40%fs。
(2)频率转换时间短
DDS是一个开环系统,无任何反馈环节,这种结构使得DDS的频率转换时间极短。
事实上,在DDS的频率控制字改变之后,需经过一个时钟周期之后按照新的相位增量累加,才能实现频率的转换。
因此,频率时间等于频率控制字的传输,也就是一个时钟周期的时间。
时钟频率越高,转换时间越短。
DDS的频率转换时间可达纳秒数量级,比使用其它的频率合成方法都要短数个数量级。
(3)频率分辨率极高
若时钟fs的频率不变,DDS的频率分辨率就是则相位累加器的位数N决定。
只要增加相位累加器的位数N即可获得任意小的频率分辨率。
目前,大多数DDS的分辨率在1Hz数量级,许多小于1mHz甚至更小。
(4)相位变化连续
改变DDS输出频率,实际上改变的每一个时钟周期的相位增量,相位函数的曲线是连续的,只是在改变频率的瞬间其频率发生了突变,因而保持了信号相位的连续性。
正文
1、设计要求
1.基本设计要求
a)利用QuartusII软件和SmartSOPC实验箱来实现DDS调制器的设计;
b)DDS中的波形存储器模块用Altera公司的Cyclone系列FPGA芯片中的RAM实现,RAM结构配置成212×10类型;
c)具体参数要求:
频率控制字K取4位;基准频率fc=1MHz,由实验板上的系统时钟分频得到;
d)系统具有清零和使能的功能;
e)利用实验箱上的D/A转换器件将ROM输出的数字信号转换为模拟信号,能够通过示波器观察到正弦波形;
f)通过开关(实验箱上的Ki)输入DDS的频率和相位控制字,并能用示波器观察加以验证;
2.提高部分设计要求
a)通过按键(实验箱上的Si)输入DDS的频率和相位控制字,以扩大频率控制和相位控制的范围;(注意:
按键后有消颤电路)
b)能够同时输出正余弦两路正交信号;
c)在数码管上显示生成的波形频率;
d)充分考虑ROM结构及正弦函数的特点,进行合理的配置,提高计算精度;
e)设计能输出多种波形(三角波、锯齿波、方波等)的多功能波形发生器;
f)自行添加其他功能。
2、工作原理介绍
在进行正式的实验操作前,我们需要先了解DDS的具体实现原理,方能进行设计。
图1DDS实现的原理图
根据以上的原理图,下面以正弦波为例,对各个部分进行简单介绍。
波形存储器,即为ROM,用于存储波形数据。
将一个周期内的正弦波,分为2N份,取每一点坐标下的正弦值,在将数据进行处理,扩展到0到2D-1中的取值。
完成以上过程即完成了ROM数据的配置。
N位是ROM的地址线宽度,即ROM中存有2N数据;D位是ROM的数据线宽度,即ROM输出的数据范围是0到2D-1,这与以上ROM的数据配置相互对应。
如果对ROM中数据逐一取值,输出的为阶梯波,但是通过D/A转换即可恢复正弦波形,累加器就是用于此。
但ROM中的数据也可以间隔取值,这样会减少采样点的个数,但因为系统时钟频率fc=1MHz足够大,远远大于Nyquist频率,所以减少采样点,对恢复波形没有影响,但是可以缩短一个波形的输出时间(即TS),这样就能提高输出波形频率。
即通过改变数据取样间隔,从而改变输出频率,达到频率可控。
频率控制字K就用于改变采样间隔,频率控制字决定了累加器每次相加的数值,即在ROM中每个几个数据取出一个输出,这样就达成了频率控制。
总体电路图如下:
图2DDS调制器总体电路图
3、各个子模块设计原理:
(1)频率预置与调节电路
作用:
实现频率控制量的输入;不变量K被称为相位增量,也叫频率控制字。
图3频率控制字电路
图中ENP使能端接k5开关。
控制电路采用循环计数方式,不再另外设置清零端。
当k5置1时,74163开始加计数。
当k5置0时,74163处于保持状态。
此时可由测频电路显示的频率换算出频率字。
(2)相位累加器
相位累加器由12位的加法器和12位的寄存器组成,其原理图如下所示:
图4相位累加器
相位累加器的作用是在频率为1MHz的时钟的作用下,进行相位累加,当相位累加器累加满量时就会产生一次溢出,完成一个周期性的动作。
其中的加法器用VHDL语言编写,寄存器则由硬件实现。
具体实现如下:
1、加法器:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_signed.all;
entityadderis
port(op:
insigned(14downto0);
result:
outsigned(14downto0));
endadder;
architecturebehofadderis
signalp:
signed(14downto0);
begin
P<="001110111110001";
result<=OP+P;
endbeh;
2、寄存器
图5寄存器内部电路
op2[11..0]端输入的频率字,控制步长,addr[11..0]端输入的是寄存器中输出的,这样可以通过寄存器的clk脉冲控制地址线上的数值以步长为间隔变化,这样就可根据步长对ROM中的数据进行采样。
采用寄存器是考虑到result[11..0]端输出的数据时间不统一,这样将影响到取样,并且要将数据进行累加时也需要脉冲,这就要由累加器提供,这也说明了寄存器的作用。
对累加器进行波形仿真如下
图6累加器仿真波形图
(3)波形存储器
其作用是进行波形的相位---幅值转换。
原理是:
ROM的N位地址把0O~360O的正弦角度离散成具有2N个样值的序列;ROM的D位数据位则2N个样值的幅值量化为D位二进制数据。
图7音频信号封装模型图8调制信号封装模型
图9音频信号发生电路
图10调制信号发生电路
由电路图可以看出音频信号和调制信号采用同样的发生方法,其结构类似。
故分析时,仅以音频信号为例。
音频信号发生电路主要由三部分组成:
频率控制字、累加器、记录正弦波的ROM。
频率控制字与总电路中的频率控制字类似。
不同的是为了更好的进行控制,增加了一个清零开关。
电路结构如左图示。
累加器结构如前,不再作说明。
电路中使用的正弦波利用MATLAB软件生成波形并导入ROM中。
MATLAB软件用到的公式如下:
a)T=2*pi/4096;t=[0:
T:
2*pi];//正弦波
A=(1+sin(t))*1023/2;
B=round(A);
b)T=2*pi/4096;t=[0:
T:
2*pi-T];//方波
A=(1+square(t))*1023/2;
B=round(A);
c)T=2*pi/4096;t=[0:
T:
2*pi-T];//锯齿波
A=(1+sawtooth(t))*1023/2;
B=round(A);
d)T=2*pi/4096;t=[0:
T:
2*pi-T];//三角波
A=(1+square(t,0.5))*1023/2;
B=round(A);
另外,通过更改参数可以形成二分之一的正弦波及四分之一的正弦波。
本例实验中时间有限,仅以正弦波为例设计。
其余波形仅作理论分析,不另作硬件仿真。
(4)D/A转化器与低通滤波器
D/A转换器的作用有二。
其一是把已经合成的正弦波的数字量转换成模拟量。
其二则是是滤除生成的阶梯形正弦波中的高频成分,将其变成光滑的正弦波,充当低通滤波器。
(5)调制与解调电路
调制解调部分电路图如下图示:
图11调制解调电路
该部分电路有3个模块组成:
mul、adder、mul10。
其中mul模块接音频信号,mul10则接调制信号。
adder模块则与74163组合使用,控制m的取值范围,使之产生或不产生过调制。
各模块均由VHDL语言编写,具体实现如下:
——mul模块
LIBRARYieee;
USEieee.std_logic_1164.all;
USEieee.std_logic_arith.aLL;
USEieee.std_logic_signed.all;
USEieee.std_logic_unsigned.all;
ENTITYmulIS
PORT(X:
INsigned(9downto0);
y:
INSTD_LOGIC_VECTOR(3downto0);
clk:
instd_logic;
result:
OUTsigned(14downto0));
ENDmul;
ARCHITECTUREmul_archOFmulIS
SIGNALp:
signed(4downto0);
BEGIN
p<=signed('0'&y);
PROCESS(clk)
BEGIN
IF(clk'eventandclk='1')THEN
result<=X*p;
ENDIF;
ENDPROCESS;
ENDmul_arch;
——adder模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_signed.all;
entityadderis
port(op:
insigned(14downto0);
result:
outsigned(14downto0));
endadder;
architecturebehofadderis
signalp:
signed(14downto0);
begin
P<="001110111110001";
result<=OP+P;
endbeh;
——mul10模块
LIBRARYieee;
USEieee.std_logic_1164.all;
USEieee.std_logic_arith.aLL;
USEieee.std_logic_signed.all;
USEieee.std_logic_unsigned.all;
ENTITYmul10IS
PORT(x:
INsigned(9downto0);
y:
INsigned(14downto0);
clk:
instd_logic;
result:
OUTsigned(9downto0));
ENDmul10;
ARCHITECTUREmul10_archOFmul10IS
SIGNALp:
signed(24downto0);
BEGIN
PROCESS(clk)
BEGIN
IF(clk'eventandclk='1')THEN
P<=X*Y;
result<=P(24downto15);
ENDIF;
ENDPROCESS;
ENDmul10_arch;
(6)显示测频电路
显示测频电路用于测量信号频率,并将结果数字化显示在数码管中。
其外部模块如下图:
图12显示测频电路模块图13测频模块
其中,测频模块封装于显示测频模块中。
下面我们将对这两个模块进行分析。
1)测频模块
测频电路用于测量发生波形的频率,其原理图如下:
图14测频电路原理图
原理波形图如下:
图15原理波形图
而其实际电路采用如下方式实现:
图16实际测频电路图
测频电路由计数器和寄存器两部分组成。
先对单位时钟clk1进行二分频,在二分频反相后的结果处于高电平时,就使得计数器的使能端有效,计数器开始计数,当二分频反相结果出现下降沿时,计数器的结果就被寄存器锁存后通过显示电路输出。
电路中存在反相器会有延时效应,但是延时时间很短,只要小于待测信号周期即可,而根据最后的实验结果可知,测得的频率最高只是几千,所以反相器的延时效应对实验没有太大影响。
2)显示模块
显示模块内部电路图如下:
图17显示模块内部电路
在显示模块内部,testfrequency模块为测频电路的封装,lpm_mux4为一28选4器件。
m6模块为用触发器组成的模7计数器,配合74138构成扫频电路。
seg为用VHDL语言编写的译码显示模块。
现将各模块内部电路显示如下:
图18模7计数模块内部电路
Seg模块采用语言编写,设计为16进制显示,单管显示为0—F:
libraryieee;
useieee.std_logic_1164.all;
entitysegis
port(bcd_led:
instd_logic_vector(3downto0);
ledseg:
outstd_logic_vector(6downto0));
endseg;
architecturebehofsegis
begin
withbcd_ledselect
ledseg<="1000000"when"0000",--0
"1111001"when"0001",--1
"0100100"when"0010",--2
"0110000"when"0011",--3
"0011001"when"0100",--4
"0010010"when"0101",--5
"0000010"when"0110",--6
"1011000"when"0111",--7
"0000000"when"1000",--8
"0010000"when"1001",--9
"0001000"when"1010",--10
"0000011"when"1011",--11
"1000110"when"1100",--12
"0100001"when"1101",--13
"0000110"when"1110",--14
"0001110"when"1111",--15
"1111111"whenothers;
endbeh;
(7)脉冲发生电路
此电路实际上是分频电路,把系统提供的48MHz频率的时钟信号分频得到实验中用到的各种频率的时钟信号。
电路如下:
图19脉冲发生电路
图中三个模块为语言模块,内部实现方式一致,仅参数有所变动。
现将48M分频即kcoun1模块内部展开:
LIBRARYIEEE;
USEIEEE.std_logic_1164.ALL;
USEIEEE.std_logic_unsigned.ALL;
ENTITYkcoun1IS
PORT(A:
INstd_logic;
B:
bufferstd_logic);
ENDkcoun1;
ARCHITECTUREkcoun1_arcOFkcoun1IS
SIGNALcounter:
std_logic;
BEGIN
PROCESS(A)
VARIABLEcounter1:
integerRANGE0TO48000000;
CONSTANTmd:
integer:
=24000000;
BEGIN
IF(A'eventANDA='1')THEN
IF(counter1=md)THEN
counter1:
=0;
counter<=NOTcounter;
B<=counter;
ENDIF;
counter1:
=counter1+1;
ENDIF;
ENDPROCESS;
ENDkcoun1_arc;
修改下划线部分的参数即可产生不同的频率。
如改为2400可实现4800的分频,产生1kHz的频率;改为24即实现48分频,对应产生1MHz。
4、仿真结果
将上述模块按功能连接好后,利用实验箱进行硬件仿真。
结果截图如下:
1)音频信号波形:
2)载波信号波形:
3)控制字取3时,解调后的波形:
通过开关控制总电路图上的74163的取值,当其取值为3时,相当于m=0.25。
4)控制字取7(此时m=0.5)时,输出波形:
5)控制字取15(m=1),输出波形为
由上诉波形可以看出,随着m取值的增大,输出波形逐渐失真。
当m>1时,波形将产生过调制。
其中一种过调制波形截图如下:
图20过调制波形
(注:
此时需要修改音频和载波模块内部累加器的参数。
)
另外,通过多次硬件仿真可以发现,仿真结果会出现相移和噪声,现截图如下。
如何减小这一影响也是研究的方向。
5、设计过程中出现的问题及解决方法
由于在做DDS实验之前,已经有做过EDA实验,所以基本的操作问题都已经不再出现,主要的问题是在于原理图的设计细节。
1.ROM中参数错误
在完成ROM参数设定,将ROM与累加器连好先后进行电路编译时却报了错,最后发现是ROM中参数设定出现了错误,本应该是0-1023,但在excel中利用公式计算而使得1024出现了,从而会报错。
最后将512该成511.5即可,重新编译即可通过。
2.提高精度后,波形错误
在进行sin信号精度提高的时候,开始在sin_rom中存放的是sin信号前半部分的数据,用result[11]作为切换正反相脉冲,这样下载的波形正确了,但在加上相位字后,就出现了失真。
通过分析知道因为在加入初始相移后,取样从中间开始,但是addr是从0开始到4095结束的,所以,取样从ROM的最后跳到开始时,正反相没有切换,使得波形失真,所以用地址做脉冲是不可行的。
考虑用输出值做脉冲,在512处跳变,但是因为在ROM中512的值很少,这样就可能因为步长较大就将512跳过,取不到512,就会失去正反相切换的使能,所以用sin的输出值做脉冲也不可行。
最后考虑到sin波形和cos波形只是相差一个相位,所以用cos的前半部分数据存入ROM中,用ROM中的输出的最高位反相作为脉冲(0->1),只要ROM中的取样数据有最后跳至开始,最高位就会是1->0,出现脉冲,并且在其他的时候都不会有此跳变。
3.测频错误
在完成最初的测频时是正确的,但在进行精度提高后,测频出现了错误。
对测频单元进行单独测试,接入标准1000Hz的信号,所得结果确实为1000,确认测频模块正确,但是因为是精度提高了,使得整个周期的总数据量超过了4096,而使得测频出现错误,最后还是测频端接的只是COS的频率,没有能够通过修改测出提高精度后的信号频率,我个人觉得还是比较遗憾的。
6、实验总结
本次课程设计比较成功,因为之前有做过多功能数字钟的设计,对QuartusII软件和SmartSOPC实验箱的使用比较熟悉了,因而除上述的问题之外设计比较顺畅。
不过设计的结果还是有一些缺陷的:
设计中一个波形就要生成一个ROM,因而要产生多种不同波形时要生成多个ROM,但是由于硬件的限制,所用的实验箱只能生成大约5个ROM,从资源的方面看也是很浪费的。
一种好的方法是将各种波形产生的数据表分区放在同一个ROM中,通过开关控制一个数据选择器选择查表的范围。
很遗憾,这种方法是在设计后才想到的,没能具体实现。
7、参考文献
1)《EDA设计实验指导书》南京理工大学电子技术中心
2)《数字电路》蒋立平编著南京理工大学翻印
3)《电子设计自动化应用计术》高等教育出版社2004年11月版
4)