#python #signal-processing #telecommunication #modulation
#python #обработка сигналов #телекоммуникации #модуляция
Вопрос:
Я пытался найти способы отправки модулированных сигналов на python, которые затем в дальнейшем анализируют отправленные и полученные данные.
На данный момент я просто хочу иметь возможность отправлять данные, используя формат модуляции, такой как PAM, а затем получать их
Любая помощь будет оценена, спасибо
Ответ №1:
Я не пробовал, но есть библиотека Komm Python для анализа и моделирования систем связи. Komm включает в себя реализацию komm с амплитудно-импульсной модуляцией.Памодуляция, среди других схем модуляции.
Комм.Класс PAModulation имеет .modulate()
метод, который принимает биты данных в качестве входных данных и модулирует их в сигнал передачи. И наоборот, существует .demodulate()
метод, который принимает принятый сигнал и пытается демодулировать из него данные. Не похоже, что Komm поставляется с интерфейсами для радиостанций или других модальностей, поэтому вам нужно будет отдельно выяснить, как на самом деле отправлять и получать эти сигналы.
Ответ №2:
Существует способ отправки сигналов при моделировании. Например. если вы хотите передать комбинацию битов 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 приведет к дополнительным затратам на программирование / ввод, и для этого очень удобны наборы инструментов.
Это лишь часть примера кодирования, который имитирует BER по SNR AWGN с модуляцией 4QAM из: https://github.com/TheWirelessClassroom/PythonExamples/tree/Modulation
PS Я новичок на форуме и не уверен, что только часть или полный код более полезны / желательны. Я был бы рад получить некоторые отзывы об этом и соответствующим образом изменить сообщение.