SDR Spektrum-Anzeige


Signale im 49-m-Band

Ein Quadraturmischer erlaubt es, das Spiegelsignal vom Nutzsignal zu trennen. Wie geht das nur, habe ich mich immer gefragt. Der Artikel von Gerald Youngblood zeigt, wie es geht! Man nehme eine komplexe FFT und setze das Zeitsignal in ein Frequenzsignal um. Mit 2048 I/Q-Samples bei 48 kHz erhält man 4096 Frequenzkanäle, die sauber zwischen -24 kHz und +24 kHz liegen.

Für die FFT-Versuche verwende ich ein fertiges Basic-Modul von Murphy McCauley. Damit ist alles ganz einfach:

Sub FourierTransform(NumSamples As Long, RealIn() As Single, ImageIn() As Single, RealOut() As Single, ImagOut() As Single, Optional InverseTransform As Boolean = False)

Man übergibt also die FFT-Breite (2048) und zwei Puffer mit Samples (Single1, Single2) und erhält das Ergebnis in zwei weiteren Puffern (Single3, Single4) zurück. Optional kann man auch eine inverse FFT durchführen, also Frequenzen übergeben und die zugehörigen Sampledaten zurückbekommen.

Dim Single1(0 To NFFT - 1) As Single   'FFTin Samples In Buffer
Dim Single2(0 To NFFT - 1) As Single 'FFTin Samples In Buffer
Dim Single3(0 To NFFT - 1) As Single 'FFTout Samples In Buffer
Dim Single4(0 To NFFT - 1) As Single 'FFTout Samples In Buffer

Sub DSP()
Dim I, j, n
If Multiplier < 1 Then Multiplier = 1
For n = 0 To BLKSIZE - 1
Single2(n) = inBuffer(n * 2) / 32768 'De-interleave Channel1
Single1(n) = inBuffer(n * 2 + 1) / 32768 'De-interleave Channel2
Next n

FourierTransform NFFT, Single1(), Single2(), Single3(), Single4()

For n = 0 To 8
Picture1.Line (34 + 43 * n, 125)-(34 + 43 * n, 140)
Next n

For n = 0 To 205
j = Abs(Single3(n * 10))
Picture1.Line (n + 205, 120)-(n + 205, 120 - 1 * j)
'Picture1.Line (n, 0)-(n, 120 - 1 * j), &HFFFFFF
Next n
For n = 205 To 409
j = Abs(Single3(n * 10))
Picture1.Line (n - 205, 120)-(n - 205, 120 - 1 * j)
'Picture1.Line (n, 0)-(n, 120 - 1 * j), &HFFFFFF
Next n

FourierTransform NFFT, Single3(), Single4(), Single1(), Single2(), True
For n = 0 To BLKSIZE - 1
Single1(n) = Single1(n) + Single2(n)
Single1(n) = Single1(n) * Multiplier
If Single1(n) > 1 Then Single1(n) = 1
If Single1(n) < -1 Then Single1(n) = -1
outBuffer(n * 2) = Int(Single1(n) * 10000)
outBuffer(n * 2 + 1) = outBuffer(n * 2) 'interleave L and R
Next n
End Sub

In der Sub DSP werden nicht nur Signale analysiert, sondern auch neu erzeugt. Die Frequenzpuffer Single3 und Single4 werden dazu mit der inversen FFT in die ursprünglichen Daten zurückgerechnet. Und tatsächlich: Man hört genau das, was am Eingang der Soundkarte steht. Auch hier wieder wird die Verstärkung eingestellt. Das akustische Ergebnis ist also identisch mit dem im ersten Versuch DSP1. Aber das waren wieder zwei Schritte vorwärts. Denn erstens ist jetzt klar, dass FFT und inverse FFT zusammen das Original wiederherstellen können, und zweitens ist bewiesen, dass die Rechenzeit dafür nicht zu lang ist, jedenfalls für einen ausreichend schnellen PC mit 3 GHz. In den folgenden Schritten kann man also versuchen, nur Teilbereiche aus dem Spektrum zu verarbeiten. Damit kann man dann Filter und Mischer bilden.

Download Exe und Quelltext (DSP2_Spec.zip, 14 KB)