概述
文章目录
- 前言
- 一、m序列简介
- 二、m序列生成原理简介
- 三、MATLAB生成m序列
- 四、Modelsim仿真生成m序列
- 五、验证
- 工程文件
前言
继续记录~~
一、m序列简介
m序列是CDMA系统中采用的最基本的PN序列,是最长线性反馈移位寄存器序列的简称,是一种伪随机序列、伪噪声(PN)码或伪随机码。可以预先确定并且可以重复实现的序列称为确定序列;既不能预先确定又不能重复实现的序列称随机序列;不能预先确定但可以重复产生的序列称伪随机序列。
二、m序列生成原理简介
生成m序列的框图如图1所示。
在图1中,Cn到C1为本原多项式系数的最高次项系数到一次项系数,C0为固定系数1作XOR单元的输出端;D1到Dn构成n位移位寄存器,Dn端为输出端。移位寄存器的输出数据与系数对应相乘后再进行异或运算得到下一次移位寄存器首位的初值。
三、MATLAB生成m序列
(1)第一步:生成本原多项式
运行generate_Primitive_polynomial_coefficients.m脚本生成各级本原多项式系数,输出格式分别用于VHDL编程和MATLAB编程,如图2所示。
(2)第二步:生成m序列
运行generate_m_sequence.m脚本,通过修改程序中的系数来输出不同级数的m序列,本次测试的m序列级数为10,生成的数据量是两个周期,如图3所示。
注:假设级数为N,则周期T=2N-1。
四、Modelsim仿真生成m序列
(1)编写VHDL文件
顶层文件:m_sequence_generator.vhd
底层文件:SISO_feedback_SRL.vhd(串行输入并行输出线性反馈移位寄存器)
程序包文件:package_my_component.vhd
tb文件:tb_m_sequence_generator.vhd
本次设计可更改常数值(顶层文件中)即可改变m序列级数。本次测试输入参数设置为10,即m序列的级数为10,本原多项式系数与初值和MATLAB设定相同,最终顶层文件生成的原理图如图4所示。
(2)运行Modelsim仿真
输出波形如图5所示,并运行了30700ns的时钟,产生三个周期的数据,并保存在文本文件vivado_m-sequence_output.txt中。之后将此结果复制到matlab_test文件夹中。
五、验证
运行verify.m程序得出以下两点验证:
(1)验证MATLAB结果正确性
第三节利用MATLAB产生了两个周期的序列,首先通过从级数N开始遍历到数据长度的一半来求出此不规则序列的周期,如果等于数据长度的一半,即等于2N-1,则证明了所求序列的周期大小符合;再将序列从1到2N-1求和,若得出结果等于2N-1则证明了1比0多一个;最后再验证两个周期的数据的自相关函数,若在周期的整数倍出现峰值则证明正确,由以上三点可得出MATLAB求解m序列的正确性。自相关函数图如图6所示。
(2)验证Modelsim仿真结果的正确性
取仿真结果的数据长度与MATLAB结果相同,比对所有数据点是否一致,如果一致则表示Modelsim仿真结果正确。脚本运行得出的比对结果如图7、图8所示。图8中可以明显看出对应点差值都为0,结果正确。
工程文件
请看评论区获取工程文件~~
最后
以上就是傻傻纸鹤为你收集整理的vivado FPGA的m序列生成与modelsim仿真和matlab验证的全部内容,希望文章能够帮你解决vivado FPGA的m序列生成与modelsim仿真和matlab验证所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复