2015-05-02 117 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