2016-07-15 3 views
0

Я подключаю свой iPhone и MATLAB к функции tcpip.данные графика в реальном времени, используя tcpip-соединение с matlab

Мне нужно построить данные в режиме реального времени (и прежде чем делать некоторые вычисления с данными). Я использовал real_time_data_stream_plotting.m, который я нашел в Интернете.

%% Real Time Data Stream Plotting Example 
function real_time_data_stream_plotting 
%% 
% This example demonstrates how to automatically read a set number of data bytes as and 
% when they are available. This MATLAB(R) script also generates a real time plot of streaming 
% data collected from the TCPIP server. 
% 
% The script may be updated to use any instrument/device/TCPIP server 
% to collect real time data. You may need to update the IP address and 
% port. 
% 
% To generate a report of this entire script, you may use the PUBLISH 
% command at the MATLAB(R) command line as follows: 
% 
% publish(real_time_data_plot); 

% Author: Ankit Desai 
% Copyright 2010 - The MathWorks, Inc. 

%% Create the interface object 
% Create a TCPIP object listening to port 19 (Character Generator). 
% 
% *Note* : To enable character generator service at port 19 on a Windows platform, enable: 
% 
% Control Panel > Add Remove Programs > Add/Remove Windows Component > Networking Services 
% 
interfaceObject = tcpip('192.168.1.111',52928); 

%% 
% Setup a figure window and define a callback function for close operation 
figureHandle = figure('NumberTitle','off',... 
    'Name','Live Data Stream Plot',... 
    'Color',[0 0 0],... 
    'CloseRequestFcn',{@localCloseFigure,interfaceObject}); 

%% 
% Setup the axes 
axesHandle = axes('Parent',figureHandle,... 
    'YGrid','on',... 
    'YColor',[0.9725 0.9725 0.9725],... 
    'XGrid','on',... 
    'XColor',[0.9725 0.9725 0.9725],... 
    'Color',[0 0 0]); 

xlabel(axesHandle,'Number of Samples'); 
ylabel(axesHandle,'Value'); 

%% 
% Initialize the plot and hold the settings on 
hold on; 
plotHandle = plot(axesHandle,4,'-y','LineWidth',1); 

%% Setup interface object to read chunks of data 
% Set the number of bytes to read at a time 
bytesToRead = 500; 

%% 
% Define a callback function to be executed when desired number of bytes 
% are available in the input buffer 
interfaceObject.BytesAvailableFcn = {@localReadAndPlot,plotHandle,bytesToRead}; 
interfaceObject.BytesAvailableFcnMode = 'byte'; 
interfaceObject.BytesAvailableFcnCount = bytesToRead; 

%% 
% Open the interface object 
fopen(interfaceObject); 
pause(3); 
snapnow; 
%% Implement the bytes available callback 
function localReadAndPlot(interfaceObject,~,figureHandle,bytesToRead) 

%% 
% Read the desired number of data bytes 
data = fread(interfaceObject,bytesToRead); 

%% 
% Update the plot 
set(figureHandle,'Ydata',data); 

%% Implement the close figure callback 
function localCloseFigure(figureHandle,~,interfaceObject) 

%% 
% Clean up the interface object 
fclose(interfaceObject); 
delete(interfaceObject); 
clear interfaceObject; 

%% 
% Close the figure window 
delete(figureHandle); 

Моя проблема заключается в том, что у меня есть сюжет в режиме реального времени, но я понятия не имею, какие данные я планирую. Я знаю, что данные, поступающие с iPhone, представляют собой матрицу с 62 столбцами (если я экспортирую данные с iPhone напрямую, я получаю CSV-файл из 62 столбцов).

Как я могу выбрать колонку I?

спасибо!

+0

Ну, что данные вы отправляете? – Suever

ответ

1

Вот бы мои взять на индексацию данных только для требуемой колонки:

function real_time_data_stream_plotting() 

     % These can be very well arguments for the function 
     FRAME_SIZE = 62;  % This many columns (each columns is one byte) 
     FRAME_COUNT = 500; % This much data to plot at once 
     DATA_COLUMN = 3  % Position of the plotted column 

     % Create connection 
     conn = tcpip('192.168.1.111', 52928); 

     % Set-up graphics 
     hf = figure(... 
      'NumberTitle',  'off', ... 
      'Name',   'Live Data Stream Plot', ... 
      'Color',   [0 0 0], ... 
      'CloseRequestFcn', {@localCloseFigure,conn} ... 
     ); 

     ha = axes(... 
      'Parent', hf,... 
      'YGrid', 'on', ... 
      'YColor', [0.9725 0.9725 0.9725], ... 
      'XGrid', 'on', ... 
      'XColor', [0.9725 0.9725 0.9725], ... 
      'Color', [0 0 0] ... 
     ); 
     hold(ha, 'on'); 
     xlabel(ha,'Number of Samples'); 
     ylabel(ha,'Value'); 

     hl = plot(ha, 4, '-r', 'LineWidth', 1); 

     % Set-up connection callback 
     conn.BytesAvailableFcn  = {@update_plot, hl, FRAME_SIZE, FRAME_COUNT, DATA_COLUMN}; 
     conn.BytesAvailableFcnMode = 'byte'; 
     conn.BytesAvailableFcnCount = FRAME_SIZE * FRAME_COUNT; 

     % Open connection and exit 
     fopen(conn); 
     pause(3); 
     snapnow; 

end 


% -------- Local Functions -------- 

function update_plot(conn, ~, hl, frame_size, frame_count, data_column) 

     data = fread(conn, frame_count*frame_size); 
     data = data(data_column + frame_size*(0:frame_count-1)); 
     set(hl, 'YData', data); 

end 


function clean_up_on_close(hf, ~, conn) 

     fclose(conn); 
     delete(conn); 
     clear conn; 
     delete(hf); 

end 

Однако, я не чувствую себя комфортно код проводки, основанные на на защищенную авторское право работы ...

+0

Большое спасибо за ваш ответ .. Извините за работу по авторскому праву, я не знал, как объяснить код. Ну, я получаю эту ошибку: Ошибка при использовании icinterface/fopen (строка 83) Неудачное открытие: Время срабатывания Ошибка в real_time_data_stream_plotting (строка 39) fopen (conn); Даже если ip и порт правильные .. Спасибо. @ CST-Link – YLM

Смежные вопросы