mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP sample Delay herausfinden


Autor: Gringo E. (gringo84)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich suche mit Matlab eine Lösung um herauszufinden was mein Delay ist 
bei einem Signal das von zwei ADC "gleichzeitig" abgetastet wurde.

mit xcorr funktioniert die ganze sache nur wenn ich ganze samples 
verschoben bin (die kreuzkorrelation ist ja auch samplebasierend).

ich möchte ein resultat haben wie: "das signal ist um 1.2 Samples 
verschoben".

als Test abe ich gleich zwei Sinus generiert und mit matlab ausgewertet.

fs=20480;
fo=1151;
delay=1.2*1/fs;   % mit 1/fs (ganzen Samples) funktioniert es
t=0:1/fs:1;
x=sin(2*pi*fo*t);
y=sin(2*pi*fo*(t+delay)); %time delay 0.01s 

[xr,lag]=xcorr(x,y);
[mx,mind]=max(abs(xr));
delay_eva=lag(mind);
disp(sprintf('Actual sample delay is %d', delay_eva));
disp(sprintf('Actual time delay is %d', delay_eva*(1/fs)));

danke für eure hilfe...

Autor: peter26 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi ...

Is jetzt nur eine spontane Idee aber du könntest das Signal einfach 
interpolieren ... damit erhält du jedoch natürlich wieder eine 
Quantisierung.

Wenn du wirklich reine Sinussignal ohne Rauschen hast dann müsste das 
ganze auch über die Phase funktioniern, da die Phasenwerte, wenn ich 
mich nicht täusche kontinuierlich sind.  D.h ... fft -> und 
Phasendifferenz berechnen -> phase unwrap.


Hoffe die Ideen funktioniern auch ;-)

lg Peter

Autor: Gringo E. (gringo84)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit der interpolation plus kreutzkorelation hat es auch nicht 
funktioniert.

Die perfekte Lösung war von beiden Signalen fft, und dann über die 
Winkeldifferenz:

(fs/fo)*(1/2pi)*winkelunterschied = anzahl samples differenz

cheerio gringo

Autor: peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi ... supa, mi würd aber irgendwie auch brennend interessiern wie ma 
des anstellt wenn des signal rauscht. Ich meine den Betragsgang könnt ma 
ja über ein Periodiogram  mitteln aber i hab keine Ahnung was dabei mit 
der Phase passiert.

lg
Peter

Autor: Gerrit Buhe (gbuhe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gringo,

in der Praxis wird das in einer klassischen PLL (Phase Locked Loop) im 
Zeitbereich erledigt, indem ein Mischer/Multiplizierer als 
Phasenvergleicher eingesetzt wird. Da das Ergebnis auch eine 
Frequenzkomponente bei der Summenfrequenz hat, muß diese mit einem 
Tiefpassfilter unterdrückt werden. Das könnte in Matlab ungefähr so 
aussehen:

PDout = x.*y;                             %phase detector
a = 0.001;                                %filter coefficient for 
simplest IIR low pass filter
PDoutf = filter(a, [1 -(1-a)],PDout);     %low pass filter

Der gefilterte Gleichanteil entspricht der Phasenverschiebung der beiden 
Eingangssignale und kann dann in ganze und Bruchteile von Abtastperioden 
umgerechnet werden. Es ergibt sich ein Offset von genau Pi/2, die 
berücksichtigt werden müssen. Die Einschwingzeit des Tiefpaßfilters ist 
natürlich von seiner Grenzfrequenz abhängig und begrenzt die 
"Meßgeschwindigkeit". Hier macht es schnell Sinn, ein breiteres Filter 
mit höherer Flankensteilheit einzusetzen, damit trotz genügend hoher 
Unterdrückung der Summenfrequenzkomponente ein schnelles Einschwingen 
realisiert wird.

Am Ende ist das natürlich die praktische Realisierung eines Korrelators 
im Zeitbereich.

Viele Grüße!

Gerrit, DL9GFA

P.S.
Bei verrauschten Signalen sollte man Bandpass-Filter in beide Pfade vor 
dem Phasenvergleich einsetzen. Aber bitte darauf achten, daß die 
Gruppenlaufzeiten identisch sind. Durch Einsatz identischer Filter ist 
das natürlich automatisch sicher gestellt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.