欢迎关注BUG记录知乎专栏和BUG记录公众号,关注BUG记录公众号回复101获取本文使用的Simulink仿真文件
由于最近研究某个高速接口没什么实质性的突破,实在写不出太好的东西,所以就写点更为基础的东西分享给大家,顺带着自己也回忆回忆,防止自己西瓜也没捡到,芝麻也丢了。
这个系列是以前通信原理课程的课设,通过实现BPSK可以学习到Simulink的使用仿真,m序列的verilog实现,Vivado/Xilinx的IP核调用,数据截位,查看数据波形等。
本次文章记录的是BPSK的Simulink实现,会重点介绍几个Simulink模块的作用。
相移键控(BPSK)主要是利用载波的相位变化传递数字信息,传递过程中振幅和频率保持不变。通常使用初始相位0和pi分别表示二进制的“0”和“1”;
从《通信原理》关于BPSK的讲解中可以知道,BPSK的调制方式有模拟调制方法和键控法;我们选择模拟调制,并使用Simulink做仿真,框图如下:
接下来对各个主要模块的讲解:
- Random Integer
伪随机数发生器,可以通过Set size限定随机数的上限,下限为0;伪随机数不是真的随机数,具有很长的周期,它的周期跟Initial seed有关;Sample time控制输出数据的周期;
这个模块作用是产生一个随机序列,在FPGA中将使用m序列模块实现其功能;
2. 符号映射模块
这个模块在Random Integer后3个小模块,伪随机数发生器输出的0,1经过减0.5后成为-0.5,0.5,乘2之后为-1,1;
也就是0 映射到-1,1映射到1;
这么做的原因是为了简化BPSK的过程,
由上面这个公式可以知道,当需要发送初始相位π时,只需要将cos(wt)乘以-1;这里我们假设的是发送“0”时初始相位为π,发送1时初始相位为0,如果想要保持与上图1一样的初始相位,可以使用乘以-2代替乘以2,实现0 映射到1,1映射到-1;
注意当产生QPSK等信号时,就不能采用这种方法,需要使用到IQ两路信号产生基带信号。
3. 升采样及基带滤波模块
Simulink的例子中,伪随机信号发生器的符号速率为1Mbps,经过Zero-Order Hold模块将前面模块产生的模拟信号转换为数字信号,采样率为50MHz;
由于伪随机信号发生器及符号映射模块产生的信号为-1和1,产生信号是矩形信号,而根据傅里叶变换的知识可以知道,矩形信号的频谱是基波加上一系列奇次谐波,为了减小基带信号的信号带宽,我们需要使用低通滤波器尽量滤去谐波分量,保留矩形信号的基波;
Digital Filter Design设置界面很简单,勾选Lowpass,选择FIR,选择阶数128,窗函数选择Blackman,截止频率与采样率之比为2:50;数字滤波器采样率和截止频率的单位不重要,两者之间的比率较为重要;而例子中此时信号为50MHz,所以截止频率为2MHz;
这个模块在FPGA中将使用相应的IP核实现功能;
4.上变频模块
因为基带信号的频率较低,实际应用中考虑到天线长度,信号频谱利用等原因,需要使用上变频将信号搬移到较高频率,我们在仿真过程中将基带信号搬移到10MHz,这就需要将基带信号与10MHz的正弦波相乘;
Sine Wave模块的设置较为简单,设置好幅度Amplitude,频率Frequency,初始相位Phase和采样率Sample time后;通过Product模块将其与基带信号相乘,输出就是BPSK的仿真信号;
这个模块在FPGA中将使用相应的IP核实现功能;
5. 输出结果
通过伪随机信号发生器,符号映射,FIR滤波,上变频模块后,一个完整的BPSK信号产生了;
虽然这整个仿真过程可能不够严谨,但我们的重心在于verilog实现,接下来会依次讲到相应模块的verilog实现,在这个过程中我回忆和巩固自己所学的知识,欢迎大家关注。
如果对这个Simulink有更好的改进方法方案可以留言一起谈论,欢迎大家点赞收藏留言讨论交流。
万物皆可卷积:(LVDS差分信号简单处理)5. 使用OSERDES发送高速串行数据zhuanlan.zhihu.com万物皆可卷积:SPI发送协议的STM单片机实现- 利用CubeMx控制WS2812灯带zhuanlan.zhihu.com万物皆可卷积:(LVDS差分信号简单处理)4. 使用ISERDES接收高速串行数据zhuanlan.zhihu.com