Verfasst am: 18.10.2010, 14:47
Titel: Livedaten einlesen und abbilden
Hallo,
ich bin studentische Hilfskraft am Sportinstitut und habe folgendes Problem: Es soll mit MATLAB ein Programm geschrieben werden, welches Daten aus einem A/D Wandler Agilent U2352A einliest und gleichzeitig die aktuelle Position des Cursors (wie bei einer Maus) wiedergibt. Die Daten werden mittels eines Potentionmeters/Messwertumformer (0-10V) aufgenommen über dem ein Hebel montiert ist, welches Flexions und Extensionsbewegungen des Unterarms aufnimmt. Zu Beginn soll der "Cursor auf der X-Achse hin und her laufen können bis ein bestimmter Spannungswert unterschritten wird (7.5V). Danach brauche ich eine Datenaufnahme von 2 Sekunden mit mindestens 100 Daten/Sekunde. Leider bekomme ich das Programm nicht ans laufen. Verschiedene Versuche endeten entweder mit einer Zeitverzögerung zwischen dem Einlesen der Daten und dem Abbilden. Oder wie im folgendem Beispiel ist die Datenrate aufgrund der for-Schleife viel zu niedrig. Vielleicht hat ja jemand eine Idee wie man es besser/anders machen kann... Danke
Code:
%Das ist mein Programm
clear
%Open a file for data collection
si = input('participant: ' ,'s');
for bl=1:1
%------------------- '-----INITIALIZE GRAPHICS--------------------------------------
%picutre
picture=figure('Name','','NumberTitle','off');
bkgnd = 'white';
tacolor = 'black';
set(picture,'Color',bkgnd,'Menubar','none');
scrz = get(0,'Screensize');%compute screensize
set(picture, 'Position',scrz);%maximaize picture
%picture end axis([015015]);
axis off 'square';
hold on;
%-------Produce TARGET WAVE FORM---------------------------------------------
%------------------- reads in criterion waveform data ---------------------------------------------
[crit] = textread('criterion_50_long.txt','%n');
plot((-crit),'r'), axis([050-600600]);
view(-90,90);
%producing a target zone
px=[00110];
py=[02200];
tacolor = 'red';
%position the target zone
pox = 0;
poy = 1;
fill(px+pox,py+poy,tacolor,'EdgeColor',tacolor)
%producing the cursor
qx=[000.30.30];
qy=[00.50.500];
tacolor = 'black';
%create a analog input with specified sample rate and trigger
ai = analoginput('agilentu2300', 0);
ch = addchannel(ai,0);
duration = 0.01; % two second acquisition
%set(ai,'SampleRate', 100);
%ActualRate = get(ai,'SampleRate');
R=10000;
set(ai,'SampleRate', R);
set(ai,'InputType','SingleEnded');
ai.Channel(1).InputRange = [010];
ai.Channel(1).SensorRange = [010];
ai.Channel(1).UnitsRange = [010];
%set(ai,'SamplesPerTrigger',ActualRate*duration);
set(ai,'SamplesPerTrigger',1);
%set(ai,'TriggerChannel',ch);
set(ai,'TriggerType','manual');
set(ai, 'TriggerRepeat', 53);
start(ai); %Start of the analoginput channels
%wait(ai, duration+1)
%set cursor to a position, fill the cursor and delete the cursor if the cursor is
%moving to position n+1 % get('data1')
tic for i=1:53
trigger (ai);
data1 = getdata(ai);
x = data1*18;
posx = i;
posy= ((x*5.75)*-1)+350;
fill(qx+posx,qy+posy,tacolor,'EdgeColor',tacolor);
pause(0.01);
fill(qx+posx,qy+posy,bkgnd,'EdgeColor',bkgnd);
wave(i)=posy;
end toc
for k =1:length(produwave);
l(k)=k;
fid= fopen(filename,'a+t');
fprintf(fid,'%7.0f %7.0f\r',l(k),produwave(k));
fclose(fid);
end
%Calculate the rmse
[m,n] = size(prowave);
for p = 1:n
[diff(:,p)] = abs(crit(:,1) - produwave(:,p));
diffsq = diff.^2;
mnsq = mean(diffsq);
rmse = sqrt(mnsq);
rmse = rmse';
end
%produce the rmse on Screen
plot((-crit),'w'),plot((prowave),'w'), axis([050-600600]);
message = ['RMSE =', num2str(rmse),'', 'Trial=',num2str(bl)];
title(message);
pause(2.5) plot((-crit),'w'),plot((prowave),'w'), axis([050-600600]);
message = ['Pause 5s'];
title(message);
pause(2.5)
message = ['Bewegen Sie bitte den Hebel in Richtung ihres Körpers und halten Ihn hinter der roten Linie auf dem Tisch!'];
title(message);
pause(2)
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.