Forum: PC Hard- und Software Prinzipielles Vorgehen bei der Erstellung von Software zur Signalanalyse


von Matt B. (mattb)


Lesenswert?

Hallo,

ich frage mich, wie man Signale innerhalb von Software analysieren kann 
und wie man bei der Erstellung von solchen Programmen vorgeht.

Als Beispiel könnte man hier das Funkmeldesystem der BOS (Feuerwehr, 
Rettungsdienst, ...) nennen, das durch ein Frequenzumtastverfahren 
(1200Hz = 1, 1800Hz  = 0) Daten übermittelt.

Nehmen wir an, dass die Signale bereits digitalisiert sind und z.B. von 
einer Textdatei ausgelesen werden können.

Kleine Zusatzinfo:
Programmierung ist für mich kein Problem. Aber mit digitaler 
Signalverarbeitung hatte ich bisher so gut wie noch nie was zu tun.

von J.-u. G. (juwe)


Lesenswert?

Matt B. schrieb:
> ich frage mich, wie man Signale innerhalb von Software analysieren kann
> und wie man bei der Erstellung von solchen Programmen vorgeht.

Kann man pauschal nicht beantworten. Das hängt sowohl von der Art der 
Signale als auch von der benötigten Analyseform ab. Ganz grob und 
allgemein:
1. Signal einlesen
2. Analysefunktion (die in Form einer Rechenvorschrift vorliegt) 
anwenden
3. Analyseergebnis ausgeben

> Nehmen wir an, dass die Signale bereits digitalisiert sind und z.B. von
> einer Textdatei ausgelesen werden können

1. Datei einlesen
2. Daten dekodieren
3. Information ausgeben

Oder was willst Du da analysieren?

von Matt B. (mattb)


Lesenswert?

Mich interessiert vor allem, wie man so eine Analysefunktion 
(Rechenvorschrift) erstellt.

von Christian B. (casandro)


Lesenswert?

Erst mal überlegen, ob das interaktiv oder nicht-interaktiv sein soll. 
Sprich willst Du einfach nur Daten einlesen-verarbeiten-ausgeben, oder 
soll der Anwender damit spielen können?

Im ersten Falle mach ein ganz normales Programm ohne GUI, das einfach 
die Daten (z.Bsp im SoX .dat Textformat) über die Standardeingabe 
einließt, und über die Standardausgabe ausließt.

Die Signalverarbeitung hängt davon ab was Du machen willst. Für FSK 
Signale kannst Du einfach 2 Bandpass-Filter machen in dem Du die Signale 
heruntermischt (mit e^(j*w*t) multiplizieren, bzw *sin(w*t) und 
*cos(w*t)) und dann tiefpassfilterst. Wenn Du das Signal dadurch schon 
komplex hast kannst du einfach den Betrag bestimmen.

In Pascal sähe das beispielsweise so aus:
1
PROGRAM irgendwas;
2
CONST w1=1000; //Kreisfrequenz 1
3
      w2=2000; //Kreisfrequenz 2
4
      td=1e-3; //Zeit zwischen 2 Abtastwerten am Ausgang
5
VAR t,x,nt:double;
6
    sr1,si1,sr2,si2:double;
7
    p1,p2:double;
8
9
BEGIN
10
  readln; readln; //Sox mach am Anfang 2 Kommentarzeilen, weg damit
11
  sr1:=0; si1:=0;
12
  sr2:=0; si2:=0;
13
  nt:=td;
14
  REPEAT
15
     readln(t,x);
16
     sr1:=sr1+cos(x/w1);
17
     si1:=si1+sin(x/w1);
18
     sr2:=sr2+cos(x/w2);
19
     si2:=si2+sin(x/w2);
20
     if t>nt THEN
21
     BEGIN
22
       p1:=sqr(sr1)+sqr(si1);
23
       p2:=sqr(sr2)+sqr(sr2);
24
       writeln(t,' ',(p2-p1)/(p2+p1));
25
       sr1:=0; sc1:=0;
26
       sr2:=0; sc2:=0;
27
       nt:=nt+td;
28
     END;
29
  UNTIL eof;
30
END.
(Code nicht ausprobiert, vermutlich Fehler drin)

Du kriegst dann Zahlen zwischen -1 und 1, die Du dann in einer Art 
Software UART weiterverarbeiten kannst. Dafür muss natürlich td klein 
genug sein. (kleiner als die Symbolzeit durch 16)

von Matt B. (mattb)


Lesenswert?

Hallo Christian,

danke für deine Hilfe. Ich habe allerdings noch ein paar Fragen:

Du schreibst, dass du die Real- und Imaginärteile der Werte berechnest 
und diese anschließend tiefpassfilterst.

Verstehen ich den Codeteil
1
     sr1:=sr1+cos(x/w1);
2
     si1:=si1+sin(x/w1);
3
     sr2:=sr2+cos(x/w2);
4
     si2:=si2+sin(x/w2);
so richtig:

sr1 stellt den Realanteil von x/w1 dar. si1 entsprechend den 
Imaginäranteil.
Alle Realanteile werden unter Beachtung deren Vorzeichen zu sr1 
dazuaddiert. Bildet das bereits den Tiefpassfilter?

von Markus F. (Gast)


Lesenswert?

@Christian: Inwiefen bezieht sich Dein Code auf Sox?

@Matt: Womit willst DU Deine Signale anzeigen?

von Markus F. (Gast)


Lesenswert?

Keiner mehr da?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.