SSB-Demodulator in VB


SSB-Demodulator für das untere Seitenband

Nachdem die Frequenzen sauber getrennt wurden, ist ein SSB-Demodulator ganz einfach. Man nehme einfach einen Bereich heraus und kopiere ihn an den Ausgabebereich ab Null. Alle anderen Frequenzkanäle müssen gelöscht werden. Damit hat man zugleich ein steilflankiges Filter und einen Produkt-Detektor bzw. ZF-Mischer gebildet. Ein zusätzlicher Schieberegler bestimmt die BFO-Frequenz.

Der BFO kann nur in einem Bereich zwischen - 20 kHz und + 20 kHz verschoben werden. Das ist sinnvoll, weil die Bereiche ganz am Rand des Spektrums wegen der endlichen Steilheit des Antialiasing-Filters der Soundkarte falsche Signale entfalten können. Versuche haben gezeigt, dass ein kopierter Bereich immer bei einer geraden Pufferadresse beginnen soll und eine gerade Anzahl lang sein soll, da es sonst zu störenden Übergängen zwischen den aufeinander folgenden Puffern kommt.

Das Programm sollte das untere Seitenband dekodieren, weil starke SSB-Signale vor allem im 80- und 40-m-Amateurfunkband zu hören sind, wo LSB verwendet wird. Einfaches Kopieren brachte zuerst das obere Seitenband. Deshalb wurden der linke und der rechte Eingangskanal bei Kopieren aus InBuffer vertauscht. Damit dann alles passt, musste zusätzlich die Anzeige und der BFO-Schieber umgekehrt werden. Die Spektrum-Anzeige zeigt jetzt logarithmische Pegel, was einen größeren Pegelbereich darstellt. Weiterhin sammelt die Anzeige Signale über längere Zeiten. Das ist vorteilhaft, weil man leichter SSB-Signale entdeckt, auf die man dann mit dem Schieber abstimmen kann. Da sich auf einer Frequenz oft starke und schwache SSB-Stationen abwechseln, erkennt man nach einiger Zeit, welche Frequenzen gerade belegt sind.

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

 FourierTransform NFFT, Single1(), Single2(), Single3(), Single4()
 
 For n = 0 To 2047
   Single1(n + 2048) = Single3(n)
   Single2(n + 2048) = Single4(n)
 Next n
 
 For n = 0 To 2047
   Single1(n) = Single3(n + 2048)
   Single2(n) = Single4(n + 2048)
 Next n
 
 For n = 0 To 8
  Picture1.Line (34 + 43 * n, 125)-(34 + 43 * n, 140)   'Abs(Single3(n * 10)))
Next n

 For n = 0 To 409
  j = 5 * Abs(Single1(n * 10))
  If j <= 1 Then j = 1
  j = Log(j) * 20
  Picture1.Line (409 - n, 120)-(409 - n, 120 - 1 * j)
 Next n
 
 
 For n = 0 To 4095                'delete rest of band
     Single3(n) = 0
     Single4(n) = 0
 Next n
 
 j = 340 + (1700 - HScroll2.Value) * 2
 
 For n = 0 To 206                   'copy narrow band 2,4 kHz
     Single3(n) = Single1(j + n)  '
     Single4(n) = Single2(j + n)
 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

Der SSB-Dekoder unterscheidet sich von anderen üblichen Programmen vor allem dadurch, dass er noch keine ALC besitzt. Stattdessen stellt man den Ausgangspegel per Hand ein. Das ergibt oft einen angenehmeren Klang, weil die plötzlichen Pegeländerungen einer ALC manchmal eher stören.

Download Exe und Quelltext (DSP3_Spec.zip, 15 KB)