Electrokit Buggfix Plus
Aktuellt datum och tid: 09.14 2020-02-17

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 71 inlägg ]  Gå till sida Föregående  1, 2, 3, 4, 5  Nästa
Författare Meddelande
InläggPostat: 15.21 2019-12-13 

Blev medlem: 08.04 2012-06-19
Inlägg: 608
Ort: Lund
Gött att du fick rätt på Hammingkoden!

En RS _encoder_ är relativt "enkel". (Avkodning är lite värre, vi kan spara den till senare.) Det en encoder gör är att beräkna värdet på ett polynom

P = x0 + x1*a + x2*a*a + x3*a*a*a ...

där x0...xN är din indata och a är en konstant. Denna beräkning utförs för några olika konstanter a och resultaten är "paritetsinformationen". I ditt fall har du tre paritetsord.

Alla beräkningar sker i en Galoiskropp, där ett tal är till exempel åtta bitar, addition motsvaras av bitvis exor, och multiplikation görs via tabelluppslag. Notera att a*a*a... typiskt beräknas rekursivt för polynomet ovan, så inga exponeringar behövs.

Okulärt ser kodsnuttarna "lika" ut. Kan du inte snabbt bara printa de tre variablerna i "parity" för några iterationer? På ormspråk heter det "print()" :-)


Upp
 Profil  
 
InläggPostat: 15.33 2019-12-13 

Blev medlem: 08.04 2012-06-19
Inlägg: 608
Ort: Lund
Jag laddade ner pythonfilen och den går att köra rakt av.
Med en print här:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
        dbyte = _msg[i] ^ parity[NPAR - 1]       
        print(dbyte)
        for j in range(NPAR - 1, 0, -1):

Får jag följande output:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
Original Message:            001020000c302f9be5
Masked Parity Should be:     da4d5a
0
16
192
83
218
75
110
2
118
Calculated Masked Parity is: dad45a


Upp
 Profil  
 
InläggPostat: 17.20 2019-12-13 
EF Sponsor
Användarvisningsbild

Blev medlem: 00.19 2005-03-30
Inlägg: 4855
Ort: Landskrona
Nu är det löst.
Ormtjusaren hade valt ett onödigt stökigt sätt att implementera det på. Dessutom kastat om de två mellersta nibbles i jämförelsevärdet.
Hade gjort en idiottabbe i den magiska multiplikationen, men där är mera fel än det.
Hittade en annan variant och den fungerade. Blev först yr av nämnda typo, men nu funkar det. Börjar närma sig, men mycket återstår...

for (i = 0; i < 9; i++) {
feedback = msg[i] ^ cksum[0];
cksum[0] = cksum[1] ^ galois_mult(genpoly[2], feedback);
cksum[1] = cksum[2] ^ galois_mult(genpoly[1], feedback);
cksum[2] = galois_mult(genpoly[0], feedback);
};


Upp
 Profil  
 
InläggPostat: 17.25 2019-12-13 

Blev medlem: 08.04 2012-06-19
Inlägg: 608
Ort: Lund
Ja det där var ju enklare och tydligare på alla sätt!


Upp
 Profil  
 
InläggPostat: 11.03 2019-12-17 
EF Sponsor
Användarvisningsbild

Blev medlem: 00.19 2005-03-30
Inlägg: 4855
Ort: Landskrona
Har kommit en bit längre nu, men fastnat på en ny checksumma. Allt innehåll är nu klart vad det skall vara och inkommnde "embedded data" läses av. Det är en blandning av addressblock och en liten textsträng som kan konfigureras av användaren.

Det följande är BLAJ!

Vad det än är utöver sync eller null så skall det ha en sådan här:
ETSI TS 102 361-1 B.3.2 Quadratic residue (16,7,6)

G(x) = x8 + x5 + x4 + x3 + 1 = 4718
Bilaga:
qr-16-7-6.jpg


Mycket tacksam för en steg,för,steg anvisning hur den tas fram. Det finns ett polynom och en ruta med en matris i dokumentet. Hur det skall resultera i 5 checkbits är dessvärre bortom vad min kvarvarande IQ kan få ihopa
...

/BLAJ!

Ber om ursäkt för mitt misstag. Denna checksumma gäller ett 7-bit kontrollfält och kan läsas från tabell, eller hela klumpen ligga färdig i de 4 varianter som krävs.

Det stora datafältet är en aritmetisk checksumma %31 (trettioett) för att få de 5 bits...


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
InläggPostat: 22.30 2019-12-18 

Blev medlem: 08.04 2012-06-19
Inlägg: 608
Ort: Lund
Och här är man på gång:-) Så RS-encodern behövdes alltså inte?


Upp
 Profil  
 
InläggPostat: 10.22 2019-12-19 
EF Sponsor
Användarvisningsbild

Blev medlem: 00.19 2005-03-30
Inlägg: 4855
Ort: Landskrona
Jodå, RS-encodern behövs för att skapa header/terminator och de innehåller föränderlig info och kan inte tas från tabell. Alla dataframes skall ha denna. Kommer antagligen även att behövas för annan data när det blir aktuellt. En dataframe tycks alltid innehålla en sync från tabell i platsen för embedded data.

När något däremot fragmenteras i 4 delar och går som embedded i en serie voiceframes så är RS utbytt mot ovan nämnda checksumma.

Voice sänds i grupper om 6 frames. Första har en sync, nästa fyra embedded data och sista null. Kring embedded data finns info om det är ensamt, första, mitt i eller sista block Där finns även "color code" som separerar nät som kan höra varandra. Inte aktuellt via internet. Därför behövs inte quadratic residue, enklare med tabell för de fyra alternativen.

Nu är alla checksummor och "bitsnurror" klara och verifierade, men återstår ändå en hel del än innan det är klart att sända. Bl.a. BM's egen header och att kombinera ihop allt.

Även audiobuffringen måste det göras något åt. Har en alldeles för lång cirkulär buffer på 4 sek. och ändå problem. Det låter helt rätt, men blir täta hack där taltid försvinner ca 10 (8?) sek åtskilda som om inpekaren körde över utpekaren. Det är ju omöjligt för det borde låta sk*t om vocoder och uppspelare inte har samma format. Blir helt yr av denna buffring.


Upp
 Profil  
 
InläggPostat: 07.53 2019-12-20 
EF Sponsor
Användarvisningsbild

Blev medlem: 00.19 2005-03-30
Inlägg: 4855
Ort: Landskrona
Nu har jag tagit tag i buffringsproblemet och loggat till fil vad som sker. Problemet är att det råder en brutal osynk mellan vocoder och ljudkort. Det kommer in samples mycket fortare än de spelas upp med resultat att ringbuffern "biter sig i svansen".

Skillnaden är stor. Det år 8k/s 16-bit samples och buffern är 64k. På ungefär 360ms växer slacken med drygt 1k.

Det här är ett problem jag aldrig haft anledning att fundera på, men måste ju finnas vid all uppspelning av streams. Alltså finns det även en väl utvecklad lösning. Hur och var? Hands on, inget universitetsprat.


Upp
 Profil  
 
InläggPostat: 05.10 2019-12-21 
EF Sponsor
Användarvisningsbild

Blev medlem: 00.19 2005-03-30
Inlägg: 4855
Ort: Landskrona
Skampålen nästa... Jag är för gammal nu antagligen.

Problemet är löst och det var min egen bug, givetvis.
"Övermatade" vocodern som hanterade det som en störd frame och producerade alldeles för många samples utan att det lät sk*t.


Upp
 Profil  
 
InläggPostat: 11.54 2019-12-24 
EF Sponsor
Användarvisningsbild

Blev medlem: 00.19 2005-03-30
Inlägg: 4855
Ort: Landskrona
Nu börjar det bli klart med kommunikationsdelen av programmet. Hade hoppats det skulle bli till jul, men någon bit sitter fortfarande på tvären.

Mottagningen fungerar nu helt som den skall, sedan en kvarglömd rad för teständamål avlägsnats.
Sändningen fungerar så långt att mitt DMR-ID kommer upp på BM's webmonitor, men hörs inte något alls... Antar det räcker med att BM's egen header är OK för detta, även om medföljande DMR-packet smakar pyton.

Antagligen är det en liten småsak som är fel, gäller "bara" att hitta den. Om det vocodern matar ut är OK vet jag inte, ser ut som ren ciphertext, men mönstret av det ändras av ljud i mikrofonen. Kanske måste skriva testkod för att lagra vocoderdata och skicka tillbaka till mottagningsprogrammet.
Sk*t att den kostar drygt 1k, hade behövt två nu.

Nåväl, får fortsätta dissikera DMR-packets medan Ni andra sprätter upp julklappspaket. Hittils har varje bit suttit där (tror jag...) den skall sitta, men något måste ju vara fel.

Skulle behöva en UDP-sniffer som sparar datadelen av packets som två hexnummer per byte. Inte bokstäver eller prickar för nonprintables. Helst inte hellre UDP-overhead. Har ett sk*tprogram för windows som skulle kunna ge referensdata. Kan ju vara själva innehållet i ett block som är fel, även om interleavern snurrar bitsen på rätt sätt. Har aldrig sett en garanterat OK utgående packet, bara inkommande.

Tack för hjälpen så här långt.

God Jul till Er alla!


Upp
 Profil  
 
InläggPostat: 16.34 2019-12-24 
Användarvisningsbild

Blev medlem: 16.35 2010-03-12
Inlägg: 1412
Ort: Smedjebacken
Wireshark bör kunna ge dig den infon du vill ha.
Den sorterar bort de olika headrarna och så kan du visa själva datan som en hexdump.


Upp
 Profil  
 
InläggPostat: 06.53 2019-12-25 
EF Sponsor
Användarvisningsbild

Blev medlem: 00.19 2005-03-30
Inlägg: 4855
Ort: Landskrona
Tack för tipset. Småjobbig, men funkar.

Nu är det testat och allt ser bra ut.

Kom på den lysande iden att köra loopback så programmet avkodar sin egen txstream. Fungerar fint och allt ser OK ut. Tack vare den enorma ljudbuffern från tidigare strul ekar den tillbaka från miken också, därmed är vocoderns sändfunktion och rättvänd vocoderdata verifierat.

Svart magi? Börjar nästan tro det...


Upp
 Profil  
 
InläggPostat: 08.27 2019-12-25 
EF Sponsor
Användarvisningsbild

Blev medlem: 00.19 2005-03-30
Inlägg: 4855
Ort: Landskrona
Julens mirakel! Sk*ten funkar...

Fick en plötslig ingivelse. Alla tycks ha en talker ID där första ordet är deras signal. Lade till denna och allt fungerar. Mastern tycks klippa signalen om den saknas. Legala skäl kanske?

Tänk om det hade funnits en vettig spec där allt finns med, klart och entydigt.

Stort Tack till alla som hjälpt till.

Nu återstår UI och tillhyfsning, men alla detaljer är på plats.


Upp
 Profil  
 
InläggPostat: 08.40 2019-12-25 
EF Sponsor
Användarvisningsbild

Blev medlem: 00.19 2005-03-30
Inlägg: 4855
Ort: Landskrona
Har nog fel där, nägon (som läser här?) sände precis utan detta attribut. Däremot fanns dessa PDU's i sändningen, alla fyra, men utan text.


Upp
 Profil  
 
InläggPostat: 10.01 2019-12-25 

Blev medlem: 08.04 2012-06-19
Inlägg: 608
Ort: Lund
Det funkar! Men det verkar vara en standard med många hörn. Jag brukar göra som du, ordna med loopback först. Man kan köra loopback på varje komponent för sig först, för att snabba upp debug, tex vocoder för sig, interleaver för sig osv... Därefter är det så snabbt som möjligt riktig signal som gäller. Och du är ju där nu. Frågan nu är alltså hur mycket av standarden du behöver täcka för att ta emot "allt".


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 71 inlägg ]  Gå till sida Föregående  1, 2, 3, 4, 5  Nästa

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 1 gäst


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010