3

GNU Radio の履歴機能を使用する一般的な作業機能があります。ブロックのコンストラクターで、 を呼び出しますset_history( m )。入力バッファを標準的な方法でキャストします。

  const float *in = (const float *) input_items[0];

in[0]私の質問は、バッファ内で参照されている wheereです。ブロックが消費する新しいアイテムの数であり、バッファ内のデータの総数を指すことnoutput_itemsは私には理にかなっています。したがって、は配列の最後の要素であり、は新しい項目の開始点であり、は履歴ブロックの開始点を参照します。したがって、以上です。ninput_items[0]in[noutput_items-1]in[0]in[-m]ninput_items[0]m + noutput_items

この仮定が正しいかどうかはわかりませんが、誰かがこれがどのように機能するかを知っていれば幸いです. GNU Radio API は、この点でいくぶんあいまいです。前もって感謝します!

4

2 に答える 2

2

Tom Rondeauは、 GNURadiowikiでこの質問に答えるのを手伝いました。in[0]歴史の始まりを指します。新しいin[0]データの先頭を参照させるには、次のように宣言します。in

const float *in = (const float *) &((const float*)input_items[0])[history()-1]; 
于 2012-09-21T17:53:56.983 に答える
1

@Chris の完全を期すために、パラメータと同じようにアイテムset_history()数を参照します。noutput_itmes

in[0]履歴の最初の項目を参照します。履歴をスキップして最初の新しいアイテムを取得するには、次の方法が適切です。

const <TYPE> *in = (const <TYPE> *) &((const <TYPE>*)input_items[0])[(history()-1) * VEC_SIZE];

VEC_SIZE入力署名で指定されたタイプのサンプル数を参照します。

たとえば、ブロックの入力署名が

io_signature::make(1, 1, vec_len * sizeof(float))

各項目はvec_len浮動小数点数から構成されます。履歴は次の方法で適切にスキップできます。

const float *in_new = (const float *) &((const float*)input_items[0])[(history()-1) * vec_len];

于 2015-07-08T15:59:06.767 に答える