Как динамически преобразовывать данные в байтовый массив в python и выполнять модуляцию?

#python #groovy

#python #groovy

Вопрос:

У меня есть функция модуляции, написанная в основном, в groovy которой определенно BPSK .

Ниже groovy приведена функция.

 private final int HDRSIZE = 5
private final int SAMPLES_PER_SYMBOL = 150
private final float NFREQ = 1/15

private float[] bytes2signal(byte[] buf) {
  float[] signal = new float[buf.length * 8 * SAMPLES_PER_SYMBOL * 2]   // 8 bits/byte, 2 floats/sample
  int p = 0
  for (int i = 0; i < buf.length; i  ) {
    for (int j = 0; j < 8; j  ) {
      int bit = (buf[i] >> j) amp; 0x01
      float f = bit == 1 ? -NFREQ : NFREQ
      for (int k = 0; k < SAMPLES_PER_SYMBOL; k  ) {
        signal[p  ] = (float)Math.cos(2 * Math.PI * f * k)
        signal[p  ] = (float)Math.sin(2 * Math.PI * f * k)
      }
    }
  }
  return signal
}
 

Buf в коде находятся динамические данные. Поэтому я использовал для преобразования это в python using arlpy .
Вот пример кода. Если я рассматриваю вариант ниже, как я могу динамически обрабатывать свои данные?

PS Я знаю, что есть способ запуска python в groovy оболочке, но, к сожалению, вам нужно напечатать все в python функции, и это возвращает значения, groovy которые вы можете использовать. Мне это не нравится, с чем я имею дело complex signals . Есть ли обходной или более эффективный способ сделать это?

 import arlpy
import arlpy.plot as aplt

bpsk = arlpy.comms.psk()
d1 = arlpy.comms.random_data(100)
x = arlpy.comms.modulate(d1, bpsk)
aplt.plot(x)
 

Вывод

Сигнал BPSK

Но теперь я чувствую, что что-то упускаю, и это неправильно с groovy точки зрения логики.

Комментарии:

1. Ваш код выдает разные результаты (если да, то какие)? Выдает ли ваш код какие-либо ошибки (если да, добавьте его)?

2. Мой код не выдает никаких ошибок, я просто немного обеспокоен логикой. Я не очень хорошо знаком с groovy (больше со стороны python). Просто подтверждение моего входа в систему на python в принципе правильно, и я не создаю что-то отличное от приведенного выше кода.

3. В stackexchange есть подраздел для проверки кода. ТО же самое относится и к проблемам программирования. Если это работает, этого достаточно для SO.