WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Livedaten einlesen und abbilden

 

Lybaju
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 18.10.10
Wohnort: Münster
Version: ---
     Beitrag Verfasst am: 18.10.2010, 15:47     Titel: Livedaten einlesen und abbilden
  Antworten mit Zitat      
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
           
        %bl = input ('Enter block(s):   ')
        filename = ([num2str(si),num2str(bl),'.txt']);
       % bl = input ('Enter block(s) :   ');  

%------------------- '-----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([0 15 0 15]);
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([0 50 -600 600]);
           view(-90,90);
   
%producing a target zone
px=[0 0 1 1 0];
py=[0 2 2 0 0];
tacolor = 'red';
%position the target zone
pox = 0;
poy = 1;
 fill(px+pox,py+poy,tacolor,'EdgeColor',tacolor)

 %producing the cursor
 qx=[0 0 0.3 0.3 0];
 qy=[0 0.5 0.5 0 0];
 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 = [0 10];
ai.Channel(1).SensorRange = [0 10];
ai.Channel(1).UnitsRange = [0 10];
    %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

prowave= reshape (wave, 53,1);
pause(1);
[crit] = textread('criterion_50_long.txt','%n');
           plot((-crit),'r'), plot (prowave,'b'), axis([0 50 -600 600]);
           view(-90,90);

           
           pause(1);
           produwave = prowave * -1;

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([0 50 -600 600]);
         message = ['RMSE =', num2str(rmse),'   ', 'Trial=',num2str(bl)];
         title(message);
         
pause(2.5)        
plot((-crit),'w'),plot ((prowave),'w'), axis([0 50 -600 600]);
         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)
   
        end
 
stop (ai);
delete(ai);
close(picture)

 
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.