Comprobación de señales por encima del umbral de intensidad en SDR en VHF

0

Tengo una pequeña radio definida por el software NooElec y la tengo funcionando bien con mi Raspberry Pi usando GQRX como controlador y para visualizar la salida SDR.

Sin embargo, mi objetivo es usar una secuencia de comandos de Python para escuchar los pulsos (10 ms de largo cada 1 segundo) de pequeñas balizas VHF en animales que hemos etiquetado. Estas etiquetas emiten un ping alrededor de 151MHz y he podido encontrarlas en mi salida GQRX, pero me gustaría usar el % co_de La herramienta% y las funciones pyrtlsdr de matplotlib para poner esto en Python y así poder activar otro equipo una vez que El pulso de señal se detecta por encima de cierta fuerza. Básicamente estoy usando la intensidad de la señal como un proxy para la distancia a cero en la etiqueta. Mi experiencia con RF es bastante limitada, pero creo que esta debería ser una operación relativamente básica.

Así que ingiero las muestras del SDR con mlab use pytrlsdr para convertir eso en intensidad y frecuencia de la señal para averiguar si la señal cumple o no con mi umbral y este tipo de trabajo, pero siento que yo Estoy empujando a través de la oscuridad y quería volver a verificar mis métodos y ver qué más necesito verificar cuando se ejecuta este procedimiento.

Preguntas específicas:

  • No estoy exactamente seguro de cómo encontrar el pico, pero he estado jugando alrededor de mlab.magnitude_spectrum() , es apropiado para máximo hallazgo en esta situación? Si es así, ¿cómo puedo encontrar los anchos para los picos? Empíricamente?
  • ¿Cuál es la tasa de muestreo ideal? ¿Cómo puedo calcular esto?
  • ¿Hay algo en que este método vaya a dañar mi radio de detección? Como es habitual, es crítico que sea lo más grande posible. ¿Alguna forma de mejorar el radio de detección?

Así que aquí está mi método actual:

from rtlsdr import RtlSdr
from matplotlib import mlab

sdr = RtlSdr()

# configure device and settings
sdr.sample_rate = 2.048e6  # Hz
sdr.center_freq = 151e6     # Hz
sdr.gain = 'auto'
num_samples = 1024
threshold = -0.10 # empirically derived

my_samples = sdr.read_samples(num_samples)
magnitude_values, freqs = mlab.magnitude_spectrum(my_samples)

above_threshold = []
for index, magnitude in enumerate(magnitude_values):
    if magnitude > threshold:
        above_threshold.append([magnitude, freqs[index]])

Ciertamente tengo algo que hacer en análisis de señales de RF, pero siento que estoy cerca de un sistema en funcionamiento.

    
pregunta clifgray

0 respuestas

Lea otras preguntas en las etiquetas