经验 38 分贝 0 家园分 1138 在线时间: 4 小时 最后登录: 2024-11-6 帖子: 15 精华: 0 注册时间: 2007-8-30 UID: 180239
注册:2007-8-30
发表于 2023-12-7 20:01:26
| 显示全部楼层
最近学习了一个matlab 的qpsk的示例:QPSK_MOD_DEMOD_SALIM
MATLAB Code for QPSK Modulation and Demodulation
因为在学习5G物理层,一直很忙,没有时间。最近稍有一点空闲,所以,学习一下算法。
QPSK的算法,虽然说我没有完全学透,大致还是懂的。只能一直没时间用MATLAB来研究一下。
然后看到这个实例,感觉很好。因为没有中间的AWGN和采样的过程,只讲调制与解调,适合理解。
示例代码见下:
QPSK_MOD_DEMOD_SALIM
MATLAB Code for QPSK Modulation and Demodulation - File Exchange - MATLAB Central
MATLAB Code for QPSK Modulation and Demodulation
Version 1.0.0.0 (2.99 KB) by Md. Salim Raza
MATLAB Code for QPSK Modulation and Demodulation has been Developed According to Conventional Theory
原始代码
QPSK_MOD_DEMOD_SALIMup.zip
(1.95 KB, 下载次数: 4)
运行的结果如图
单步跟踪代码后,基本都能理解。
特别是调制的部分,都比较熟悉:
S(t)=I⋅cos(2πft)+Q⋅sin(2πft)
这里稍加注意,中国的教科书,大多I与Q是正负相反的,也就是在空间的旋转方向相反;但国外,包括wiki百科,都是相加的,也就是同向。
matlab,显然是同向的,所以是相加。
但是到解调时,就有些看不懂了。
这一句:
Z_in_intg=(mytrapz(t,Z_in))(2/T);% integration using trapizodial rull
为什么积分是>0或者<0,而不是等于0?
这里我研究了好半天。
最后发现是这样的:
调制时,这一句:
y1= s_p_data(1,i)cos(2pift); % inphase component
将一个信号,例如这里是1,乘以cos(2pift)。
可以简单理解为将直流信号,装到一个cos的载波上。
解调时,先:
Z_in=Rx_sig((i-1)length(t)+1:ilength(t)).cos(2pift);
待解的符号,再次乘以cos(2pif*t);
这样就得到了cos的平方。
从而积分值>0 或者 <0,而不是等于零。
信号,调制和解调,分别被乘以一次sin ,所以是sin的平方。所以,积分不再是零。
第一次将图形输出出来之后,没有看懂的原因,如上图,没有看Y轴坐标,还以为是从-1到正1,其坐标已经变了。都在X轴之上,或之下。积分自然不再是零。
调试用代码:
qpsk_learn_hyj.zip
(1.11 KB, 下载次数: 2, 查看: 3 家园分)