正交调制解调

最近项目中遇到一个奇怪的问题,在做8PSK解调的时候IQ路数据偶尔会反相,所以看了很多这方面的东西,这篇文章讲得貌似有工程实现的经验,明天按照这个经验sin 与cos反相一下试试。
为了提高频谱利用率,通信系统常采用正交调制。一般我们在教科书上看到的正交调制模型为:
正交调制解调

I(t)为同相支路(I路)的基带信号,Q(t)为正交支路(Q路)的基带信号。I路信号与载波正交调制解调相乘,Q路信号与载波正交调制解调相乘,然后将两路乘积加起来作为发送信号s(t),即

正交调制解调

。之所以Q路信号采用-sin是因为这样可以方便用等效复数基带模型来表示。接下来简要回顾一下等效复数基带模型。由于信道是模拟的,所以信道本身肯定不可能传输复数信号。输入信号包含相互独立的I/Q两部分,在理论分析上常用I(t)+jQ(t)来表示,即I路信号代表复数信号的实部,Q路信号代表复数信号的虚部,这就是正交调制的复数基带模型。如果我们将I/Q两路载波也用类似的方式表示为复数载波正交调制解调。则发送的信号实际上是复数基带信号与复数载波混频后的实部,即

正交调制解调

与之相对应,接收端解调时需要采用下面的结构

正交调制解调

注意到接收端解调时使用的I/Q两路载波需要与发送端一致,否则会造成解调错误。

好了,介绍完教科书上的内容,我们谈谈工程实现。笔者在工作中发现,实际在设计DDS查找表时,I路存储的为正弦波形,Q路存储的为余弦波形。这个事实上和我们在教科书看到的结构等效,因为I/Q两路载波均为周期信号,只要二者相位相对关系不变,波形表初相的选择并不重要。比如正交调制解调相对于正交调制解调只是绝对相位落后了正交调制解调,但是两路载波相位的相对关系不变,所以二者等价。

如果我们改变I/Q两路载波相位相对关系会怎样呢?举一个例子,也有大量的设备中采用正交调制解调这种载波结构,显然其相位相对关系发生了变化。这种变化对于基带解调有哪些影响呢?答案是极性。为了说明这个问题,我们假设信号s(t)就是一个单载波信号正交调制解调,则经过混频器和低通滤波器之后,I路解调输出为正交调制解调,而Q路解调输出为正交调制解调。显然I/Q信号中包含了本地载波与接收载波之间的频率差信息。按照一般复数域基带处理惯例,输入信号被认为是I(t)+jQ(t),在这里为正交调制解调。如果对复数域基带解调信号进行FFT分析,则频谱在频率正交调制解调处出现峰值,该频率点反映了本地载波频率相对于输入载波频率的增量。为了调整本地载波频率使之与输入频率一致,需要在本地载波频率基础上减去该增量。这就与我们平时认为的频谱分析有些出入了,比如这个峰值出现在正频率部分,我们一般会认为输入信号频率比本地载波信号频率高,看起来我们需要增加本地载波频率,但事实上我们需要降低本地载波频率。

总之,无论I/Q两路载波相对相位的设计是I路相位超前Q路90°还是落后Q路90°,无论给载波设置多少数值的初相,只要发送接收统一就不会影响系统正常工作。但是,如果载波设计成正交调制解调这样,接收端复数域基带信号处理需要特别小心,而正交调制解调这种设计比较吻合教科书/论文中的理论分析。



 

正交调制解调器是一种广泛应用于通信系统中的设备,主要用于将数字信号转换为模拟信号(调制)以及将模拟信号还原为数字信号解调)。其工作原理基于正交频分复用(OFDM)技术,通过使用多个正交子载波来传输数据,从而提高数据传输效率和抗干扰能力。 在调制过程中,正交调制解调器会将输入的数字信号分成多个子信号,并分配给不同的子载波。这些子载波在频率上是相互正交的,这意味着它们可以在不互相干扰的情况下紧密排列在一起。这种设计不仅提高了频谱利用率,还增强了系统的鲁棒性,使其能够更好地应对多径传播带来的影响[^1]。 解调过程则是调制的逆过程,正交调制解调器会接收到的模拟信号分解成各个子载波上的信号,并从中恢复出原始的数字信号。为了实现高效的解调,通常会采用快速傅里叶变换(FFT)算法来处理接收到的信号,从而准确地提取每个子载波上的信息[^2]。 正交调制解调器的设计还包括了对信道编码和解码的支持,以进一步提升数据传输的可靠性和纠错能力。常见的应用包括无线局域网(如Wi-Fi)、数字电视广播(如DVB-T)以及4G/5G移动通信系统等[^3]。 以下是一个简单的正交调制解调器调制过程的Python代码示例: ```python import numpy as np def qam_modulate(data, modulation_order): # 将输入数据映射到相应的星座点 # modulation_order 表示调制阶数,例如16-QAM、64-QAM等 symbols = [] for i in range(0, len(data), 2): real_part = data[i] imag_part = data[i+1] # 根据调制阶数生成对应的星座点 # 这里简化处理,实际需要映射到具体的星座点坐标 symbol = complex(real_part, imag_part) symbols.append(symbol) return symbols # 示例数据 data_bits = [0, 1, 1, 0, 1, 0, 0, 1] # 假设这是经过编码后的二进制数据 modulation_order = 16 # 使用16-QAM调制 # 调用调制函数 modulated_symbols = qam_modulate(data_bits, modulation_order) print("Modulated Symbols:", modulated_symbols) ``` 这段代码展示了如何将输入的二进制数据映射到QAM调制的星座点上。需要注意的是,实际的调制过程中还需要考虑更多的细节,例如符号映射的具体规则、前向纠错编码的应用等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值