0

我一直在尝试寻找在 python 上发送调制信号的方法,然后再对发送和接收的数据进行分析。

目前,我只想能够使用 PAM 等调制格式发送数据,然后接收它

任何帮助将不胜感激谢谢

4

2 回答 2

0

我没试过,但是有一个Komm Python库,用于分析和模拟通信系统。Komm 包括脉冲幅度调制komm.PAModulation的实现,以及其他调制方案。

komm.PAModulation 类具有.modulate()将数据位作为输入并将其调制为传输信号的方法。相反,有一种.demodulate()方法可以接收到的信号并尝试从中解调数据。看起来 Komm 没有配备无线电或其他方式的接口,因此您需要单独弄清楚如何实际发送和接收这些信号。

于 2020-12-03T04:39:54.913 回答
0

有一种在模拟中发送信号的方法。例如,如果你想10在 4QAM 系统中传输比特组合,你必须从调制器开始,它将它映射到一个复杂的符号:假设映射是1+1j-> 现在你必须“传输”这个复杂的符号引入失真的通道(例如加性高斯白噪声)。在接收器上,您现在尝试检测此符号并将其映射回原始 10 位组合。

我建议您从头开始编程,以更好地理解该主题。

4QAM 调制的代码可能如下所示:

import matplotlib.pyplot as plt
import numpy as np
import pylab as pyl

def modulate_4QAM(bits):
    b_temp = np.reshape(bits * 2 - 1, (-1, 2)) # reshape bits in [0,1] to [-1,1]
    x = 1 / np.sqrt(2) * (b_temp[:, 0] + 1j * b_temp[:, 1])
    return x

def detecting_4QAM(received_signal):
    # detecting (slicing) and de-mapping
    received_bits = np.zeros((len(received_signal), 2))
    received_bits[:, 0] = np.real(received_signal) > 0
    received_bits[:, 1] = np.imag(received_signal) > 0
    received_bits = np.reshape(received_bits, (-1,))
    return received_bits

if __name__ == '__main__':
    b = pyl.randint(0, 2, int(4)) # generate random bits
    x = modulate_4QAM(b) # map bits to complex symbols
    noisePower=10**(-5/20) #caltulcate the noise power for a given SNR value
    noise = (noisePower)*1/np.sqrt(2)*(pyl.randn(len(x))+1j*pyl.randn(len(x)))#generate noise
    y_AWGN =x+noise # add the noise to the signal
    b_received = detecting_4QAM(y_AWGN)

请注意,从 4QAM 扩展到 64QAM 会导致额外的编程/打字开销,为此工具箱变得非常方便。

这只是一个编码示例的一小部分,该示例使用 4QAM 调制模拟 AWGN 的信噪比上的 BER:https ://github.com/TheWirelessClassroom/PythonExamples/tree/Modulation

PS我是论坛的新手,不确定是否只有部分或完整代码更有帮助/想要。我很乐意就此获得一些反馈并相应地更改帖子。

于 2021-12-18T00:03:25.087 回答