Diskrete Hilbert-Transformation

Gast #6188395
Hallo,

ich habe eine Frage zur diskreten Hilbert-Transformation:
https://de.wikipedia.org/wiki/Hilbert-Transformation#Diskrete_Hilbert-Transformation

Warum ist die zeitdiskrete Impulsantwort nicht die abgetastete Version 
der zeitkontinuierlichen Impulsantwort? Wie kommt man sonst auf die 
zeitdiskrete Impulsantwort? Wie könnte man sich das herleiten?

Freue mich über jegliche Tipps.

Schönen Sonntag wünsche ich.
#6188657
Paul schrieb:
> Warum ist die zeitdiskrete Impulsantwort nicht die abgetastete Version
> der zeitkontinuierlichen Impulsantwort?

Das muss im Allgemeinen nicht so sein, und damit auch nicht bei der 
Hilberttransformation.

Vom Zeitkontinuierlichen ins Zeitdiskrete gibt es mehrere Wege, 
beispielsweise Bilineartransformation, impulsinvariante Transformation, 
matched z-Transformation und vermutlich noch weitere.
Diese Transformationen überführen die Pole und Nullstellen eines 
zeitkontinuierlichen Systems in die zeitdiskrete Welt, unter 
Beibehaltung verschiedener Eigenschaften. Die impulsinvariante 
Transformation zb. heisst so, weil die Impulsantwort durch diese 
Transformation beibehalten wird. Dafür können beim Frequenzgang 
Abweichungen entstehen und die Sprungantwort kann anders aussehen.
Bei der Bilineartransformation wiederum bleibt die Sprungantwort mehr 
oder weniger gleich, während die Impulsantwort und der Frequenzgang 
abweichen können.
Je nach dem, welche Eigenschaften einem wichtig sind, muss man eine 
andere Transformation anwenden und kommt daher auch auf andere 
Impulsantworten.
Gast #6188812
Hallo Tobias,

Danke für die Antwort, das leuchtet mir nun ein.
Aber wie kann man sich dann die zeitdiskrete Impulsantwort der 
Hilbert-Transformation herleiten?
#6188909
Paul schrieb:
> Aber wie kann man sich dann die zeitdiskrete Impulsantwort der
> Hilbert-Transformation herleiten?

darüber habe ich jetzt nicht nachgeforscht, aber ich vermute dass man 
zB. die Impulsantwort der kontinuierlichen Hilberttransformation nehmen 
kann und eine der üblichen Umrechnungen ins Diskrete anwendet.

In dem Beispiel hier

https://www.dsprelated.com/freebooks/sasp/Hilbert_Transform_Design_Example.html

wird die Fenstermethode angewandt.
Gast #6188971
Hallo,

ok, dann akzeptiere ich das mal so. Ich habe nun ein bisschen mit Octave 
experimentiert:

Der Plot zeigt in Blau ein cos-förmiges Eingangssignal, in Rot die (per 
FFT berechnete) Hilbert-Transformierte dazu und in Gelb die per Faltung 
berechnete Hilbert-Transformierte.
Es scheint im Frequenzbereich alles zu funktionieren, jedenfalls sehe 
ich die 90° Phasenverschiebung, aber mit der Faltung hat es nicht so 
geklappt. Woran könnte das liegen?
Angehängte Dateien:
Gast #6190754
Hallo,

hat niemand einen Tipp für mich?

Warum funktioniert es mit
1
X = fft(x);
2
Y = S .* X;
3
y = real(ifft(Y));

aber nicht mit
1
s = ifft(S);
2
z = real(conv(s', x'));

?

Die Multiplikation im Frequenzbereich müsste sich doch in eine Faltung 
im Zeitbereich übersetzen lassen, sprich, da müsste das selbe Ergebnis 
rauskommen? Wo ist hier mein Fehler?

Vielen Dank für irgendwelche Tipps!
#6190784
Paul schrieb:
> Die Multiplikation im Frequenzbereich müsste sich doch in eine Faltung
> im Zeitbereich übersetzen lassen, sprich, da müsste das selbe Ergebnis
> rauskommen? Wo ist hier mein Fehler?

stimmt denn dein s überhaupt? es wird natürlich zwangsläufig nie exakt 
stimmen, da die Impulsantwort im Zeitbereich zwangsläufig trunkiert 
werden muss. Dann, als nächstes ist die Impulsantwort nicht kausal, man 
muss also noch, wie in dem dsprelated Link oben genannt, einen Delay 
einfügen, womit das Resultat dann auch diesen Delay beinhaltet, sprich 
phasenverschoben ist.
Gast #6191374
Hallo,

naja, das s[n] ist ja einfach ifft(S[k]) und das S[k] verwende ich ja um 
per Multiplikation im Frequenzbereich die Hilbert-Transformierte zu 
berechnen (und das funktioniert ja, siehe rote Kurve).

Warum geht es per Faltung nicht? Wie viel Delay muss ich einfügen und 
warum benötige ich keinen Delay wenn ich es per FFT berechne?

Viele Grüße,
Paul
#6191388
Hast du denn schon mal die Impulsantwort deines Hilbertfilters 
angeschaut? also dein ifft(S). Das liefert nämlich nicht genau das, was 
du haben möchtest, denn es liefert das Spektrum zentriert um fs/2 und 
nicht um 0.

der code
1
f = 1e6;
2
T = 1/f;
3
fs = 1/(10*T/1000)
4
t = (0:(1/fs):(10*T))';
5
x = cos(2*pi*f*t);
6

7

8
for i = 1:length(x)
9
  if i < (length(x)/2)
10
    S(i,1) = -1j;
11
  else
12
    S(i,1) = 1j;
13
  end;
14
end;
15

16
% builtin hilbert transform
17
y1 = imag(hilbert(x));
18

19
% transform in the frequency domain
20
X = fft(x);
21
Y2 = S.*X;
22
y2 = real(ifft(Y2));
23

24
% transform using convolution
25
s = fftshift(ifft(S));
26
y3 = conv(s,x);
27
y3 = y3(1:length(s));
28

29
plot(t,x,t,y1,t,y2,t,y3)

liefert 3 gleiche Kurven. Bei der Faltung muss man aufpassen, da das 
Faltungsprodukt y3 länger ist als die beiden gefalteten Vektoren s und x 
muss man da was abschneiden.

Schaue einmal den Vektor s mit und ohne die Operation fftshift an.
Gast #6192526
Hallo Tobias,

wow, super, vielen Dank, genau daran lag es, fftshift!
Ok, dass die Funktion fft() ein Spektrum liefert, bei welchem die 
positiven Frequenzen am Anfang (also "links") liegen und die negativen 
Frequenzen am Ende (rechts von der Mitte), das war mir bekannt.
Aber dass es mit ifft() auch so ein Problem gibt, daran habe ich nicht 
gedacht.

Vielen Dank für die Geduld und die Erklärungen!

Gruß,
Paul

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.