独自のコードで計算されるデータに基づいて、ソース/シンクの受信ゲインと送信ゲインをそれぞれ変更する必要があります。これを行う最善の方法は何ですか?これがどのように行われるかについて説明しているチュートリアルはありません。
理想的には、GNUradio python スクリプトはループ内でいくつかの関数を呼び出すだけで、ゲイン値が返され、システムが動的に変化します。
独自のコードで計算されるデータに基づいて、ソース/シンクの受信ゲインと送信ゲインをそれぞれ変更する必要があります。これを行う最善の方法は何ですか?これがどのように行われるかについて説明しているチュートリアルはありません。
理想的には、GNUradio python スクリプトはループ内でいくつかの関数を呼び出すだけで、ゲイン値が返され、システムが動的に変化します。
数か月前に、この機能に対する同様のニーズがありました。私の実装では、自動生成された Python 2.7 ファイルのコピーを作成し、それを編集して必要な機能を追加しました。私の場合、複数のチャンネルを生成し、ファイルを実行するときに変数を設定するための迅速かつ簡単な方法が必要でした。これは、変数を設定し、ターミナル ウィンドウを介してファイルを実行できるクリックモジュールを使用することで実現されました。
実行中に変数を動的に計算して変更しようとしている場合は、 threadingモジュール (または同等のもの)main()
を使用して関数内に別のスレッドを作成することをお勧めします。この新しいスレッドは、コードをループする別の関数を呼び出す必要があります。この関数内で、アルゴリズムはGRC によって自動的に生成されたおよび関数を使用する必要があります。variablename_get
variablename_set
これらのゲインの変化を計算するために使用しているデータがどこから来たのかは不明ですが、この回答が役立つことを願っています.
UHD シンク/ソースは、メッセージ ポートで特定のコマンド構文によって制御できます。詳細については、https://gnuradio.org/doc/doxygen/page_uhd.html#uhd_command_syntaxを参照してください。
以下は、USRP シンク/ソースに接続する必要がある double 値を取得するための着信メッセージ ポートと発信ポートを備えた埋め込み python ブロックの例です。
from gnuradio import gr
class tuning_uhd(gr.sync_block):
def __init__(self):
gr.sync_block.__init__(self,
name="Gain Tuning",
in_sig=[],
out_sig=[]
)
# Message ports
self.message_port_register_out(gr.pmt.intern("uhd"))
self.message_port_register_in(gr.pmt.intern("gain"))
self.set_msg_handler(gr.pmt.intern('gain'), self.handle_msg)
def handle_msg(self, msg):
self.message_port_pub(gr.pmt.intern('uhd'), gr.pmt.to_pmt({'gain': gr.pmt.to_double(msg) })