我一直在尝试寻找在 python 上发送调制信号的方法,然后再对发送和接收的数据进行分析。
目前,我只想能够使用 PAM 等调制格式发送数据,然后接收它
任何帮助将不胜感激谢谢
我一直在尝试寻找在 python 上发送调制信号的方法,然后再对发送和接收的数据进行分析。
目前,我只想能够使用 PAM 等调制格式发送数据,然后接收它
任何帮助将不胜感激谢谢
我没试过,但是有一个Komm Python库,用于分析和模拟通信系统。Komm 包括脉冲幅度调制komm.PAModulation的实现,以及其他调制方案。
komm.PAModulation 类具有.modulate()
将数据位作为输入并将其调制为传输信号的方法。相反,有一种.demodulate()
方法可以接收到的信号并尝试从中解调数据。看起来 Komm 没有配备无线电或其他方式的接口,因此您需要单独弄清楚如何实际发送和接收这些信号。
有一种在模拟中发送信号的方法。例如,如果你想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我是论坛的新手,不确定是否只有部分或完整代码更有帮助/想要。我很乐意就此获得一些反馈并相应地更改帖子。