上 海 电 力 学 院
基于 DSP Builder 数字信号处
理课程设计
实验名称: 专 姓 班 学
业: 名: 级: 号:
AM调制 FM调制及 DDS信号
通信工程
一、设计目的
通过本次课程设计,巩固已学数字电路与逻辑设计的理论知识,掌握数字信号处理方法,引导学生从
功能设计转向系统设计,掌握由现场可编程逻辑器件实现数字信号处理的方法,掌握现场可编程逻辑器件 的应用设计,从而拓宽数字技术及处理的知识和设计能力,提高学生动手能力,培养学生分析问题与解决 问题的能力。
二、设计内容
本设计利用 FPGA 开发软件 QuartusII , DSP BUILDER , MATLAB ,设计实现各类波形信号的发生电
路,如 AM 调制、 FM 调制、 DDS 控制等,进行引脚锁定、全编译通过后,完成 配置工作,并在 Matlab Simulink 中使用 Scope 显示仿真结果,在 示波形情况。
FPGA 器件 Cyclone II 的
DE2 开发板上下载并通过七段数码管,显
三、设计要求
1. 独立完成 AM调制、 FM调制、 DDS控制电路的设计、译码显示电路的设计。 2. 熟悉 QuartusII , DSP BUILDER, MATLAB环境下系统开发设计流程。 3. 在 DE2 上验证设计结果,并认真写出设计报告。
四、设计原理及步骤
(一) .AM 调制的设计
AM幅度调制函数信号可以用式
F Fdr (1 Fam m) 来表述,其中, Fdr 、 Fam 、 F 分别是被调制的
AM的输出信号,它们都是有符号数,
m是调制度,
载波信号,需要被调制的信号和调制后
0 m 1 。
s( t ) =m( t ) *sin ( t )其中 m( t )是 1 或者是 0, sin ( t )是载波
观察 s( t )如果有波形输入的是 基于 DSP Builder
1 没波形是 0。
的数字的 AM系统如下图所示
元器件的主要参数设定在这里省略介绍
仿真如下图所示:
通过 matlab 转化成 VHDL语言通过 Quartus2 并下到板上验证, 在这里需要添加几个模块一是分频器因为我
们晶振频率较高反映在数码管上分辨不出所以叫频率降低,二是把
8 位的二进制传化成三位的十进制数,
clock 、使能端 sw,一个数字输入
三是把十进制的数显示在数码管上;最后通过引脚分配输入端口有时钟
拨码开光,输出有四个数码管显示。
通过图形编辑法最终的实现电路为下图所示:
Rom中的 mif 表格: 分配引脚: 波形仿真:
下载到板上进行验证
:
0 交替跳动,
可以看到的数码管的数字在以不同的值在跳动,调制前的数据没有变,调制后的数据和
因为输入的数字信号是
1 和 1 交替变化的,因此出现了这样的结果。
(二). DDS控制电路的设计
DDS,即直接数字合成器,是采用数字技术的一种新型技术,他通过控制频率、相位增量的步长,产
生各种不同频率的信号。它的优点在于:有较高的频率;可以实现快速的频率切换;在频率改变时能够保
持相位的连续;很容易实现频率、相位和幅度的数控调制等。目前可采用专用或可编程逻辑芯片实现
DDS,
专用的 DDS芯片产生的信号波形、功能和控制方式固定,常不能满足具体需要。具有器件规模大、工作速
度快及可编程的硬件特点,并且开发周期短,易于升级,因为非常适合用于实现
DDS。
主要由 16 位
DDS(直接数值合成器) 信号发生器, 通过不同的频率控制字产生各种不同频率的信号。
加法器、 16 位寄存器正弦波形数据查找表(
LUT)、频率控制字组成,并且其输出计算波形为:
K
c(t)
cos(2 2 N f ct) 。
DDS 原理:
DDS的结构原理图如图所示,
相位累加器、相位、正弦 字控制的功能。
DDS以数控的方式,产生频率、相位和幅度可控的正弦波。电路包括了
DDS结构中的数字部分,具有数
ROM查找表、基准时钟源等组成。其中前三者是
相位字输入
频率字输入
相位累加器
基准时钟
相位调制器 正弦 ROM 查找表
D/A
图 基本 DDS结构框图
如图所示, DDS系统的核心是相位累加器,完成相位累加过程。在基准时钟的控制下,频率控制字由
累加器累加, 以得到相应的相位数据, 相位调制器接收相位累加器的相位输出,
主要用于信号的相位调制,
其输出的数据作为取样地址来寻址正弦
ROM查找表,完成相位 - 幅度变换,输出不同的幅度编码;再经过
D/A 转换器得到相应的阶梯波;最后经低通对阶梯进行平滑处理,即可得到由频率控制字决定的连续变换 输出的正弦波。
由以上原理可以得到
DDS的输出频率
f
B
out
2 N
f clk ,式中, B 是频率的控制字,它与系统时钟
频率呈正比; f clk 是系统基准时钟的频率值; N 是相位累加器数据位宽,也是频率输入字的数据位宽。
DSP Builder 简介:
DSP Builder
是美国 Altera 公司推出的一个面向 DSP开发的系统级工具,他作为 Matlab 的一个
Simulink ,使得用 FPGA设计 DSP系统完全通过 可直接向硬件描述语言转换,并自动调用
Simulink 的图形化界面进行建模、系统级仿真,设计模型
Quartus Ⅱ等 EDA设计软件,完成综合、网表生成以及器件适配
乃至 FPGA的配置下载, 使得系统描述与硬件实现有机的融合为一体, 点与优势。 基于 DSP Builder 基于 DSP Builder
充分体现了现代技术自动化开发的特
的 DDS设计与仿真
的 DDS系统如图所示:
图 DDS 直接频率合成器
DSP Builder/Matlab Simulink
模型
仿真图如下图:
图 DDS 仿真图
通过 matlab 转化成 VHDL语言通过 Quartus2 并下到板上验证, 在这里需要添加几个模块一是分频器因为我
们晶振频率较高反映在数码管上分辨不出所以叫频率降低,二是把
8 位的二进制传化成三位的十进制数,
clock ,输出由三个数码管显示。
三是把十进制的数显示在数码管上;最后通过引脚分配输入端口有时钟
通过图形编辑法最终的实现电路为下图所示:
最后分配引脚下载到板上验证实验现象
引脚分配如下图:
通过 matlab 得到下载到 DE2 板子上的数据:
下载到 DE2板子上,观察实验现象可以看到数码管显示的是同
scope 里面出来的波形一直的数据,数据我
通过 matlab 显示出来,对照可以看到其变化一致。
五. 设计结论
本设计使用了 DSP Builder ,建立了基于 DDS, AM调制系统模型,使用 Quartus Ⅱ下到板上进行验证,
结果表明该模型可以正确地产生
AM调制信号、 DDS信号。
DSP Builder ,它作为一个算法级的设计工具,只需在
Signal Compiler
Simulink 中进行图
本方案最大的特点是采用了
形化设计,仿真通过后,即可使用
把 MATLAB/Simulink 模型文件( .mdl )转换成相应的
TCL 脚本。根据这些文件后续步骤可
硬件描述语言 VHDL设计文件( .vhd ),以及用于控制综合与编译的
以由 Quartus Ⅱ自己完成。大大减少了编程的复杂度,使硬件描述更加的直观。
此外,本方案采用
DDS技术,获得了较高的频率分辨率,同设计方法简单快捷,降低了实现的复杂度,
而且便于修改和功能扩充。
通过该设计使我全面熟悉、掌握
VHDL语言基本知识,掌握利用 VHDL语言对信号发生器的编程和时序逻
辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一
步提高动手能力,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。
通过了本次实验使我对程序设计有了新的认识与体会,做实验不单单是在软件上运行出结果就表明对
了,当其与硬件连接后能否对应现象也是非常重要的,我们不仅要学好软件,也要将硬件部分做好,多学
习,多思考,在今后的运用中也将会更加的得心应手。总之,这次课程设计我受益匪浅。
源程序:
AM调制的分频器:
library ieee; use
entity clk_1_gen is port(
clkin :in std_logic; clkout:out std_logic); end clk_1_gen;
architecture behave_clk_1_gen of clk_1_gen is signal Counter:Integer RANGE 0 TO N; signal Clk: Std_Logic; begin
process(clkin) begin
if rising_edge(clkin) then -- 每计到 4 个( 0~3)上升沿,输出信号翻转一次 if Counter=N then
Counter<=0; Clk<=NOT Clk; else
Counter<= Counter+1;
end if; end if;
end process; clkout<= Clk;
end behave_clk_1_gen;
DDS调制的分频器:
library ieee; use
entity clk_1_gen is port(
clkin :in std_logic; clkout:out std_logic); end clk_1_gen;
architecture behave_clk_1_gen of clk_1_gen is constant N: Integer:=390624;
signal Counter:Integer RANGE 0 TO N; signal Clk: Std_Logic; begin
process(clkin) begin
if rising_edge(clkin) then
if Counter=N then
Counter<=0; Clk<=NOT Clk; else
Counter<= Counter+1;
end if; end if;
end process;
clkout<= Clk;
end behave_clk_1_gen;
8 选 3 选择器:
library ieee; use
eigth_to_3 is