Kysymys:
Suodatus PSK31-demodulaatiota varten
Phil Frost - W8II
2017-06-05 19:05:27 UTC
view on stackexchange narkive permalink

Mikä on ihanteellinen suodatin PSK31-demodulaatioon? Eli jotain, joka minimoi ISI: n, samalla kun sillä on kapea kaistanleveys vierekkäisten kanavien hylkäämiseksi, kun taas kohtuudella sovitetaan yhteen?

Useimmat PSK-tilat käyttävät juuren korotettua kosini-pulssimuotoa, joten vastaanotin voi yhdistää vastaanotetun signaalin identtisellä suodattimella, joka on sitten sekä täydellisesti sovitettu että nolla-ISI. PSK31 käyttää kuitenkin yksinkertaisesti korotettua kosini-kirjekuorta, mikä luultavasti tarkoittaa toisen asteen epäjatkuvuutta jokaisessa siirtymässä 0: n ja 1: n välillä, mikä lisää varattua kaistanleveyttä, eikä myöskään sopiva vastaanottosuodatin ole niin ilmeinen. G3PLX kuvaa:

Huomaa, että lähettimen ja vastaanottimen suodattimet on "sovitettava" toisiinsa, jotta ISI-suorituskyky olisi oikea. Jotkut tällaiset järjestelmät käyttävät paria samanlaisia ​​vastaanotto- ja lähetyssuodattimia, jotka on sovitettu yhteen. Jos tein tämän ja joku muu halusi parantaa suorituskykyä, heidän olisi saatava kaikki muut vaihtamaan lähetyssuodattimensa. Siksi olen päättänyt käyttää lähettimen yksinkertaista kosini-muotoa ja sovittaa sen vastaanottimessa olevaan muotoon. Tämä jättää muille mahdollisuuden kehittää parempia vastaanottimia ilman, että uudet lähettimet ovat ristiriidassa vanhojen kanssa. Tämä eroaa hieman SP9VRC-lähestymistavasta.

Muutamat toteutukset, jotka olen voinut tutkia, käyttävät joukkoa muita suodattimia, jotka on kopioitu jostakin muusta toteutuksesta, tai älä sano tarkasti mitä suodatus on.

Onko näistä suodattimista tarkkoja tietoja? Tai vastaavasti, miten voisi suunnitella tällaisen suodattimen?

Mielestäni voi olla hyödyllistä mainita PSK31: n lähetyssuodattimesta kaivamasi tiedot; ellei muuta, korostetaan, että RRC ei ole ilmeisen oikea vastaus.
Kaksi vastused:
Marcus Müller
2017-06-05 20:01:16 UTC
view on stackexchange narkive permalink

SNR: n maksimoimiseksi käytät siis sovitettua suodatinta (joka on aikakäänteisen TX-pulssinmuodostussuodattimen konjugaattikompleksi) ja olettaen, että pulssin muotoilija on kohtuullisesti valittu, se olisi myös ISI-minimoiva suodatin.

Nyt psk31.txt alkuperäisestä DOS-ohjelmasta sanoo

Ratkaisu on suodattaa tulos tai muotoilla kirjekuori jokaisen bitin amplitudi, joka on sama asia. PSK31: ssä käytetään kosinin muotoa. Jos haluat nähdä, mitä tämä tekee aaltomuodolle ja spektrille, harkitse jatkuvan napaisuuden vaihtamisen lähettämistä 31 baudilla. Kosinin muotoilun myötä kirjekuori näyttää lopulta täyden aallon tasoitetulta 31 Hz: n vaihtovirralta.

Lähetyssuodatin on siis puoliksi kosini. (Ei RRC. Olen juuri korjannut wikipedia-sivun - siinä sanottiin RRC.)

Samassa asiakirjassa ei mainita mikä tarkalleen RX-suodatin on - vain että sen oletetaan olevan "yhteensopiva" ( mikä ei näytä tarkoittavan "kanonista" vastaavaa suodatinta yllä). Kirjoittajan päättely on seuraava:

Huomaa, että lähettimen ja vastaanottimen suodattimet on "sovitettava" toisiinsa, jotta ISI-suorituskyky olisi oikea. Jotkut tällaiset järjestelmät käyttävät paria samanlaisia ​​vastaanotto- ja lähetyssuodattimia, jotka on sovitettu yhteen. Jos tein tämän ja joku muu halusi parantaa suorituskykyä, heidän olisi saatava kaikki muut vaihtamaan lähetyssuodattimensa. Siksi olen päättänyt käyttää lähettimen yksinkertaista kosini-muotoa ja sovittaa sen vastaanottimessa olevaan muotoon.

En voi auttaa, mutta mielestäni tämä on väärä päättely. Matemaattisesti on selvää, että maksimaalinen SNR ilman ISI: tä voidaan vain saada korreloimalla konjugaatin käänteisen TX-suodattimen kanssa - ja se on aika-symmetrinen ja todellinen kosinin tapauksessa suodatin tarkoittaa, että saat saman TX kuin RX-suodatin. Stat - suunnitteluvapautta ei enää ole, kun olet valinnut TX-suodattimen, riippumatta siitä, kuinka valitsit sen.

Voit tietysti korreloida RX-signaalin useita jaksoja (sanotaan 4) kaikkien hypoteettisten permutaatioiden kanssa ja saada parempi SNR - mutta se on paljon enemmän kanavakoodausta kuin modulointia.

Joten, paras mitä voit tehdä on kosini RX; kaikki muu on korkeamman tason virhekorjaus. Sinun pitäisi tehdä tämä virheenkorjaus - ristikko on ystäväsi!

Hyväksyi, että päättely ei näytä olevan aivan vakaa. En ole kuitenkaan varma: Onko kirjekuoren muotoileva modulaattori vastaava minkäänlaiseen pulssin muotoiluun? En voi ajatella mitään pulssimuotoa, jossa niiden sarjan päällekkäisyys lisäisi modulaattorin tuottaman. Jos haluat nähdä tulkintani modulaattorin toiminnasta, olen kirjoittanut sen GNU-radiolohkona: https://github.com/bitglue/gr-radioteletype/blob/master/python/radioteletype/modulators.py# L215
Minulla on seurantakysymys DSP-pinonvaihdosta: https://dsp.stackexchange.com/q/41655/4030
Phil Frost - W8II
2017-06-14 03:08:18 UTC
view on stackexchange narkive permalink

En löytänyt kovin paljon historiaa näistä suodattimista, mutta löysin kaksi suosittujen toteutusten kerroinsarjaa, ja esitän ne mielellänne täällä.

Lähetä suodatus

PSK31-lähettimen lähettämä pulssimuoto on käytännössä korotettu kosini, kaksinkertainen symbolin kestoon. Toisin sanoen voimme kuvitella, että PSK31-lähetin lähettää sarjan impulsseja joko +1 tai -1, sitten suodatetaan FIR-suodattimella, jonka kertoimet ovat korotettu kosini.

Tässä on neljä tällaista pulssia:

transmit pulse shape

Lähetetty signaali on silloin kaikkien näiden pulssien summa. Voimme nähdä, ettei lähetetyssä signaalissa ole ISI: tä, koska yhden pulssin huipussa (ihanteellinen näytteenottopiste) vierekkäisten pulssien amplitudi on nolla.

Lähetettävän pulssin muotoilusuodattimen taajuusvaste määrittää signaalin käyttämä kaistanleveys. Tässä se on:

PSK31 frequency response

Nykyaikaisen standardin mukaan tämä ei ole kovin hyvä. Huomaa lukuisat, hitaasti hajoavat sivulohkot, joista ensimmäinen on vain noin 32 dB alhaalla. Kuten näemme, tämä ei välttämättä vähennä suorituskykyä, jos kaikki taajuusalueella on vain valkoista Gaussin kohinaa. Se aiheuttaa kuitenkin ongelman, kun yritetään pakata useita signaaleja lähelle toisiaan, mikä valitettavasti tapahtuu usein PSK31: n kohdalla.

Hyväksytty suodatin

AWGN-kanavassa maksimoi vastaanottosuodatin signaali-kohinasuhde on sama suodatin kuin lähetyssuodatin 1 : vastaava suodatin . Oletetaan siis, että lähetetyt pulssit kulkevat vastaanottimen sovitetun suodattimen läpi. Niistä tulisi sitten:

matched pulse shape

Huomaa, että vierekkäisten pulssien amplitudi ei ole nolla kunkin pulssin huipussa. Tämä on symbolien välistä häiriötä (ISI). Koska signaali on jokaisen pulssin summa, kun näytteestä otetaan symboli sen määrittämiseksi, onko se 0 vai 1, otamme näytteen paitsi nykyisestä, myös sen vieressä olevista symboleista.

Löysin kaksi suodatintoteutusta, jotka yrittävät puuttua tähän käyttämättä vastaavaa suodatinta vastaanottimessa. Sen sijaan he pyrkivät tekemään pulssin muodon siten, että jokaisessa näytepisteessä on nolla amplitudia vierekkäisistä pulsseista, samalla kun ne pysyvät taajuusvasteessa mahdollisimman lähellä sovitettua suodatinta.

G3PLX-suodatin fldigistä

Ensimmäisen sain fldigiltä, ​​mutta lähteen attribuution perusteella se näyttää olevan peräisin G3PLX: n alkuperäisestä PSK31-toteutuksesta. Jälleen neljä pulssia tämän suodattimen läpäisyn jälkeen:

G3PLX pulse shape

Huomaa, että ISI on enimmäkseen eliminoitu: vierekkäisten pulssien amplitudi on melkein nolla näytteen otettavan pulssin huipulla.

G3PLX-suodattimen (oranssi) taajuusvaste vertailtavaksi vastaavan kotelon (sininen) kanssa:

matched vs G3PLX

Hieman nopeampi roll-off ei välttämättä paranna sitä. Vaikka se voisi tarkoittaa, että vierekkäinen signaali hylätään paremmin, se tarkoittaa myös, että osa lähetetystä signaalienergiasta ei siepata.

Se on myös huomattavasti erilainen muoto yläosassa, missä sillä on eniten merkitystä (koska tämä on missä suurin osa voimasta on). Mikä tahansa muotoero tarkoittaa signaalin ja kohinasuhteen pienenemistä.

PSKCore DLL

Nyt toinen suodatin, joka on peräisin PSKCore DLL: stä. Jälleen pulssin muodot ja taajuusvaste:

pskcore pulse shape

enter image description here
Sininen: sovitettu. Oranssi: PSKCore.

ISI: Ehkä on olemassa jokin toinen ratkaisu?

Nämä kaksi toteutusta uhraavat signaali-kohinasuhteen voidakseen käyttää suodatinta, jolla on vähemmän ISI kuin vastaavalla suodattimella . Voimme kvantifioida tuon häviön normalisoimalla kaikki suodattimet saamaan saman energian energian ollessa niiden kertoimien neliöiden summa. Jos kertoimet ovat $ x_1, x_2, \ pisteet, x_n $, niin:

$$ E = \ sum_ {i = 1} ^ n x_i $$

Jakamalla kukin kerroin $ \ sqrt E $, saamme normalisoidun suodattimen, jossa $ E = 1 $:

$$ {x_1 \ over \ sqrt E}, {x_2 \ over \ sqrt E}, \ pisteet, {x_n \ over \ sqrt E} $$

Tällaista suodatinta varten, jos näytteet edustavat jännitettä, sitten virta sisään = virta pois. Jos tulopulssilla on E = 1, suodatettujen pulssien lähtöimpulssien huippu on:

  • vastaava suodatin: 1
  • G3PLX: 0,9538
  • PSKCore: 0.9711

Näiden muuntaminen tehoksi dB: nä on esimerkiksi $ 20 \ log_ {10} (0.9711) = -0.2547 \: \ mathrm {dB} $, joten muutos SNR: ksi kukin suodatin on:

  • vastaava: 0 dB
  • G3PLX: -0.4109 dB
  • PSKCore: -0.2547 dB

Lisäksi G3PLX- ja PSKCore-suodattimilla on edelleen nollasta poikkeava ISI. Edellä oleva rangaistuslaskelma ottaa huomioon vain valkoisesta Gaussin melusta johtuvan melun vastaanotetussa signaalissa; Suodatuksen jälkeen jäljellä oleva ISI on lisämelu, joka heikentää dekoodauksen tarkkuutta. Seuraavassa on PSKCore-suodattimella dekoodattu bittivirta, jossa ei ole kohinaa ja täydellinen ajoitus:

enter image description here

Ilman ISI: tä tässä olisi vain kaksi riviä, joista jokainen piste olisi täsmälleen 0 tai 1. Kuitenkin, riippuen edellisen ja seuraavan bitin arvosta 0 tai 1, dekoodattu arvo siirtyy tästä ihanteesta .

Mutta tarjoan havainnon: jos tiedämme lähetyssuodattimen (tiedämme) ja vastaanottosuodattimen (voimme valita sen), tunnemme pulssin muodon ja siten ISI: n. Joten jos pulssien amplitudi on nollasta poikkeava muiden pulssien näytteenottopisteissä, tiedämme mikä amplitudi on. Jos tiedämme, mitä vierekkäiset symbolit ovat, voimme vähentää niiden tunnetut vaikutukset ISI: hen ja poistaa ne kokonaan.

Ongelmana on tietysti, että emme tunne vierekkäisiä symboleja, ei vain siksi, että melu tuo epävarmuutta. , mutta vierekkäiset symbolit puolestaan ​​riippuvat seuraavista vierekkäisistä symboleista.

Viterbi-algoritmia voidaan käyttää ongelman ratkaisemiseen laskennallisesti toteuttamiskelpoisella tavalla. Se on monimutkaisempi kuin lineaarinen suodatin, mutta kun otetaan huomioon PSK31: n hidas symbolinopeus, laskennallinen monimutkaisuus on silti triviaali. Sovitetun suodattimen ja Viterbi-ilmaisimen yhdistelmä on optimaalinen AWGN-kanavan tapauksessa. En ole tietoinen PSK31: n nykyisistä dekoodereista, jotka käyttävät tätä tekniikkaa, ja epäilen, että se saattaa olla parannus nykyiseen käytäntöön verrattuna.

Simulointi prototyyppinä AWGN-kanavana, Viterbi-dekoodaus ja vastaava suodatin näytä suorituskyvyn nousu PSKCore-lähestymistavasta.

pskcore and viterbi BER comparison

Vielä on nähtävissä, merkitseekö tämä parannusta todellisessa ympäristössä ajoituksella virheet, monitie, häiritsevät asemat ja niin edelleen.

Liite: suodatuskertoimet

Suodatuskertoimet fldigistä:

  // 4-bittinen vastaanottosuodatin 31,25 baudia varten BPSK // Suunnittelija G3PLX // kaksinkertainen gmfir2c [64] = {0,000625000, 0,000820912, 0,001374651, 0,002188141, 0,003110600, 0,003956273, 0,004526787, 0,004635947, 0,004134515, 0,002932456, 0,001016350, 0,001016352, 0,001016352, 0,001016352, 0,001016352, 0,001016352, 0,001016352, 0,001016352, 0,001016352, 0,01009254, -0,013733305, -0,0115625000, -0,016315775, -0,015483216, -0,012882186, -0,008371423, -0,001933193, 0,006315933, 0,016124399, 0,027115485, 0,038807198, 0,050640928, 0,062016866, 0,072333574, 0,081028710, 0,087617820, 0,091728168, 0,093125000, 0,091728168, 0,087617820, 0,081028710, 0,072333574, 0,062016866, 0,050640928, 0,038807198, 0,027115485, 0,016124399, 0,006315933, -0,001933193, -0,008371423, -0,012882186, -0,015483216, -0,016315775, -0,015625000, -0,013733305, -0,011009254,
-0,007834665, -0,004572751, -0,001539947, 0,001016352, 0,002932456, 0,004134515, 0,004635947, 0,004526787, 0,003956273, 0,003110600, 0,002188141, 0,001374651, 0,000820912};  

pre> // Suodatintyyppi: Monikaistainen suodatin // Suunnittelutapa: Parks-McClellan -menetelmä // Napautusten lukumäärä = 65 // Kaistojen lukumäärä = 2 // Kaistan alempi yläarvo Paino // reunareuna //// 1 0.0 .03125 1. 1.// 2 .0625 .5 .0000 286. # define BITFIR_LENGTH 65const double BitFirCoef [BITFIR_LENGTH * 2] = {// 16 Hz bw LP filter for data recovery 4.3453566e-005, -0.00049122414, -0.00078771292, -0.0013507826, -0.0021287814, -0.003133466, -0.004366817, -0.0058112187, -0.0074249976, -0.0091398882, -0.010860157, -0.012464086, -0.013807772, -0.01401, -0.01401 1099166, -0,0075431246, -0,0029527849, +0,0027546292, +0,0094932775, 0,017113308, 0,025403511, 0,034099681, 0,042895839, 0,051458575, 0,059444853, 0,066521003, 0,072381617, 0,076767694, 0,079481619, 0,080420311, 0,079481619, 0,076767694, 0,072381617, 0,066521003, 0,059444853, 0,051458575, 0,042895839, 0,034099681, 0.025403511, 0.017113308, 0.0094932775, 0.0027546292, -0.0029527849, -0.0075431246, -0.01099166, -0.013333425, -0.014650894, -0.015067057, -0.014731191, -0.013807772, -0.013807772, -0.013807772, -0.013807772, -0 -0.003133466, -0.0021287814, -0.0013507826, -0.00078771292, -0.00049122414, 4.3453566e-005, // 4.3453566e-005, -0.00049122414, -0.00078771292, -0.0013507826, -0.0021287814, -0.003, -0.0013 , -0.0091398882, -0.010860157, -0.012464086, -0.013807772, -0.014731191, -0,015067057, -0,014650894, -0,013333425, -0,01099166, -0,0075431246, -0,0029527849, +0,0027546292, +0,0094932775, 0,017113308, 0,025403511, 0,034099681, 0,042895839, 0,051458575, 0,059444853, 0,066521003, 0,072381617, 0,076767694, 0,079481619, 0,080420311, 0,079481619, 0,076767694, 0,072381617, 0,066521003, 0,059444853, 0,051458575, 0,042895839, 0,034099681, 0,025403511, 0,017113308, +0,0094932775, +0,0027546292, -0,0029527849, -0,0075431246, -0,01099166, -0,013333425, -0,014650894, -0,015067057, -0,014731191, -0,013807772, -0,012464086, -0,010860157, -0,0091398882 , -0.0074249976, -0.0058112187, -0.004366817, -0.003133466, -0.0021287814, -0.0013507826, -0.00078771292, -0.00049122414, 4.3453566e-005};


1 Tai tarkemmin sanottuna aikakäänteinen kompleksinen konjugaattisuodatin. Mutta koska tämä suodatin (kuten useimmat pulssinmuodostussuodattimet) on sekä todellinen että symmetrinen, se toimii samalla tavalla.



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...