admin管理员组文章数量:1531792
2024年7月12日发(作者:)
文档
《电类综合实验》
仿真报告
实验课题: FM调制解调的数字实现
指导教师: 刘光祖
学生姓名:
院系: 电光学院
专业: 通信与信息系统
实验时间: 2016.05.09至2016.05.13
.
文档
一、实验背景
1. FPGA简介
FPGA(Field-Programmable Gate Array,现场可编程逻辑门阵列)是在PAL、GAL、
CPLD等可编程逻辑器件的基础上进一步发展的产物,是专用集成电路领域一种半定制的集
成数字芯片,其最大特点是现场可编程,既解决了全定制电路的不足,又克服了原有可编程
逻辑器件门电路数有限的缺点。FPGA的内部结构由CLB、RAM、DCM、IOB、Interconnect
等构成。如下给出了FPGA的最典型的结构:
FPGA开发的一般流程:
1(a) 1(b)
2. DE2-115开发板简介
本实验中所用开发板为Altera公司的DE2-115。如下为开发板的配置列表:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Altera Cyclone® IV 4CE115 FPGA 器件
Altera 串行配置芯片: EPCS64
USB Blaster 在线编程;也支持JTAG和AS可编程方式
2MB SRAM
两片 64MB SDRAM
8MB Flash memory
SD卡插槽
4个按钮
18个滑动开关
18个红色LED
9个绿色LED
50M时钟源
24位音频编解码器,麦克风插孔
电视解码
RJ45 2G以太网接口
VGA连接器
含有USB_A和USB_B连接器的主从控制器
RS232收发器和9针连接器
PS/2鼠标和键盘连接器
红外接收器
•
ControlPanel是开发板自带的一个工具软件,可以通过该软件提供的图形界面直接对
FPGA上的各个外设进行操作。通过该操作可以确认PC机与开发板的连接是否正确,开发
板的硬件工作是否正常。ControlPanel的安装过程如下:
确保QUARTUS II 10.0 或以上版本能被成功安装;将开关RUN/PROG切换到RUN位
置;将USB接线连接至USB驱动端口,供12V电源并打开开关;打开主机上的可执行文
.
文档
件DE2_115_,controlPanel的用户界面如下:
DE2_115_一旦被启动,DE2_115_程序流文件将会被自
动加载;如果未连接,点击CONNECT,点sof文件将会重新加载到板子上;注意,控制面
板将会占用一直到你关闭那个端口,除非你关闭USB端口,否则你不能使用QUARTUS II
来下载文件;控制面板现在可以使用了,通过设置一些LED灯ON/OFF的状态来观察
DE2-115上的状态。
JTAG配置FPGA如下左图所示:
开发板代码设计流程如上右图所示。
3. A/D、D/A扩展板
AD、DA扩展板是利用HSMC接口进行扩展的子卡,相当于FPGA的一个外设。扩展
板提供两路65M,14位采样分辨率的ADC以及两路125M,14位采样精度的DAC。采样
时钟设置灵活可以采用多种形式。信号输入和输出采用变压器耦合方式,频率范围为
0.1MHz~800MHz。
ADC的基本参数:集成双端口14位AD;3V供电(2.7V-3.6V);SNR=71.6dB;固定
的模拟输入范围0V~2V
二、实验原理
.
文档
本实验利用DE2-115开发板及AD、DA扩展板实现一个数字式FM调制解调器,并要
求测试调制解调器的功能和解调性能。
1. 基本原理
FM调制信号的时域及频域波形
|A|
fc
O
fc
f
FM信号的解调方法主要分为以下两种:
(1) 鉴相法:鉴相法指的是利用鉴相电路将已调载波中的相位信息提取出来,再对相位
信息求导即可得到调制信号,鉴相的方法可以鉴相的方法可以是模拟的也可以是数
字的。
(2) 鉴频法:鉴频法指的是利用鉴频器直接将已调载波中的瞬时频率提取出来,鉴频方
法主要有两种,一种是将FM信号经过频幅转换网络,转换成调频-调幅波,再经
过调幅解调得到调制信号。另一种是将FM信号经过频相转换网络转换成调频-调
相波,在经过鉴相器得到调制信号。
2. 调制实现
FM调制的数字实现最直接的方法就是利用DDS技术。DDS是通过控制相位累加器的
累加增量值来改变相位累加器的循环频率。再通过相位累加器对波形表进行查表得到所需频
率的输出信号。其工作原理决定了我们可以很容易的改变输出波形的频率和相位。基于DDS
的基本原理,模拟调制方法中的直接法和间接法在DDS技术中实际上是统一的,因为DDS
实现过程中的相位累加器实际上可以看做是一个积分器,而相位累加器的输出实际上就代表
了信号的瞬时相位。如下为DDS实现的FM调制器框图:
数字FM实现的改进方案:
由于FM是一种非线性调制,因此已调信号的频谱宽度会大大展宽,而在实际应用中很
多时候通信信道都是带限的,为了防止不同频道之间的干扰对信号的边带抑制都有严格规定,
而上述调制的实现方案实际上并没有考虑边带抑制的问题。根据对FM信号的数学表达式的
分析在最简单的单音调制下,已调信号的边频分量理论上是无限多的,其幅度按照贝塞尔函
数的规律下降的,因此不能有效进行边带抑制。为了有效的进行边带抑制可以采用如下左图
改进结构
.
文档
3. 解调实现
FM的数字解调可以采用鉴相法:
接收信号先经过正交下变频变为零中频信号,然后根据调制信号带宽进行适当倍数抽取
以降低运算量。正交解调得到的零中频信号可以计算出接收信号的瞬时相位,再通过对瞬时
相位进行差分得到最后的解调信号。
实现过程中的正交下变频以及抽取、差分等运算都是数字信号处理中的常见算法比较容
易实现,实现比较困难的是求相位运算,这一步运算包含了除法以及反正切运算,运算量较
大。实现的方法一般有两种,一种是查表法,查表法在精度要求较高时需要很大的数据存储
量。另一种方法是利用Cordic算法来求解,由于Cordic算法的核心思想是通过迭代运算来
逼近所求的非线性函数的函数值,因此高精度的运算需要较多的迭代次数。因此虽然硬件消
耗量较少,但是很难满足较高吞吐率的运算。具体方法的选择需要考虑实际情况来决定。
简化方案:
如果实现精度要求不高,那么可以对算法进行一些简化处理,考虑到解调的关键实际上
是计算信号相位值得变化率,在数字域实际上就是计算前后两个采样点所表示的载波相位值
之差。因此可以考虑计算相邻两个采样点所代表的载波相位之差的三角函数值。
sin(
2
1
)sin
2
cos
1
sin
1
cos
2
y
Q
(n)y
I
(n1)y
I
(n)y
Q
(n1)
考虑到当
2
-
1
很小的时候
sin(
2
1
)
2
1
,因此:
2
1
y
Q
(n)y
I
(n1)y
I
(n)y
Q
(n1)
4. 实验要求
本实验基于FPGA开发板(DE2-115)和AD/DA板(THDB-ADA)设计数字FM调制
解调器
按照FM调制的实现框图,设计一个FM数字调制器,完成对设定波形的FM数字调制。
并验证调制信号的正确性。
按照FM解调的实现框图,选择合理方案设计一个FM数字解调器,完成对输入已调信
号的FM数字解调,并验证其功能及性能。
将设计好的FM调制器代码下载到演示板,调制信号由FPGA内部产生,设置调参数,
包括载波频率,调制信号频率,调制波形及最大频偏。用示波器观察DAC输出的已调载波
的时域波形,并利用Signal_tap尽可能多的记录送给DAC的数据,并绘出频谱图。
将设计好的FM解调器代码下载到演示板,利用函数信号发生器产生已调的FM调制信
号,并设定好各项参数。用示波器观察DAC输出端的解调时域波形,并利用Signal_tap记
.
文档
录送给DAC的数据,并绘出频谱图。
逐步减小输入波形幅度,观察解调结果,找出解调器工作的门限电平并记录。
利用按键或者通信接口改变调制器和解调器的工作参数并通过观察记录输出波形验证
参数改变的正确性。
设计要求包括基本要求和提高要求两部分。
基本要求如下:
要求调制信号为正弦波,输入幅度为调制信号频率为100kHz,最大频偏为100kHz,载
波频率为3MHz。
输入已调载波信号峰峰值幅度不超过1V,调制信号频率不大于50kHz,载波频率为
3MHz的正弦波。
提高要求如下:
利用按键或通信接口实现对调制解调器的参数配置要求可以在一定范围内任意设置,最
大频偏,载波频率等参数。
减小解调器输入端信号幅度,观察并记解调门限电平。
三、实验过程
1. 实验结果
在一个星期的时间里,我们小组(两人:徐皖峰,汪锦)基本完成了实验设计的要求,
通过Altera的Quratus软件上verilog编程完成了相应地功能。实验结果的截图在下面展示:
开发板实物图如下:
① 实现调制信号的输出,通过键控输入的方式调整频偏:
.
文档
② 实现调制信号的解调,信号发生器产生的信号为:
③ SignalTap抓取到的不同情况下的调制解调信号为:
.
文档
.
文档
2. 结果分析
由上面示波器的输出波形以及SignalTap抓取到的信号可以看出,我们的实验设计
(verilog程序)仿真是满足实验要求的,而且对于实验的提高要求做出了键控频偏的改进,这
一点也是成功的。
3. 总结
通过这一个星期的电类综合实验我对FPGA,DE2-115开发板,QUARTUS II软件的使
用,FM信号调制解调的数字实现有了一定的基本了解。从刚开始的不会到后面可以熟练使
用实验室设备,我从中学到了很多,更多地了解到一些跟电类相关的实验设备的使用。回顾
整个设计过程,发现自己真的有很多不足,真是书到用时方恨少。在课程设计过程中,学到
了很多有关电子技术理论和实际方面的知识,从理论中得出结论,才能真正的提高自己的实
际动手能力和独立能力,从中获得经验和知识。
附录:
本次实验中的verilog代码如下:
module DE2_115_ADDA_TOP(
CLOCK_50,
ADC_CLK_A,
ADC_CLK_B,
ADC_DA,
ADC_DB,
ADC_OEB_A,
ADC_OEB_B,
ADC_OTR_A,
ADC_OTR_B,
DAC_CLK_A,
DAC_CLK_B,
DAC_DA,
DAC_DB,
DAC_MODE,
DAC_WRT_A,
DAC_WRT_B,
OSC_SMA_ADC4,
SMA_DAC4 ,
SW_0,
SW_1
);
input
output
output
input
input
output
.
[13:0]
[13:0]
CLOCK_50;
ADC_CLK_A;
ADC_CLK_B;
ADC_DA;
ADC_DB;
ADC_OEB_A;
文档
output
input
input
output
output
output
output
output
output
output
input
input
[13:0]
[13:0]
ADC_OEB_B;
ADC_OTR_A;
ADC_OTR_B;
DAC_CLK_A;
DAC_CLK_B;
DAC_DA;
DAC_DB;
DAC_MODE;
DAC_WRT_A;
DAC_WRT_B;
OSC_SMA_ADC4;
SMA_DAC4;
input SW_0;
input SW_1;
//=======================================================
// REG/WIRE declarations
//=======================================================
assign DAC_WRT_B = CLK_125; //Input write signal for PORT B
assign DAC_WRT_A = CLK_125; //Input write signal for PORT A
assign DAC_MODE = 1; //Mode Select. 1 = dual port, 0 = interleaved.
//PLL Clock to DAC_B
//PLL Clock to DAC_A
//PLL Clock to ADC_B
//PLL Clock to ADC_A
//ADC_OEA
//ADC_OEB
assign DAC_CLK_B = CLK_125;
assign DAC_CLK_A = CLK_125;
assign ADC_CLK_B = CLK_65;
assign ADC_CLK_A = CLK_65;
assign ADC_OEB_A = 0;
assign ADC_OEB_B = 0;
/////////////////////////////////////
wire [13:0] sin10_out;
wire [13:0] sin_out;
wire [13:0] comb;
wire g = 0;
wire v = 1;
pll pll_100 (
.inclk0(CLOCK_50),
.pllena(v),
.areset(g),
.c0 (CLK_125),
.c1
);
fm_100k_st_inst(
wire [15:0] sin_100k;
fm_100k_st
.phi_inc_i(3435973),
.clk(CLK_125),
.reset_n(v),
(CLK_65)
.
文档
.clken(v),
.fsin_o(sin_100k),
.fcos_o(),
.out_valid());
wire [13:0] sin_3M;
wire [31:0] det;
assign det=$signed(sin_100k)*$signed(SW_1==1?(SW_0==1?400:300):(SW_0==1?200:100));
assign DAC_DB[13:0] ={~sin_3M[13],sin_3M[12:0]}; //调制 上
fc_3M_st fc_3M_st_inst(
.phi_inc_i(103079215),
.clk(CLK_125),
.reset_n(v),
.clken(v),
.freq_mod_i(det),
.fsin_o(
.fcos_o(),
.out_valid());
// ADC_DA
sin_3M),
wire [13:0] sin_3m;
wire [13:0] cos_3m;
fmod_3M_st fmod_3M_st_inst(
.phi_inc_i(206158430),
.clk(CLK_65),
.reset_n(v),
.clken(v),
.fsin_o(sin_3m),
.fcos_o(cos_3m),
.out_valid());
ADC_DA_tran; //补码 wire [13:0]
assign ADC_DA_tran[13] = ~ADC_DA[13];
assign ADC_DA_tran[12:0] = ADC_DA[12:0];
reg [27:0]
reg [27:0]
begin
fm_I[27:0] =$signed(cos_3m)*$signed(ADC_DA_tran);
fm_Q[27:0] =$signed(sin_3m)*$signed(ADC_DA_tran)*$signed(-1);
end
reg [13:0]
reg [13:0]
fir0_ast
fir_I0;
fir_Q0;
fm_I;
fm_Q;
always@(posedge CLK_65)
fir0_ast_inst(
.clk(CLK_65),
.reset_n(v),
.ast_sink_data(fm_I[26:13]), //25 溢出
.ast_sink_valid(v),
.
文档
.ast_source_ready(v),
.ast_sink_error(g),
.ast_source_data(fir_I0),
.ast_sink_ready( ),
.ast_source_valid( ),
.ast_source_error( ));
fir1_ast_inst(
.clk(CLK_65),
.reset_n(v),
.ast_sink_data(fm_Q[26:13]),
.ast_sink_valid(v),
.ast_source_ready(v),
.ast_sink_error(g),
.ast_source_data(fir_Q0),
.ast_sink_ready( ),
.ast_source_valid( ),
.ast_source_error( ));
fir0_ast
reg [13:0] fir_I1;
reg [13:0] fir_Q1;
reg [27:0] sin0;
always@(posedge CLK_65)
begin
sin0 = (($signed(fir_I0)*$signed(fir_Q1))-($signed(fir_I1)*$signed(fir_Q0)));
end
always@(posedge CLK_65)
begin
fir_I1<=fir_I0;
fir_Q1<=fir_Q0;
end
reg [13:0] sin000;
fir0_ast
fir2_ast_inst(
.clk(CLK_65),
.reset_n(v),
.ast_sink_data(sin0[15:2]),
.ast_sink_valid(v),
.ast_source_ready(v),
.ast_sink_error(g),
.ast_source_data(sin000),
.ast_sink_ready( ),
.ast_source_valid( ),
.ast_source_error( ));
assign DAC_DA = {~sin000[13],sin000[12:0]}; //xia
endmodule
.
版权声明:本文标题:南理工电类综合实验报告FM调制解调的数字实现 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1720786548a842853.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论