【问题标题】:float data transmit and receive with tcpip matlab?使用 tcpip matlab 发送和接收浮点数据?
【发布时间】:2015-07-12 10:48:03
【问题描述】:

我正在尝试通过 TCP/IP(与 GNU Radio 接口)传输和接收数据:

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,我需要获取我为我的应用程序传输的浮点数据。有人可以告诉我该怎么做吗?

【问题讨论】:

  • 为什么不先转换成ASCII?它会稍微慢一些,但更容易编码。
  • 也就是说,发送前使用num2str,接收后使用str2num
  • 实际上我需要传输浮点数(例如0.1067),这将在(0到1)之间变化。这里的数据实际上代表了时域中的 OFDM 信号。我真的需要传输小数,最终这将通过 USRP 传输。如果您能告诉我是否有任何方法可以在 matlab 上通过 tcpip 传输浮点数据,这对我真的很有帮助。是否有任何其他功能。在这里,我正在将 matlab 与 gnuradio 伴侣接口。
  • 我错过的另一件事.. s = whos('data'); %i 错误地将 tx_data 放在那里
  • @SanjoyBasak,您可以编辑您的原始帖子以更正您的错误或添加信息;-)

标签: matlab tcp 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 中的值都应该是双精度并且彼此相等。

【讨论】:

  • 非常感谢。您的代码运行良好。实际上之前我读到的是,我只能通过 tcpip 传输 uint8 数据,所以从浮点数转换总是给我 0 或 1。您的代码运行良好。祝您有美好的一天,非常感谢您的帮助..:)
  • 您好,我需要更多帮助。我实际上需要在这里控制采样率。请你建议我该怎么做。时间=10;我=1; tic while (toc
猜你喜欢
  • 2019-12-10
  • 1970-01-01
  • 2018-10-09
  • 2016-11-18
  • 2011-08-06
  • 2020-02-09
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多