Frekvensblandare
Skapad: 2024-11-01
Om man tittar i en formelsamling för gymnasiet hittar man under "Trigonometri - Produktformler" eller kanske "Trigonometriska identiteter" följande formel:
2sin α sin β = cos(α - β) - cos(α + β)
Kanske tänker man sig vinklar och trianglar på gymnasiet och inte så mycket signalbehandling, men sinus är sinus och cosinus är fasförskjuten sinus.
Om vi låter α och β beskriva sinusvågor av olika frekvens,
sin α = sin(2πf1t)
sin β = sin(2πf2t)
och förenklar,
sin α = sin f1
sin β = sin f2
så ser vi att multiplikation av två sinusvågor resulterar i två andra sinusvågor vars frekvens är skillnaden respektive summan av frekvensen på de två ingående sinusvågorna.
Om vi har två signaler på 15 respektive 10 Hz och multiplicerar dem borde skillnadsprodukten hamna på 5 Hz och ha halva amplituden.
Om vi ritar upp multiplikationen och skillnadsprodukten och förskjuter skillnadsproduktens amplitud och delar in x-skalan i 1/25-dels sekunder så ser vi en intressant bild framför oss:
import matplotlib.pyplot as plt import numpy as np f1 = 15 f2 = 10 t = np.arange(0, 1, 1/1000) s1 = np.cos((2*np.pi*(f1-f2)*t))/2 + 0.5 s2 = np.sin(2*np.pi*f1*t) * np.sin(2*np.pi*f2*t) plt.plot(t, s1, label="sin(f1-f2)/2 + 0.5") plt.plot(t, s2, label="sin f1 * sin f2 ") xs = np.arange(0, 1, 1/25) plt.xticks(xs, [str(xs[i]) if i%5 == 0 else "" for i in range(xs.shape[0])]) plt.grid() plt.xlabel('tid(s)') plt.ylabel('amplitud') plt.legend() plt.plot() plt.savefig('diff.png')
Om vi gör en diskret fouriertransform på sin f1 * sin f2 kan vi visualisera det i amplitud som en funktion av frekvens istället för av tid.
import matplotlib.pyplot as plt import numpy as np from numpy.fft import fft N = 1000 f1 = 15 f2 = 10 t = np.arange(0, 1, 1/N) f_t = np.sin(2*np.pi*f1*t) * np.sin(2*np.pi*f2*t) ff_t = fft(f_t) ft = np.linspace(0, 49, 50) plt.plot(ft, 2.0/N * np.abs(ff_t[:50]), label="fft(sin f1 sin f2)") plt.xticks(np.arange(0, 50, 5)) plt.xlabel('frekvens(Hz)') plt.ylabel('amplitud') plt.grid() plt.legend() plt.plot() plt.savefig('freqs.png')
TODO: Sinusvåg plus fyrkantsvåg