Schwebung



Musiker kennen den Effekt beim Stimmen von Instrumenten: Wenn zwei Instrumente nicht ganz den selben Ton spielen klingt das als ob es eine periodische Variation der Lautstärke gibt. Die Periode wird größer je besser die beiden Instrumente gestimmt sind und stoppt wenn beide den selben Ton spielen. Wir nennen diesen Effekt "Schwebung".

Funkamateure kennen den "umgekehrten" Fall dieses Effekts von der Amplitudenmodulation einer Radio-Frequenz mit einer Sinusschwingung im Audio-Bereich: Das Resultat sind zwei Radio Frequenzen, eine um die Audio-Frequenz niedriger als die Modulationsfrequenz, eine um die Audio Frequenz höher.

Amplitudenmodulation ist eine einfache Multiplikation: Wir multiplizieren die Radiofrequenz mit dem Audio, wir haben:

$$m(t) = A(t) \cdot\cos(2\pi f t)$$

Wobei $t$ die Zeit ist, $m(t)$ das amplitudenmodulierte Signal, $\cos(2\pi f_r t)$ ist das Radiofrequenz-Signal mit der Frequenz $f_r$ und $A(t)$ ist das Audiosignal. Für eine einfache Audio Sinusschwingung bekommen wir:

$$m(t) = \cos(2\pi f_a t)\cdot\cos(2\pi f_r t)$$

wobei $f_a$ die Audio-Frequenz ist.

Wir möchten jetzt zeigen, dass beide Effekte das gleiche Ding sind. Wir brauchen keine Radiofrequenzen, wir könnenn das gleiche einfach im Audio-Spektrum tun.

Aus Wikipedia bekommen wir eine trigonometrische Identität über Produkte von Winkelfunktionen, daraus nehmen wir die für zwei Cosinus Funktionen:

$$\displaystyle\cos\theta \cos\phi = \frac{\cos(\theta-\phi) + \cos(\theta+\phi)}{2}$$

Wenn wir die auf unser Modulation-Beispiel anwenden bekommen wir:

$$\displaystyle \begin{align} \ \cos(2\pi f_a t) \cos(2\pi f_r t) & = \frac{\cos(2\pi f_r t-2\pi f_a t) + \cos(2\pi f_r t+2\pi f_a t)}{2} \\ & = \frac{\cos(2\pi(f_r-f_a)t)) + \cos(2\pi(f_r+f_a)t)}{2} \\ \end{align} $$

Die Multiplikation von zwei Cosinus-Schwingungen mit unterschiedlichen Frequenzen resultiert in der Summe von zwei Cosinus-Schwingungen, eine davon die Differenz der beiden ursprünglichen Frequenzen, die andere die Summe.

Egal wie wir das modulierte Signal erzeugen, durch Multiplikation von zwei Signalen oder durch Addition von zwei Signalen, wir bekommen das selbe Resultat.

Im folgenden Beispiel multiplizieren wir ein 3Hz Signal (die Schwebungsfrequenz) mit einem 440Hz Signal (Das ist die Note "A" in der Musik). Wir bekommen wie erwartet ein moduliertes Signal das die Lautstärke mit der Schwebungsfrequenz ändert.

In [1]:
import numpy as np
# Drei Sekunden with 18000 Abtastungen
t = np.linspace (0, 3, 18000)
# Produkt von einer 3Hz Schwingung und einem 440Hz Ton
y = np.cos (2*np.pi*3*t) * np.cos (2*np.pi*440*t)
# Wir plotten nur 1/9 der drei Sekunden = 1/3s = eine Periode des 3Hz Signals
limit = int (2000)
In [2]:
import plotly.graph_objs as go
import plotly.io as pio
from plotly_fix_fn import setup_plotly
setup_plotly ('content/2024/05/plotly', '11-de')
show_opt = dict (include_plotlyjs = 'directory')

fig = go.Figure ()
fig.add_trace (go.Scatter (x = t [:limit], y = y [:limit]))
fig.update_layout (title = "Moduliertes Signal", xaxis_title = "Zeit (s)", yaxis_title = "Amplitude")
fig.show (** show_opt)

Nun machen wir eine Fourier-Transformation des Resultats um das Frequenz-Spektrum zu bekommen. Wir sehen dass das Resultat der Multiplikation aus zwei Frequenzen besteht: Ein 3Hz unter 440Hz, eine um 3Hz darüber.

In [3]:
from numpy.fft import rfft, fftfreq
fft   = rfft (y, norm = 'forward')
freqs = fftfreq (len (y), d = 3/18000)
fig = go.Figure ()
fig.add_trace (go.Scatter (x = freqs [:5000], y = np.abs (fft [:5000])))
fig.update_layout (title = "Frequenz-Spektrum", xaxis_title = "Frequenz (Hz)")
fig.update_xaxes (range = [430, 450])
fig.show (** show_opt)

Wir können das selbe Resultat erzielen wenn wir einfach die beiden Frequenzen addieren (und das Ganze durch zwei teilen damit wir die selbe Amplitute haben)

In [4]:
y = 0.5 * (np.cos (2*np.pi*(440-3)*t) + np.cos (2*np.pi*(440+3)*t))
fig = go.Figure ()
fig.add_trace (go.Scatter (x = t [:limit], y = y [:limit]))
fig.update_layout (title = "Moduliertes Signal", xaxis_title = "Zeit (s)", yaxis_title = "Amplitude")
fig.show (** show_opt)

Schließlich verifizieren wir dass dieses Vorgehen das selbe Audiospektrum erzeugt wie vorher die Multiplikation, wir machen eine weitere Fourier-Transformation des neuen Signals:

In [5]:
fft   = rfft (y, norm='forward')
freqs = fftfreq (len (y), d = 3/18000)
fig = go.Figure ()
fig.add_trace (go.Scatter (x = freqs [:5000], y = np.abs (fft [:5000])))
fig.update_layout (title = "Frequenz-Spektrum", xaxis_title = "Frequenz (Hz)")
fig.update_xaxes (range = [430, 450])
fig.show (** show_opt)

Was wir also beim Stimmen von Instrumenten hören ist keine Illusion: Die Addition von zwei Schwingungen mit unterschiedlichen Frequenzen ist das selbe wie die Modulation eines Tons mit einer Schwebungsfrequenz.