2015-05-02 147 views
1

我試圖發射和TCP接收數據/ IP(與GNU無線電接口):使用tcpip matlab實現浮點數據傳輸和接收?

data = rand(1,128); 
t = tcpip('127.0.0.1',2012,'Timeout', 120); 
s = whos('data'); 
set(t,'OutputBufferSize',s.bytes); 
fopen(t); 
fwrite(t,data,'double') 
m=tcpip('127.0.0.1',2022,'Timeout', 120); 
set(m,'InputBufferSize',s.bytes) 
fopen(m); 
fread(m) 

當我看到我的數據,這些都爲0或1,我需要獲得浮點數據,我正在轉發我的申請。有人可以告訴我該怎麼做嗎?

+0

爲什麼不先轉換爲ASCII?它會稍微慢一些,但更容易編碼。 –

+0

換句話說,在發送前使用num2str,而在收到 –

+1

後str2num實際上需要傳輸浮點數(例如0.1067),這將從(0到1)變化。這裏的數據實際上代表了時域中的OFDM信號。我真的需要傳輸分數,最終這會通過USRP傳輸。 這對我來說真的很有幫助,如果你能告訴我是否有任何方式通過matlab上的tcpip傳輸浮點數據。有沒有其他的功能呢。在這裏,我正在將matlab與gnuradio同伴交互。 –

回答

1

我不能複製你的問題與全零或一,但我認爲你需要使用其中一個額外的輸入參數icinterface/fread。這裏有一個簡單的例子:

data = rand(128, 1); 
echotcpip('on', 2012); 
t = tcpip('127.0.0.1', 2012, 'Timeout', 120); 
bytes_per_double = 8; 
set(t, 'InputBufferSize', bytes_per_double*numel(data), ... 
     'OutputBufferSize', bytes_per_double*numel(data)); 
fopen(t); 
fwrite(t,data(:),'double'); 
data_out=fread(t, t.InputBufferSize/bytes_per_double, 'double'); % Read in as doubles 
echotcpip('off'); 
fclose(t); 
delete(t); 
isequal(data, data_out) 

datadata_out值都應該是雙打和彼此相等。

+0

非常感謝。你的代碼工作非常好。其實我之前讀過的是,我只能通過tcpip傳輸uint8數據,所以從浮點數轉換總是給我0或1。 您的代碼工作非常好。有一個美好的一天,非常感謝幫助.. :) –

+0

嗨,我需要更多的幫助。實際上我需要在這裏控制採樣率。你能否建議我該怎麼做。 時間= 10; i = 1; (toc