基于FPGA的直接序列扩频通信verilog设计,包括汉明编译码,扩频解扩,同步模块以及testbench
目录
1.算法描述
与很多的通信技术类似,扩频技术最初也应用于保密通信和制导系统等军事技术。除了在军事通信中的应用,扩频技术在无线通信领域也有发展。目前扩频通信技术已经在测距、卫星通信、GPS导航定位、移动通信、电子对抗、跟踪、遥控和蓝牙技术等方面广泛应用。扩频通信技术具有很多独特的优点:具有抗干扰能力强和截获率低等独特优点,而且具备码分多址(CDMA,Code Divided Multiple Access)或称为扩频多址(SSMA,SpreadSpectrumMultiple Access)的能力,因此广泛应用于商业、银行、宾馆、能源和交通业等行业。因为应用广泛受到世界各国的特别关注,尤其是在近年来随着超大规模的集成电路和微处理技术快速发展,使得扩频技术在各个行业得到更多的发展。随着数字技术的飞速发展,数字扩频技术不仅完成模拟扩频的所有功能,而且在性能和精度方面都有很大的优势,所以数字扩频技术将在未来被更广泛的应用。
在扩频通信技术中,发送端将原始信号的频带进行扩展,得到扩频信号,然后在接收端通过对信号进行解扩处理,恢复原始信号。根据通信系统产生的扩频方式,可以将扩频通信分为5类:直接序列扩展频谱(Direct Sequence Spread Spectrum Communication Systems)、频率跳变扩频通信系统(Frequecy Hopping Spread Spectrum Communication Systems,FH-SS)、跳时扩频通信系统(Time Hopping Spectrum Communication Systems,TH-SS)、线性脉冲调频系统(chirp)和混合扩频通信系统,扩频技术在未来无线通信技术中,仍是重要部分,很多方面需要继续去探索,因此扩频技术的研究不能停滞不前。
利用本原多项式产生伪随机序列用作扩频,通过同步模块对扩频后的信号进行捕获,通过直接序列解扩模块进行解扩。本文给出了编解码、扩频解扩、同步的整体方案,使用Quartus实现功能,并结合Matlab和ModelSim对模块进行调试和测试,实现扩频通信模块的搭建仿真,验证其设计的正确性。模块有:汉明编码模块、直接序列扩频模块、量化器模块、同步模块、直接序列解扩模块和汉明译码模块。
1.汉明编码模块
编码模块采用汉明码编码方式。汉明码是一种线性分组码。汉明码是指将数据信息码分成为长度为m的数据段,在每一段数据后面添加n位的校验码,这样编码方式为汉明码.
2. 扩频模块
扩频模块若采用直接序列扩频。直接序列扩频,简称直扩扩频(DSSS)。在发送端传送的数据信息需要经过信道编码后,与本原多项式产生的伪噪声序列进行模2加(异或)完成扩频,在接收端用相同的扩伪随机序列对其解扩,解扩后的数据进行译码,达到恢复原始数据信息的目的.
3.同步模块
同步模块若采用最小二乘法。最小二乘法是一种数学优化技术。它通过最小化误差的平方来和数据进行匹配。它可以简便地求得接收信号,并使得这些接收信号与伪随机序列之间误差的平方和为最小。
2.仿真效果预览
Quartus II 12.1 (64-Bit),
ModelSim-Altera 6.6d Starter Edition
仿真结果如下:
3.Verilog核心程序
module tops(clk_10, rst_n, rst_n2,tdata, t_wrreq, t_full, rdata, r_rdreq,line_out, line_in,
...............................................
ham_encoder ham_encoder_u1(//汉明编码
.clk_10(clk_10),
.rst_n(rst_n),
.hdata(hdata),
.h_empty(h_empty),
.h_rdreq(h_rdreq),
.mdata(mdata),
.m_empty(m_empty),
.m_rdreq(m_rdreq)
);
m_encoder m_encoder_u2(//m序列扩频
.clk_10(clk_10),
.rst_n(rst_n),
.mdata(mdata),
.m_empty(m_empty),
.m_rdreq(m_rdreq),
.q_data(q_data)
);
quantizer quantizer_u3(//量化
.clk_10(clk_10),
.rst_n(rst_n),
.qdata(q_data),
.line_out(line_out)
);
DSSSreceiver DSSSreceiver_u4(//接收器
.clk_10(clk_10),
.rst_n(rst_n2),
.line_in(line_in),
.rdata(rdata),
.r_rdreq(r_rdreq),
.r_empty(r_empty)
);
endmodule
A194
4.完整Verilog
V
相关文章
- Java实现 LeetCode 594 最长和谐子序列(滑动窗口)
- Java实现 LeetCode 521 最长特殊序列 Ⅰ(出题人:“就是喜欢看你们不敢相信那么简单,又不敢提交的样子。”)
- Java实现 LeetCode 516 最长回文子序列
- Java实现 LeetCode 106 从中序与后序遍历序列构造二叉树
- 用SPSS做时间序列
- 799. 最长连续不重复子序列
- 统计输入一句话中的每个单词出现的次数,输入为若干个以空格分割的单词序列。
- 【DL】第15章 使用RNN 和 CNN处理序列
- 【华为机试真题 Python实现】二叉树层序遍历(从后序与中序遍历序列构造二叉树)
- 最长的斐波那契子序列的长度-c语言哈希表解决(提升时间效率)
- 【MATLAB】进阶绘图 ( Stairs 阶梯图 | stairs 函数 | Stem 离散序列数据图 | stem 函数 | 正弦函数采样 )
- HDU 4836 The Query on the Tree lca || 欧拉序列 || 动态树
- VL35-状态机,非重叠的序列检测,设计一个状态机,检测序列10111.
- DLNg序列模型第一周
- 检测用户命令序列异常——使用LSTM分类算法【使用朴素贝叶斯,类似垃圾邮件分类的做法也可以,将命令序列看成是垃圾邮件】
- 力扣:376. 摆动序列
- 找到序列最高位的1和最高位的0并输出位置
- 07 串行数据流特定序列循环检测器的设计与功能验证(附源码)