有没有一种方法可以使用 python 发送和接收调制信号的信号?
Is there a way of sending and receiving signals for modulated signal's using python?
我一直在尝试寻找在 python 上发送调制信号的方法,然后在稍后对发送和接收的数据进行分析。
目前我只想能够使用调制格式(例如 PAM)发送数据然后接收它
任何帮助将不胜感激谢谢
我没试过,但在其他调制方案中有一个 Komm Python library for analysis and simulation of communication systems. Komm includes an implementation of pulse-amplitude modulation komm.PAModulation。
komm.PAModulation class 有一个 .modulate()
方法,它将数据位作为输入并将其调制为传输信号。相反,有一种 .demodulate()
方法接收接收信号并尝试从中解调数据。 Komm 似乎没有配备无线电或其他模式的接口,因此您需要单独弄清楚如何实际发送和接收这些信号。
有一种在模拟中发送信号的方法。例如。如果你想在 4QAM 系统中传输位组合 10
,你必须从一个调制器开始,它将这个映射到一个复杂的符号:假设映射是 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 会导致额外的 programming/typing 开销,工具箱对此非常方便。
这只是一个编码示例的一小部分,它模拟了 AWGN 的 BER 与 4QAM 调制的 SNR 来自:https://github.com/TheWirelessClassroom/PythonExamples/tree/Modulation
P.S。我是论坛的新手,不确定是部分代码还是完整代码更多 helpful/wanted。我很乐意就此获得一些反馈并相应地更改 post。
我一直在尝试寻找在 python 上发送调制信号的方法,然后在稍后对发送和接收的数据进行分析。
目前我只想能够使用调制格式(例如 PAM)发送数据然后接收它
任何帮助将不胜感激谢谢
我没试过,但在其他调制方案中有一个 Komm Python library for analysis and simulation of communication systems. Komm includes an implementation of pulse-amplitude modulation komm.PAModulation。
komm.PAModulation class 有一个 .modulate()
方法,它将数据位作为输入并将其调制为传输信号。相反,有一种 .demodulate()
方法接收接收信号并尝试从中解调数据。 Komm 似乎没有配备无线电或其他模式的接口,因此您需要单独弄清楚如何实际发送和接收这些信号。
有一种在模拟中发送信号的方法。例如。如果你想在 4QAM 系统中传输位组合 10
,你必须从一个调制器开始,它将这个映射到一个复杂的符号:假设映射是 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 会导致额外的 programming/typing 开销,工具箱对此非常方便。
这只是一个编码示例的一小部分,它模拟了 AWGN 的 BER 与 4QAM 调制的 SNR 来自:https://github.com/TheWirelessClassroom/PythonExamples/tree/Modulation
P.S。我是论坛的新手,不确定是部分代码还是完整代码更多 helpful/wanted。我很乐意就此获得一些反馈并相应地更改 post。