Skip to content

Ziel dieser Übung ist ein bandbegrenztes Audiosignal in Matlab zu erzeugen und dies auf einem frequenzmodulierten Trägersignal umzuformen und in wave-Form abzuspeichern. Als nächstes wird in einem zweiten Skript in Matlab das bereits modulierten Signal eingelesen und dabei eine Frequenzdemodulation vorgenommen, um dadurch den ursprünglichen Audi…

ComandanteChi/AK2_FM_Modulation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FM-Modulation/Demodulation

Aufgabenstellung

Ziel dieser Übung ist ein bandbegrenztes Audiosignal in Matlab zu erzeugen und dies auf einem frequenzmodulierten Trägersignal umzuformen und in wave-Form abzuspeichern. Als nächstes wird in einem zweiten Skript in Matlab das bereits modulierten Signal eingelesen und dabei eine Frequenzdemodulation vorgenommen, um dadurch den ursprünglichen Audiosignal aus dem bereits modulierten Trägersignal zurückgewinnen zu können.

Theorie:

FM is eine Form der Modulation, bei der die Frequenzänderungen am Trägersignal die Änderung der Information am Basisbandsignal entspricht. Die Amplitude des Signals bleibt dabei konstant. FM ist eine analoge Form der Signalübertragung.

FM-Modulation
Wie der Name schon sagt ist FM in Radioübertragung andewendet. Die andere Anwendungsbereiche sind: Radaren, seismische Erkundung, Telemetrie, Magnetbandaufzeichnung u.s.w.

Vorgehensweise:

  • Es gibt insgesamt zwei Matlab-Skripten: ein Skript für Modulation und einen Zweiten um das Signal zurückgewinnen.
  • FM-Modulation.m führt die FM-Modulation aus und deswegen muss er zuerst ausgefüht sein. Der Signal wird in Audiodatei (mozart_fm.wav) abgespeichert.
  • FM-Demodulation.m demoduliert diesen Signal bzw. gewinnt ihn wieder und speichert ihn als mozart_orig.wav Datei ab.

Durchführung:

FM-Modulation

Lösungskonzept FM Modulation:
Es wird als erstens ein Audiosignal s(t) in Matlab mittels das Befehlskommando audioread() eingelesen.

[v_in, fs] = audioread('./AK2_FM_Modulation/audio/mozart.wav');

Dies wird in seiner Bandbreite auf einen geeigneten Frequenz (Grundfrequenz des frequenzmoduliertenTrägersignals mit Fg = 8 KHz) eingeschränkt. Zu diesem Zweck wurde eine Filterung des Audiosignals mit dem Butterworth Filter (Sperrgrenze bei 8 kHz) vorgenommen, dessen Bode Diagramm im Folgenden dargestellt wurde.


Butterworth Filter

[N,Wn] = buttord(2*fpass/fs, 2*fstop/fs,apass,astop);
[B,A] = butter(N,Wn);

Wie wir schon wissen die Formel für die Frequenzmodulation lautet:

Daher berechnen wir die Phase   . Die Phase ergibt sich aus folgenden Beziehungen:

Im nächsten Schritt geht es um die Erzeugung eines frequenzmodulierten Trägersignals. Dies erfolgt folgendermaßen:

wobei für     gilt:  

In dieser Formel ist ersichtlich, dass sich die Phase des Trägersignal in Abhängigkeit des ursprünglich erzeugten Audiosignals linear verändert. Zur Erzeugung eines frequenzmodulierten Trägersignals wird diese Phasenänderung über die Dauer des Audiosignals berechnet und daraus den Sinus bestimmt.

Dadurch wird die Amplitudeninformation des ursprünglichen Audiosignals in Frequenz-Variation des Trägersignals umgewandelt. In Matlab lässt sich dieses Vorhabens folgendermaßen realisieren:

phi(1) = K*v_out(1)*Ts + wt*Ts;
phi(1) = mod(phi(1),2*pi);
for i=2:1:N   
    phi(i) = phi(i-1) + K*v_out(i)*Ts + wt*Ts;
    phi(i) = mod(phi(i),2*pi);    
end

Am Schluss modulieren wir das Signal, das gesendet werden muss, auf Trägersignal und speichern ihn als mozart_fm.wav Datei ab.

v_fm = sin(phi)
audiowrite('mozart_fm.wav',v_fm,fs);

Wenn wir das FM-Signal Plotten bekommen wir folgenden Graph:


FM-Modulation

Lösungskonzept FM Demodulation:

Zur Demodulation des ursprünglich generierten FM Signals wurde ein zweites Matlab Skript mozart_orig.wav erstellt. Ziel ist durch die Vornahme einer Demodulationsverfahren des ursprünglich erzeugten Audiosignal zurückgewinnen zu können.

[v_in, fs] = audioread('./AK2_FM_Modulation/audio/mozart_fm.wav');

Vorgehensweise:
Als erstens wird das Fm Signal differenziert, um dadurch die Information von Frequenzmodulation FM in die Amplitudenmodulation AM Umwandeln zu können.

v_diff = diff(v_in);

Als Folge dieser Differentiation ergibt sich zum einen ein unmoduliertes Trägersignal    mit dem Grundfrequenz    ,welche keine Information über das Audiosignal enthält. Zum anderen entsteht die Hüllkurve    , welche als Folge der Innere Ableitung die Amplitude des Signals darstellt und gleichzeitig Information über das Audiosignal enthält.

Mittels das Hilbert-Transformators lässt sich das Amplitudeninformation von den restlichen modulierten Trägersignals extrahieren.

Eine einfache (kausale) zeitdiskrete Realisierung eines Hilbert-Transformators erhält man mittels der Fenster-Methode als FIR-Filter der ungeraden Ordnung    durch Abtastung der zeitbegrenzten und zeitverschobenen Impulsantwort    des idealen Hilbert-Transformators mit Abtastperiode    zu.

Eine Realisierung des das Hilbert-Transformators in Matlab erfolgt nachfolgende Formel:

In Matlab lässt sich dieses Vorhabens folgendermaßen realisieren:
for i=1:1:M+1
    hilb_filter_coeff(i) = 1/(pi*(i-M/2-1));
end
hilb_imag = filter(hilb_filter_coeff,1,v_diff);

Ein sogenanntes analytisches Signal    weist Spektralkomponenten nur bei positiven Frequenzen auf. Man gewinnt aus einem allgemeinen reellen Signal    ein zugehöriges analytisches Signal   .


Analytisches Signal

Aus diesem analytischen Signal    kann nun die Amplitudeninformation    extrachiert werden.

In Matlab sind folgende Befehle ausgeführt:

v_diff = cat(1,zeros((M+1)/2,1),v_diff);
hilb_imag = cat(1,hilb_imag,zeros((M+1)/2,1));
v_hilb = v_diff + 1i*hilb_imag;
v_out = abs(v_hilb);

Hilbert Transformation elliminiert die negative Frequenzen und verstärkt die positive Frequenzen. Im Zeitbereich wird die Impulsantwort nach rechts "verschoben". So wird das Signal mit eine gewisse Verzögerung an Empfänger ankommen, aber die Verzögerung in Millisekundenbereich wird der Empfänger kaum merken.

Letzendlich muss das Signal von Trägersignal Frequenzen gefiltert werden. Das Signal wird mit Butterworth gefiltert.

apass = 1.;    % max. Dämpfung im Durchlassbereich
astop = 50;     % min. Dämpfung im Sperrbereich
fpass = 6e3;    % Durchlassgrenze
fstop = 8e3;    % Sperrgrenze

[N,Wn] = buttord(2*fpass/fs, 2*fstop/fs,apass,astop);
[B,A] = butter(N,Wn);
v_out = filter(B,A,v_out);

Da am Anfang und am Ende des zurückgewonnen Sigals rauschen vorkommen, waren diese Bereiche abgechnitten. Der Offset des Signals wird auch entfernt und das Signal selber entsprechend skaliert (normalisiert).


Störungen & Offset

v_out = v_out(5000:length(v_out)-5000);
v_out = v_out - mean(v_out);
v_out_max = max(abs(v_out));
v_out = v_out./v_out_max;

Das zurückgewonene Signal wird als mozart_orig.wav abgeschpeichert.

audiowrite('mozart_orig.wav',v_out,fs);

Zum Vergleich sind zwei Audiosignale graphisch dargergestellt. Erstes Signal zeigt die ursprüngliche Audiodatei, zweites zeigt das zurückgewonnene Signal. Auf diesen Abbildungen ist eine optische Ähnlichkeit sichtbar.


Vergleich
Vergleich

About

Ziel dieser Übung ist ein bandbegrenztes Audiosignal in Matlab zu erzeugen und dies auf einem frequenzmodulierten Trägersignal umzuformen und in wave-Form abzuspeichern. Als nächstes wird in einem zweiten Skript in Matlab das bereits modulierten Signal eingelesen und dabei eine Frequenzdemodulation vorgenommen, um dadurch den ursprünglichen Audi…

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages