信号处理学习笔记(1)——用MATLAB自带的QPSK Transmitter And Receiver示例来探讨QPSK信号的处理过程

(一)起因

        在最初的设想中,是用metor_demod作为例子来探讨一个实际的QPSK信号的解调过程的。但是在阅读源码的过程中,发现自己对于信号解调的过程还是没有很清晰的认识,仅限于“接收信号->下变频->载波相位同步->定时同步->判决”,对于每一步应该怎么做还是很不清晰。在寻找资料的过程中,MATLAB提供的QPSK Transmitter and Receiver示例中,直接指向了Rice的书Digital Communications - A Discrete-Time Approach,利用了几天时间,阅读了该书的第7章Carrier Phase Synchronization和第8章Symbol Timing Synchronization,对同步的过程有了一些了解,遂以MATLAB的这个示例,记录一下自己阅读这个程序的过程。

(二)程序结构

完整的程序包含12个m文件,整个程序从QPSKTransmitterAndReceiverExample.m开始。

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         2021/6/13     20:46           4110 commqpsktxrx_init.m
-a----         2020/2/29      6:20            165 createQPSKScopes.m
-a----        2020/11/16     13:18          15344 FrameSynchronizer.m
-a----         2020/2/29      6:20           2388 QPSKBitsGenerator.m
-a----         2020/2/29      6:20           3610 QPSKChannel.m
-a----         2021/6/13     20:46           3694 QPSKDataDecoder.m
-a----         2020/2/29      6:20           7756 QPSKReceiver.m
-a----         2021/1/22      3:50           4426 QPSKScopes.m
-a----         2020/2/29      6:20           2836 QPSKTransmitter.m
-a----          2021/1/7      6:47          12896 QPSKTransmitterAndReceiverExample.m
-a----         2020/2/29      6:20            152 runQPSKScopes.m
-a----         2020/2/29      6:20           5246 runQPSKSystemUnderTest.m

(三)文件与功能

3.1 QPSKTransmitterAndReceiverExample.m

主要是对整个程序的功能进行介绍。此m文件中的注释中表明,这个例子的目的在于验证现实世界中处理无线通信问题的一些方法,如载波频率和相位偏移、定时恢复、帧同步。这个示例中提供的技术包括基于相关的粗频率补偿、基于PLL的细频率补偿、基于PLL的符号定时恢复、帧同步和去相位模糊。

此m文件首先调用commqpsktxrx_init.m文件初始化仿真参数,然后调用runQPSKSystemUnderTest.m开始仿真过程。

3.2 commqpsktxrx_init.m

此m文件主要指定仿真中的参数,如采用QPSK调制,符号速率5e4,2倍过采,总共发送1000帧。帧包括头部和负载两部分,其中头部为2个级联的13位Barker码;负载为20个ASCII码字符串级联,每个字符串的内容为“Hello world 000\n”,每个ASCII采用7bit编码。发送参数方面,滚降系数为0.5,交织基为2,多项式为[11101],初态为0,发射时的升余弦滤波器长度为10个符号时长。信道方面,加入了47度的相位偏移和5kHz的频率偏移,信道的EbNo为13dB,延时类型为‘Triangle’。接收机方面,定义AGC输出功率为2w,这是由于QPSK的星座点在单位圆上,平均功率就是2;定义AGC的最大功率增益为20;AGC的时候,用来平均的长度为50;相位恢复和定时恢复的环路带宽都是0.01,阻尼系数都是1;前导码检测门限为20。这里有一个TimingErrorDetectorGain的变量的计算值得注意,为什么这么定TED的增益值,还没有想明白。Rice在他的书p451页说,detector gain是S曲线在0点的倒数,做了实验去验证,无果。这里选用2.7应是推到出来的,暂时不深究。

3.3 runQPSKSystemUnderTest.m

此m文件为主程序循环的软件。在定义了QPSKTransmitter、QPSKChannel、QPSKReceiver等类型后,实例化后在for循环中运行。先是生成信号,然后让生成的信号过信道,最后接收,分别对应三个类:QPSKTransmitter.m、QPSKChannel.m、QPSKReceiver.m

3.4 QPSKTransmitter.m

此m文件负责发送QPSK信号。首先调用QPSKBitsGenerator.m生成每一帧的比特。

然后调用comm.QPSKModulator将bit映射到星座。

调用comm.RaisedCosineTransmitFilter将的星座符号进行成型滤波,滚降系数0.5,并进行2倍升采样,成为2倍过采信号。

3.5 QPSKBitsGenerator.m

此m文件用来生成QPSK的bit。一条message子帧长16字节。每帧包含20个子帧作为负载。将2个相同的13bit长的巴克码作为帧头。将帧头和负载组合即为一次要发送的所有信息比特,共计2266个比特。

调用dsp.SignalSource来产生信号比特,这个函数设定好信源后,指定每一帧的长度就可以每次产生等长度的帧了。

值得注意的是Scrambler的操作,也就是加扰,通过调用comm.Scrambler函数来实现,其实就是移位寄存器组。加扰器有三个参数,base,poly和cond。base就是输入数据的范围,因为输入的都是二进制比特数据,所以这个移位寄存器组里面的加法器是模2的。poly就是生成多项式。cond为初态。扰码器实例化后,可直接对信源比特加扰。

3.6 QPSKChannel.m

此m文件通过comm.PhaseFrequencyOffset、dsp.VariableFractionalDelay、comm.AWGNChannel分别引入相位、定时误差,并且仿真了AWGN信道。

3.7 QPSKReceiver.m

使用comm.AGC调整接收信号的功率,功率为2。这里设定2没想明白,常规应该都是归一化。

使用comm.RaisedCosineReceiveFilter进行匹配滤波。

使用comm.CoarseFrequencyCompensator对频偏进行粗略估计。

使用comm.PhaseFrequencyOffset对频偏进行补偿。

使用comm.CarrierSynchronizer对相位偏移进行精细估计。

使用comm.SymbolSynchronizer对定时进行估计。

使用comm.PreambleDetector对帧头进行检测,确定帧头的位置。

使用FrameSynchronizer.m对输出的帧进行检测和规整。

使用QPSKDataDecoder.m去相位模糊,解调,去扰。这里去扰也是默认初态为0。猜想,以帧为单位发送的数据,应该扰码的初态都是0,不然对于接收方来说不好去扰。扰有伪随机扰和自同步扰,其中伪随机扰需要收发双方的扰码器严格同步;自同步扰不需要首发双方保持同步,但是错误会扩散,扰码序列一般选择本原多项式。这里对于自同步扰的原理还不明确。去相位模糊的方法是与正确的同步头的共轭进行内积,然后将相位进行平均,映射到一个0.5pi上,确定模糊的偏移量。另外还有将同步头旋转偏移量之后与接收到的同步相关,进而确定相位模糊的方法。

(四)总结

总的来说,这个示例将QPSK的解调过程很好的展现了出来。帮助文件里面虽然对很多函数进行了描述,但还不详细,比如载波和定时同步的阻尼和带宽应该如何选取?TED的增益如何确定?从这个示例可以推广到PAM、BPSK 和8PSK,但继续推广至16APSK感觉还是存在问题,这得实验了之后最终确定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值