有没有办法使用python发送和接收调制信号的信号?
Posted
技术标签:
【中文标题】有没有办法使用python发送和接收调制信号的信号?【英文标题】:Is there a way of sending and receiving signals for modulated signal's using python? 【发布时间】:2021-03-13 18:26:25 【问题描述】:我一直在尝试寻找在 python 上发送调制信号的方法,然后再对发送和接收的数据进行分析。
目前我只想能够使用 PAM 等调制格式发送数据,然后接收它
任何帮助将不胜感激,谢谢
【问题讨论】:
【参考方案1】:我没试过,但是有一个Komm Python library用于通信系统的分析和仿真。 Komm 包括脉冲幅度调制komm.PAModulation 的实现,以及其他调制方案。
komm.PAModulation 类有一个.modulate()
方法,它将数据位作为输入并将其调制为传输信号。相反,有一个.demodulate()
方法接收接收到的信号并尝试从中解调数据。 Komm 似乎没有配备无线电或其他模式的接口,因此您需要单独弄清楚如何实际发送和接收这些信号。
【讨论】:
【参考方案2】:有一种在模拟中发送信号的方法。例如。如果你想在 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 会导致额外的编程/打字开销,为此工具箱变得非常方便。
这只是一个编码示例的一小部分,该示例使用来自 https://github.com/TheWirelessClas-s-room/PythonExamples/tree/Modulation 的 4QAM 调制模拟 AWGN 的 BER 与 SNR
附:我是论坛的新手,不确定是否只有部分代码或完整代码更有帮助/想要。我很乐意就此获得一些反馈并相应地更改帖子。
【讨论】:
以上是关于有没有办法使用python发送和接收调制信号的信号?的主要内容,如果未能解决你的问题,请参考以下文章
数字信号调制基于matlab无线电信号调制识别含Matlab源码 912期