wie, um eine Darstellung der input-analog-Signale vom arduino in matlab
Ich habe versucht, das Lesen von analogen Signalen durch arduino uno und Plotten Sie in MATLAB. Als ich meinen input wave-Funktion generator und versuchte, Sie zu zeichnen Sie es, die gezeichneten Signale nicht korrekt waren, z.B. ein input sine wave nicht geben eine Sinus-Welle. Was könnte die mögliche Ursache? Brauche ich eine externe Schaltung, die für eine reibungslose Lesen?
ARDUINO-CODE
void setup()
{ Serial.begin(9600); }
void loop()
{
int a=analogRead(A0);
Serial.println(a);
delay(1);
}
MATLAB-CODE
s=serial('COM3','BaudRate',9600);
fopen(s)
x=1:100;
n=1;
while n==1
for i=1:length(x)
tmp=fscanf(s,'%d');
if length(tmp)>1
continue;
end
y(i)=tmp;
end
y=y/1024*5;
ylim([0 5]);
plot(x,y)
drawnow
end
fclose(s)
- Bitte poste deinen code.
- ARDUINO-CODE void setup() { Serial.begin(9600); } void loop() { int a=analogRead(A0); Serial.println(a); delay(1); }MATLAB-CODE s=serial('COM3','BaudRate',9600); fopen(s) x=1:100; n=1; while n==1 for i=1:length(x) tmp=fscanf(s,'%d'); if length(tmp)>1 continue; end y(i)=tmp; end y=y/1024*5; ylim([0 5]); plot(x,y) drawnow end fclose(s)
- Nächstes mal bitte den code hinzufügen, um die Frage, anstatt die Kommentare, wie es macht es schwer zu Lesen. So sind Sie den Erwerb von 100 Datenpunkten durch eine serielle Verbindung mit 9.600 bauds. Welche Frequenz ist dein input sine wave? Welche Ausgabe bekommen Sie in MATLAB? BTW, es sieht aus wie Ihre
while
Schleife läuft ewig... - nun habe ich versucht Frequenzen bis zu 1 KHz.die Ausgabe war sehr verzerrt, die ähnelte einem Dreieck Form irrespectve der Funktion, die als Eingabe.ja,da ist eine unendliche Schleife, weil ich wollte, Echtzeit Plotten, wie in einem orginal-Oszilloskop
- Es könnte sich lohnen, für debugging-Zwecke, um nur erwerben ein Zeitraum Wert von Daten und versuchen zu zeichnen, nachdem die Datenerfassung abgeschlossen ist. Sobald Sie diese bekommen, können Sie gehen dann zu "real-time" - Zeichnens und der Erfassung von Daten kontinuierlich. Es klingt wie Sie sind-aliasing, also nicht den Erwerb von Daten schnell genug sample-rate.
- wenn ich erhöhen sich meine baudrate ist,kann er helfen????
- Es tun könnten... ich bin mir nicht sicher, was anderes zu empfehlen, sorry.
- wenn ich mich mit meinem input an arduino und öffnete den serial monitor,was ich sah, war, dass die Signale, wo Stichprobe auf die verschiedenen Punkte durch, die ich bin immer so ein plot.wenn ich eine Verbindung einer filter-Schaltung,kann es helfen????
- Nicht sicher, es klingt nicht ein MATLAB-Problem um ehrlich zu sein, sondern eher ein hardware-Problem auf der Arduino-Seite, also das forum ist wohl nicht der beste Ort dafür. Sie brauchen, um zu beheben die hardware-und sampling-Probleme, bevor man die Daten in MATLAB.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur eine Frage: hast du jemals eine Studie der signal-Theorie? Das Nyquist-theorem?
Sind Sie aquiring 1 Punkt (100 us), dann schicken Sie es über eine serielle Verbindung (also 10 bit jedes byte) mit einem PRINTLN! (also senden Sie, zum Beispiel, 6 Byte, d.h. "1023" + CR + LF). Also 60 Byte bei 9600 bps ist es mehr als 6 ms. Nehmen wir an, es ist 7 ms für jeden Punkt.
Nun haben Sie ein 1-kHz-wave. Also du nimmst eine Probe aus einer Welle, dann warten Sie 6 von Ihnen zu übergeben, und dann nehmen Sie einen anderen Punkt. So werden Sie nie in der Lage sein, etwas zu sehen.
Wenn Sie möchten, um Ihre Welle, versuchen Sie, MINDESTENS 10 Punkte für jede Welle (d.h. nicht oberhalb 15 Hz). Wenn Sie möchten, um zu sehen, eine bessere Welle, versuchen Sie, mit einer sinc-interpolation anstelle einer einfachen interpolation.