我無法使自定義塊以高頻率運行。GNURadio問題與時間
我想使用的塊將從外部無線電接收數據。
我正在使用一個Ettus USRP塊從這個收音機中流入數據,並且我可以在QT Scope上顯示它。我可以將這個模塊的採樣速率設置爲15 MHz,並且範圍似乎可以正常工作。
問題:
我試圖使與gnuradio中gr_modtool這需要在2個漂浮作爲輸入,並具有0輸出一個簡單的塊。該塊有私人成員「計時器」,time_t和「計數器」,一個int。在「工作」功能,我的代碼只需做到這一點的時刻:
const float *in_i = (const float *) input_items[0];
const float *in_q = (const float *) input_items[1];
if (count == 0){
if (*in_i > 0.5){
timer = clock();
count = 30000;
}
}else{
count --;
if(count == 0){
timer = clock()-timer;
printf("Count took %d clicks, or %f seconds\n",timer,(float)timer/CLOCKS_PER_SEC);
}
}
// Tell runtime system how many output items we produced.
return 0;
然而,當我運行此代碼,需要更長的時間比預期的時間。 對於30000個週期,完成需要0.872970,而不是所需的0.002秒。由於使用gr_modtool生成的標準gnuradio塊是一個同步塊,並且該塊的輸入流來自15 MHz USRP,所以我預計該塊將以相同的頻率運行。目前情況並非如此。
最終,我的目標是能夠在一段時間內存儲數據流,並將其寫入到具有特定格式的文件中(已經有一個塊可以執行此操作,但存在某種阻止塊和USRP塊同時工作,所以我試圖寫自己的。)。但是,除非我能跟上15MHz的採樣率,否則我將丟失數據。由於這個模塊非常簡單,我希望它能夠快速運行以保持速度。但是,輸入流塊能夠從收音機中提取數據並以15 MHz的頻率輸出,所以我知道我的電腦能夠支持它。
我怎樣才能讓這個自定義模塊更快速地操作,並與15兆赫的頻率跟上?(或者說,我怎樣才能使這個同步塊輸入流頻率下工作,因爲它目前沒有)
嗯,實際上我正在編寫一個接收器塊,但是當您使用gr_modtool創建接收器時,它將繼承「同步」塊。唯一的區別是輸出的io_signature對於最小和最大數字有0。所以我沒有退貨,但我仍然在消費。由於返回的默認值是noutput_items,所以我放置0,因爲我不輸出流。 – Zephyr
如上所述,一個接收器應該是一個sync_blcok,它必須**返回你已經消耗的項目的數量。 –
重複說明:爲了消耗水槽,您必須「生產」。 –