有没有办法使用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期

数字信号调制基于多进制数字频率调制(4FSK)matlab源码

数字信号调制基于二进制数字频率调制(2FSK)matlab源码