I/T5 - WS 04/05 CR – Übung 6 Termin: 10.-14.12.04
Approximation einer harmonischen Schwingung
Bei der Übertragung von Daten wird häufig als Trägerfunktion eine harmonische Schwingung benutzt, der das eigentliche Datensignal überlagert wird ("Modulation"). Zum Abhören einer Datenleitung mit einem Scanner ist es deshalb nötig, zunächst Frequenz, Amplitude und Pha- se der Trägerfunktion festzustellen.
Formeln zur harmonischen Schwingung:
( ) sin( ) cos( ) sin( )
g t = + ⋅a A qt+ϕ = +a b qt +c qt
y
A Amplitude
φ Phase(nverschiebung) p Periode
q Frequenz a Pegel A
Zusammenhänge:
² ² arctan
A b c
c ϕ b
= +
= ⎛ ⎞⎜ ⎟
⎝ ⎠
cos( )
sin( ) b A
c A ϕ ϕ
= ⋅
= ⋅
Sie sollen ein MatLab-Programm entwickeln, das aufgrund solcher Messwerte die Parameter a,b,c,q einer harmonichen Trägerfunktion g t( )= +a bcos( )qt +csin( )qt näherungsweise er- mittelt und anschließend von den Abtastwerten die entsprechenden Werte der Trägerfunktion subtrahiert, um das eigentliche Signal herauszufiltern und sichtbar zu machen. Leider ist die- ses Problem nur in den Parametern a,b,c linear, nicht aber in q. Zur Lösung bietet sich also eine Kombination zwischen linearer Ausgleichsrechnung und iterativer Minimumsuche an:
Bei fest vorgegebenem Schätzwert q kann man die optimalen Parameter a,b,c, aus den Mess- werten bestimmen, indem man diese der Reihe nach in die Formel für die Funktion g einsetzt,
( )n cos( n) sin( n) n
g t = +a b qt +c qt = y , n=1,...,N. Daraus entsteht ein überbestimmtes linea- res Gleichungssystem Bx = yG G
mit Unbekanntem xG=[ , , ]'a b c
, dessen optimale Näherungslö- sung man mit Matlab-Anweisungen leicht berechnen kann. Auf diese Weise kann man auch den Fehler Bx - yG G
als Funktion von q auffassen und berechnen. Schließlich ist q so zu bestimmen, dass dieser Fehler minimal wird.
φ a
t
p 2 q
= π
Im einzelnen soll Ihr Programm folgendes leisten
• Die Funktion crazy(N) ist in der Datei crazy.m formuliert und liefert Ihnen N zufällig erzeugte Abtastwerte eines derart modulierten Signals. Sie finden die- se Datei bei den
( ), 1,..., y= f t t= N
Lösungen und können damit beliebige „Messungen“ durchführen. – Er- zeugen Sie damit einen Vektor yG
mit N = 1000 simulierten Messwerten.
• Verwenden Sie subplot(2,1,1) zur Vorbereitung eines Doppelbildes und zeichnen Sie yG ins obere Bild. Dort soll auch die Nulllinie (t-Achse) erscheinen. Als t-Werte zu yG
dienen einfach die fortlaufenden Nummern der Meßwerte.
• Entwickeln Sie ein function-m-File fqsum.m mit einer Funktion [s,x] = fqsum(q,y), die abhängig von einem vorgegebenen Parameter q die optimalen Parameter G
für unsere Trägerfunktion durch lineare Ausgleichsrechnung bestimmt und als Ergebnis die Quadratsumme
[ , , ]'a b c
= x Bx - y
s= G G
der Fehler in den Abtastwerten liefert. Nur bei Bedarf soll auch als zweiter Ergebnisparameter geliefert werden (nargout kontrollieren). xG
• Was noch fehlt, ist ein Startwert für q. Aus dem Plot der Abtastwerte ist die ungefähre Anzahl p der Perioden des Trägersignals z.B. durch Abzählen der Maxima zu emitteln.
Hieraus ergibt sich ein Schätzwert 2 p
q N
≈ π . – Übrigens: p muss nicht ganzzahlig sein.
• Mit Hilfe der MatLab-Routine fminbnd kann die Frequenz q als Minimalstelle der Funk- tion fqsum berechnet werden. Als Startintervall eignet sich q∈
[
q q1, 2]
mit1
2 ( 0.5
q p
Nπ )
= − und 2 2
( 0.5
q p
Nπ )
= + . - fminbnd berechnet iterativ das optimale q.
• Damit auch die passend zur Minimalstelle q in fqsum ermittelten Parameter
zur Verfügung stehen, muss [s,x] = fqsum(q,y) nach der Minimierung nochmals aufgeru- fen werden.
[ , , ]'a b c
= xG
• Zeichnen Sie die so ermittelte Trägerfunktion ( )g t = +a bcos( )qt +csin( )qt ins vorhan- dene Bild als rote Kurve.
• Subtrahieren Sie die Werte der Trägerfunktion von den Abtastwerten yG
und zeichnen Sie das eigentliche Signal in das untere Bildteil. Verwenden Sie subplot(2,1,2).
• Zum Schluß einige Fehlerkontrollen
− Falls q q= 1 oder q q= 2, ist q wahrscheinlich nicht optimal bestimmt worden. Deshalb soll eine Warnung ausgegeben werden: "Falsche Periodenschätzung". Achtung: „= =“
nicht verwenden! Kontrollieren Sie stattdessen, ob mehr als 4 Dezimalstellen überein- stimmen. – warning und beep benutzen.
− Falls die maximale Amplitude des Signals yG
mehr als das doppelte der Trägerfunktion beträgt, soll eine Warnung ausgegeben werden "Zu große Amplitudenabweichung". - Die Amplitude von ist
g t( )
g t( ) b²+c², die von yG
ist der halbe Abstand vom Minimumal- zum Maximalwert.
− Damit man die gesamte Berechnung mit den selben Daten yG
nochmals durchführen kann, soll die Berechnung in einer Schleife ablaufen. Am Ende soll die Abfrage stehen "Analyse abbrechen ? [y]". Falls die Taste [y] getippt wird, soll das Programm abbrechen, anden- falls ein neuer Schleifendurchlauf erfolgen, in dem man die Periode neu schätzen kann, u.s.w.. (Matlab-Funktionen: input(…,'s') und break).