Psk31 Modulointi

PSK31 perusteet

PSK31 on radioamatöörien käyttämä modulointimenetelmä hitaaseen, mutta luotettavaan ASCII merkkein siirtoon. Audio signaali voidaan lähettää normaalilla SSB-lähettimellä millä tahansa sallitulla radiotaajuudella.
Nopeus sopii näppäimistötyöskentelyyn.

PSK31 modulointikantoaalto on 1kHz, bittinopeus 31.25Hz.
Bitin aika on 1/31.25 HZ eli 32 ms.
Tämä arvo tulee FFT:n 8000Hz/256 ( =31.25 Hz) näytteenottotaajuudesta

— 1 bitti —
Jos bitin aikana lähetetään vain suoraa 1kHz kantoaaltoa bitin arvo on "1" ilman amplitudimodulaatiota tai vaiheenkääntöä.

—0 bitti —

Bitin keskellä vaihtuu kantoaallon vaihe 180 astetta ja käytettään cosini^2 amplitudimodulaatiota pienentämään signaali nollaksi vaiheen vaihdon ajaksi bitin arvo on "0".
Katso alla olevaa kuvaa.

Lähettimen lepotila ja merkkien väli on vähintään kaksi "0".
Lähettimen lepotilassa ei tule roskamerkkejä, koska lepotilakin on määritelty. Lepotilassa tulee koko ajan "0" bittejä, ensimmäinen "1" on ensimmäinen merkitsevä bitti koodissa. Kun tulee kaksi "0" peräkkäin koodi loppuu.

PSK31:n yksinkertaisin ja lyhyin merkki on välilyönti sen koodaus on "1".

Pieni t-kirjain on "1","0","1".
Tätä sanotaan varikoodiksi eli ASCII merkeillä on vaihteleva bittipituus
Varikoodi alkaa aina "1", mutta ei lopu koskaan "0".
Varikoodien pituudet ovat 1- 11 bittiä. Kiellettyt koodit kasvattavat koodin pituutta.

Varikoodissa merkkien keskipituus on 6.5 bittiaikaa verrattuna tavalliseen ASCII merkin 10-bittiaikaan.

"0" bitissä vaihe vaihtuu bitin keskellä kun amplitudi on 0, alla kuva

psk31_180.jpg?imgmax=512

Kuva yksinkertaisemmasta varikoodista eli välilyönnistä

psk31.jpg?imgmax=720

PSKFTP.exe

Olen näperrellyt ohjelman joka lähettää PSK31:llä tiedostoja automaattisesti.
-Käsimodessa voit lähettää sanomia näppäimistöltä tai tiedoston sellaisenaan ilman tarkistussummia.
- Automaattimodessa ohjelma odottaa indeksi tiedostoja ohjelman alla olevaan outbox -hakemistoon .
- Indeksi-tiedosto on tavallinen kaksirivinen tekstitiedosto, jossa on kohde tunnus esim. OH3NE eli kenelle tiedosto pitäisi loppujen lopuksi päätyä.
Toinen rivi on tiedoston osoite kuten c:\autoexec.bat tai pelkkä koe.txt .
Siis varsinaista tiedostoa ei tarvitse kopioida eli hävittää kun se on käytetty vain linkki talletetaan datafiles hakemistoon peräkkäiseen lokitiedostoon ( Excel). Samalla talletetaan lisäteittoja kuten tiedoston pituus lähetys aika CRC jne

Lähetys
Ennen tiedoston lähetystä lähetetään aloitustiedot. Siinä on
kuinka monta merkkiä on alkuframessa (#..alku..$)
osoite kenelle,
osoite mistä
koska
mikä tiedoston nimi.
CRC
kuinka monta lähetystä jäljellä jne. ascii-muotoisena
Sitten lähetetään varsinainen tiedosto.
Kun tiedosto on lähtenyt indeksi tiedosto siirretään datafile-hakemistoon ja tehdään lokiin uusi rivi
Katsotaan onko lisää lähetettävää

psk31a.jpg
  • Asetukset
psk31ba.jpg

PSK31 COS2() -modulointikäyrämuto

Miten tehdään prosesossorilla PSK31?

Luodaan keskeytyksellä 1KHz siniä 39215HZ PWM -taajuudella.
39215/8000 = 4,9018 noin 5. Joka viides keskeys haetaan uusi siniarvo sinitaulukosta ja laitetaan se PWM:n.
Tietysti sinitaulukko voitaisiin tehdä viisi kertaa pidemmäksi eli 40 byteä pitkäksi, nyt 8 byteä .
Prosessorin aikaa kuitenkin kannattaa säästää.
Sinisignaalia moduloidaan tai ei moduloida PSK31 varikoodin mukaan.

Tarvitaan 1 kHz amplitudi ja vaihemodulointitaulukot

1khZ signaali *31.25Hz modulaatiosignaalilla. Keskellä 32 ms bittiaikaa vaihdetaan vaihe eli

1. Tehdään äänieditorilla modulointisignaali
luodaan ensin 31.25 pitunen tyhjä ääni
siihen tehdään cos2(x) modulointiifuktio

Goldwaven funtiogeneraattoriin kirjoitetaan kaava :
sin(2*pi*f*t) * cos( 2*pi*f*t/64)^2
Goldwaw tekee näytölle vastaavan äänen.

Talletetaan tämä ääni RAW-muodossa 8-bin mono signaalina 8kHz näytteenottoopeudella

Tehdään binääritiedostosta c-kielen include tiedosto apuohjelmalla

psk31_mod.jpg

--

sin8khz10ms.jpg 1kHz_8sample_360.jpg

// OH3GDO 7.1.2010
// sin käyrä 8kbit samplenopeus 1KHz
char psk31sin1kHz [8]={
0x80,
0xD8,
0xFD,
0xD8,
0x80,
0x25,
0x00,
0x25,
};

psk31_cos2signaalijpg.jpg

GOLDwave-ohjalman funktio luodaan 32ms pitkään tyhjään tiedostoon matemaattisesti
ja talletetaan RAW-modessa tiedostoksi cos2psk.snd
Binääridata muutetaan apuohjelmalla ohjelmalla c-kielen .h-tiedostoksi.
Alla tulos 256 byteä 8bit unsigned mono muodossa

1kHz signaalin 31.25Hz cos2(x) -modulointi funktio on
y (t) = sin(2*pi*f*t) * cos( 2*pi*f*t/64)^2


// sin 1KHZ modulointi käyrä 8KHz sample nopeus 1Khz signaalille

// alku osoite 0x700

#ROM 0x7000 = {
0x80,
0xD8,
0xFD,
0xD8,
0x80,
0x25,
0x00,
0x25
}

// file cos2psk.h amplitudimodulointitalulukko
// COS2(sin) modulointi käyrä 32ms 8 (kHz) * 32ms = 256 näyettä talukossa
// ROM taulukko alkaa 0x4010 kohdasta Koodissa PIC18F2620 piirillä ( 64kB falsh koodi )
#ROM 0x4000 ={
vaihe modullatiokäyrä 31.25ms 1KHZ modulointia varten
8 * 32ms = 256 näytettä , jolla Siniä moduloidaan
#ROM 0x4010 = {
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFE,
0xFE,
0xFE,
0xFD,
0xFD,
0xFD,
0xFC,
0xFC,
0xFB,
0xFB,
0xFA,
0xFA,
0xF9,
0xF8,
0xF7,
0xF7,
0xF6,
0xF5,
0xF4,
0xF3,
0xF2,
0xF2,
0xF1,
0xF0,
0xEE,
0xED,
0xEC,
0xEB,
0xEA,
0xE9,
0xE8,
0xE6,
0xE5,
0xE4,
0xE3,
0xE1,
0xE0,
0xDF,
0xDD,
0xDC,
0xDB,
0xD9,
0xD8,
0xD6,
0xD5,
0xD3,
0xD2,
0xD0,
0xCF,
0xCD,
0xCC,
0xCA,
0xC9,
0xC7,
0xC5,
0xC4,
0xC2,
0xC1,
0xBF,
0xBE,
0xBC,
0xBB,
0xB9,
0xB7,
0xB6,
0xB4,
0xB3,
0xB1,
0xB0,
0xAE,
0xAD,
0xAB,
0xAA,
0xA8,
0xA7,
0xA5,
0xA4,
0xA3,
0xA1,
0xA0,
0x9E,
0x9D,
0x9C,
0x9B,
0x99,
0x98,
0x97,
0x96,
0x94,
0x93,
0x92,
0x91,
0x90,
0x8F,
0x8E,
0x8D,
0x8C,
0x8B,
0x8A,
0x89,
0x89,
0x88,
0x87,
0x86,
0x86,
0x85,
0x84,
0x84,
0x83,
0x83,
0x82,
0x82,
0x81,
0x81,
0x81,
0x80,
0x80,
0x80,
0x80,
0x80,
0x80,
0x80,
0x80,
0x80,
0x80,
0x80,
0x80,
0x80,
0x80,
0x80,
0x81,
0x81,
0x81,
0x82,
0x82,
0x83,
0x83,
0x84,
0x84,
0x85,
0x86,
0x86,
0x87,
0x88,
0x89,
0x89,
0x8A,
0x8B,
0x8C,
0x8D,
0x8E,
0x8F,
0x90,
0x91,
0x92,
0x93,
0x94,
0x96,
0x97,
0x98,
0x99,
0x9B,
0x9C,
0x9D,
0x9E,
0xA0,
0xA1,
0xA3,
0xA4,
0xA5,
0xA7,
0xA8,
0xAA,
0xAB,
0xAD,
0xAE,
0xB0,
0xB1,
0xB3,
0xB4,
0xB6,
0xB7,
0xB9,
0xBB,
0xBC,
0xBE,
0xBF,
0xC1,
0xC2,
0xC4,
0xC5,
0xC7,
0xC9,
0xCA,
0xCC,
0xCD,
0xCF,
0xD0,
0xD2,
0xD3,
0xD5,
0xD6,
0xD8,
0xD9,
0xDB,
0xDC,
0xDD,
0xDF,
0xE0,
0xE1,
0xE3,
0xE4,
0xE5,
0xE6,
0xE8,
0xE9,
0xEA,
0xEB,
0xEC,
0xED,
0xEE,
0xF0,
0xF1,
0xF2,
0xF2,
0xF3,
0xF4,
0xF5,
0xF6,
0xF7,
0xF7,
0xF8,
0xF9,
0xFA,
0xFA,
0xFB,
0xFB,
0xFC,
0xFC,
0xFD,
0xFD,
0xFD,
0xFE,
0xFE,
0xFE,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF
};

OH3GDO Pekka

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License