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

DAQ-Toolbox - A/D-Wandlerabfrage relativ langsam.

 

GodfatherTB
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2012, 10:30     Titel: DAQ-Toolbox - A/D-Wandlerabfrage relativ langsam.
  Antworten mit Zitat      
Hallo zusammen.

Ich bin mittlerweile dabei die A/D-Wandlerabfrage in mein Programm einzubauen. Zum herumprobieren habe ich mir mit Hilfe der Matlab Dokumentation ein einfaches Programm gebastelt, dass mir einen Mittelwert ausliest.

Hier der Code dazu:
Code:
function output=ad1chan(chan,time)
% Analoginput definieren
ai=analoginput('nidaq','dev2');
% channel auswählen
addchannel(ai,chan);
% samplerate festlegen
set(ai,'SampleRate',10000);
% samplerate prüfen
ActualRate=get(ai,'SampleRate');
% sample anzahl festlegen
total=ActualRate*time;
set(ai,'SamplesPerTrigger',total);
% Wander starten
tic
start(ai);
% auf ende warten (maximal 1 sekunde)
wait(ai,1);
toc
% daten holen
data=getdata(ai);
% ai wieder entfernen
delete(ai);
clear ai;

% mittelwert aus daten bilden (die ersten 5 werte ignorieren um
% fehlmessungen vorzubeugen)
datamp=length(data)
i=6;
output=0;
while i<=datamp
    output=output+data(i);
    i=i+1;
end
output=output/(datamp-5);
 


Wie zu sehen ist habe ich da schon tic/toc argumente mit eingefügt.
Wenn ich das programm mit x=ad1chan(0,0.01) aufrufe, erwarte ich eigentlich, dass das Programm in weniger als 0.1 sekunde fertig ist. Es braucht aber rund 0.2 Sekunden. die initiierung des AD-Wandlers (Alles bis zum start-kommando) braucht etwa 0.04 Sekunden. Die Berechnung des Mittelwerts ist vernachlässigbar. Aber die eigentliche A/D-Wandlerabfrage schlägt mit 0.16 Sekunden zu buche.

Das ist zwar alles relativ flott, aber nicht flott genug. Ich kann also bei 100 Messwerten nur mit etwa 5Hz meine Daten abrufen (wenn ich die function in eine Schleife einbaue). Bei höheren Abtastraten geht die Zeit ebenfalls etwas höher.

Möchte ich sogar 0.1 Sekunde lang werte Abfragen braucht Matlab insgesamt 0.4 Sekunden dafür.


Wie kann ich das Beschleunigen?
Kann ich das effizienter programmieren?
Warum braucht Matlab für eine 0.01 Sekunden Abfrage gut 15 mal so lange?

Grüße,

Christian
_________________

Student der Luft- und Raumfahrttechnik in den letzten Zügen.
Lerne für meine Studien- und Diplomarbeit Matlab kennen und bin für Hilfe sehr dankbar!
Private Nachricht senden Benutzer-Profile anzeigen


GodfatherTB
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2012, 12:50     Titel:
  Antworten mit Zitat      
Hallo
habe nun selber herausgefunden, dass das an PC und A/DWandler liegt.

Eine neue PC - A/D Wandler Kombination führt dazu, dass es doppelt so schnell geht.

Es dauert zwar immer noch 0,09 Sekunden bei einer Sampletime von 0,01 Sekunden, ist aber somit deutlich angenehmer zu handhaben.

Gruß,
Christian
_________________

Student der Luft- und Raumfahrttechnik in den letzten Zügen.
Lerne für meine Studien- und Diplomarbeit Matlab kennen und bin für Hilfe sehr dankbar!
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 06.08.2012, 14:48     Titel:
  Antworten mit Zitat      
Die untere Schleife ließe sich aber auch vermeiden...

Code:

datamp=length(data)
i=6;
output=0;
while i<=datamp
    output=output+data(i);
    i=i+1;
end
output=output/(datamp-5);

% geht auch so...
datamp=length(data);
i = 6;
output = sum( data(i:end) )/(datamp-5);
 
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.