2017-06-16 4 views
0

Je m'excuse d'avance pour la longue question. Je veux m'assurer de tout avoir. J'ai mis en place un script python apparemment simple avec l'aide de GNU Radio (et en utilisant un USRP b200) pour recevoir un signal en continu, et quand ce signal atteint un certain niveau de puissance, une variable de seuil permet à l'utilisateur de connaitre un signal. été détecté et je veux commencer à recueillir ce signal pour le voir plus tard. J'ai donc un script python qui attend qu'un signal soit détecté, et quand il l'est, il va commencer à collecter en utilisant un autre script python. Le problème est, l'USRP ne me laissera pas recevoir et collecter en même temps. Les USRP peuvent-ils recevoir et collecter simultanément?GNU Radio/Python - USRP recevoir et collecter en même temps

Ma configuration GNU Radio

UHD: USRP Source ---> Low Pass Filter ---> Complex to Mag^2 ---> Threshold ---> Probe Signal 

avec une sonde de fonction et une étiquette (pour montrer à l'utilisateur si un signal est détecté)

GNU généré/mon mise à jour du code Python

Class autoCollect(gr.top_block, Qt.QWidget): 

    def __init__(self): 
     . 
     . #some setup stuff 
     . 
     def _probe_variable_probe(): 
      while True: 
       val = self.probe_signal.level() 
       try: 
        self.set_probe_variable(val) 
       except AttributeError: 
        pass 
       if val == 1.0 # If there is a signal detected... 
        p = subprocess.Popen("python USRP_collect.py", shell=True) 
        p.wait() 
     _probe_variable_thread = threading.Thread(target=_probe_variable_probe) 
     _probe_variable_thread.daemon = True 
     _probe_variable_thread.start() 
     . 
     . #some more setup stuff 
     . 

if __name__ == '__main__': 
    tb = autoCollect() 
    tb.start() 
    tb.show() 

USRP_Co llect

Class usrp_read(...): 

    def __init__(...) 
    . 
    . 
    . 
if name == '__main__': 
    tb = usrp_read(...) 
    tb.run() 

Problème: Quand je tente d'appeler pour USRP_collect à courir dans mon script autoCollect, il commence à courir mais quand il arrive à tb = usrp_read() donne une erreur

Traceback (most recent call last): 
    File "USRP_collect.py", line 29, in __init__ 

Ensuite, une erreur d'exécution

empty device address 

J'ai essayé d'exécuter un fichier de vue à la place du fichier de collecte (la vue affiche seulement un fft du signal, qui fonctionne tout seul) et il me donne la même erreur, quand j'essaye d'appeler la classe.

Répondre

1

Les USRP peuvent-ils recevoir et collecter simultanément?

Oui, tous les périphériques sont capables de fonctionner en duplex intégral.

Votre erreur est d'essayer d'utiliser le même USRP à partir de deux processus. Cela ne fonctionne pas - vous devez intégrer votre récepteur et votre transmetteur dans le même diagramme/processus.

En fait, dans GNU Radio, c'est facile: il suffit d'utiliser un évier et une source USRP dans un graphique de flux. Je ne sais pas ce que fait votre diagramme de flux, mais aussi: les sondes de signaux ne sont certainement pas la solution.

+0

Eh bien, fondamentalement, j'essaie de recevoir un signal que je transmets en utilisant un autre USRP (fonctionnant). Ensuite, je veux savoir si le niveau de puissance du signal est suffisamment élevé pour que je puisse déterminer s'il y a un signal présent. J'ai fait tout cela en mettant un seuil et la sonde à mettre à jour constamment et laissez-moi savoir s'il y a un signal. Une idée de comment je peux continuer à travailler pendant la collecte si le signal est présent? – BBEng