Svenska ElektronikForumet
http://elektronikforumet.com/forum/

Dekoda pulståg i Audacity
http://elektronikforumet.com/forum/viewtopic.php?f=10&t=88951

Författare:  Magnus_K [ 22.58 2017-10-07 ]
Inläggsrubrik:  Dekoda pulståg i Audacity

Hej!

Har ett pulståg (se nedan bild) som borde vara 13-bitar långt.
Hur utläser ni pulståget nedan?

Har precis installerat Audacity men inte riktigt hunnit bekanta mig med det än men vet ni om det finns något hjälpmedel, som tex ett justerbart grid eller liknande som kanske underlättar?

Bilaga:
Dekodning.JPG

Författare:  TomasL [ 23.06 2017-10-07 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Vad kommer det i från?

Författare:  Magnus_K [ 23.08 2017-10-07 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

En PT2264 433MHz-sändare.

Författare:  TomasL [ 23.15 2017-10-07 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Ok, så det är standard seriekommunikation då, 8N1

Författare:  Magnus_K [ 23.19 2017-10-07 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Är det inte 12+1?
8-12 adressbitar och 0-4 databitar, eller förstår jag fel?

Författare:  TomasL [ 07.27 2017-10-08 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Det var ju ingen sändare du länkade till utan en RC-encoder.

För att kunna avkoda det hela, behöver du veta klockperioden, då en bit upptar 32 klockpulser.
Diagrammet på sidan 5 i ditt datablad visar detta.
Sedan vet jag inte om ett AC-kopplat ljudkort är så bra för sådana här saker.

Författare:  Kulla [ 09.18 2017-10-08 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Det borde gå importera denna signal i Sigrok och få analys vad är det för något

Författare:  Magnus_K [ 10.04 2017-10-08 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Det jag undrar över är framför allt om det finns någon hjälp i Audacity.
Går det lägga till någon "beat" eller annan funktion/effekt som kan hjälpa mig att lägga till markörer eller annat?

Här nedan har jag dekodat meddelandet och det är dom röda linjerna jag undrar över.

Sigrok kanske är vägen att gå. Har aldrig testat det men skulle ju vara underbart att inte behöva en mjukvara till.
Kan man importera wave-filer i Sigrok?

Bilaga:
Dekodning.JPG

Författare:  Kulla [ 10.15 2017-10-08 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Ja, du kan importera wav.

https://sigrok.org/wiki/Input_output_formats

Författare:  Nerre [ 10.26 2017-10-08 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Du skriver i första inlägget "13 bitar", men det du avkodat verkar vara 13 bytes?

Författare:  Magnus_K [ 10.44 2017-10-08 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Hmm, förstår inte riktigt. Det är väl ett "word" som består av 13 bitar?
Nej, du har helt rätt. Det är 13 bytes som skapar ett ord.

@Kulla:
Jättetack för tipset! Ska testa ikväll men det ser väldigt lovande ut :tumupp:

Författare:  rvl [ 11.17 2017-10-08 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Nerre skrev:
Du skriver i första inlägget "13 bitar", men det du avkodat verkar vara 13 bytes?

Tänkte också först att F stod för en nibble, men koden verkar vara ternär. 0, 1, och f (float).

Författare:  TomasL [ 11.28 2017-10-08 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

13 bitar per ord. 4 ord per paket.

Författare:  Magnus_K [ 12.35 2017-10-08 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Lite synd men Sigrok crashar så fort jag försöker importera en .wav-fil.
Det får fungera med Audacity så länge.

Författare:  Magnus_K [ 20.56 2018-08-09 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Är det någon som förstår sig på RTL-SDR bättre än mig kanske?

Sitte och lyssnar på en väderstation om sänder på 433MHz-bandet och sändingen får jag fram som nedan.
Om jag spelar in signalen och öppnar den i Audacity så ser det nästan bara ut som brus.
Missar jag något månne?

Bilaga:
Vaderstation.JPG

Författare:  lillahuset [ 21.14 2018-08-09 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

För några år sedan tipsade någon här på forumet (Mr Frenzy?) mig om GNU Radio. Det är ett väldigt kraftfullt verktyg för signalbehandling, om än lite knöligt att använda. Testa det, jag hade mycket nytta av det när jag försökte få en kund att berätta hur algoritmen för det de ville göra skulle se ut. Det är ingen dans på rosor men det brukar ju inte kraftfulla verktyg vara. Och det vi ville göra hade ingenting med radio att göra, bara signalbehandling.

Författare:  Magnus_K [ 21.19 2018-08-09 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Mmmm intressant! Ska kika på det strax. Laddar just nu ner en mjukvara som kallas "Universal Radio Hacker". Tydligen väldigt omtyckt :)
Tror jag kan nyttja RTL-SDR för att hitta frekvensen och sen spela in/debugga signalen med den andra mjukvaran.

Författare:  Magnus_K [ 01.02 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Sitter och kikar på en signal, och först kommer det en puls som verkar vara en Preamble-signal.
Hur skulle ni tolka en period i den här signalen? Är en bit-längd som alt 1, 2 eller 3?

Bilaga:
Preamble.JPG

Författare:  kodar-holger [ 06.06 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Om det är preamble tror jag inte du säkert kan säga vilken det är. Du måste titta på data-portionen.

Författare:  Magnus_K [ 09.12 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Ja det ska väl vara preamble:n som sätter Baud-rate:n?

Ska göra ett inlägg i kväll om hur hela signalen ser ut. Sitter och försöker dekoda en väderstation på kvällarna men det går som väntat inte speciellt bra...

Författare:  Mickecarlsson [ 10.42 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Har du kollat på rtl_433?https://github.com/merbanan/rtl_433
Jag använder den mjukvaran för att loga min väderstation till Domoticz.
Chansen är att din väderstation redan finns i programmet.

Författare:  Magnus_K [ 10.52 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Tackar för tipset!
Den var inte med i device-listan men kan ju vara samma protokoll som andra prylar.

Hade bara varit kul att bli duktig på sånt här...

Författare:  xxargs [ 11.47 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

du är ju på väg - att strula runt och prova olika metoder och aldrig ge upp är vägen för att bli duktig på 'det'

så är det för de flesta som folk upplever som duktiga - de ser resultatet men inte den långa 'träningen' bakom det.

Författare:  Magnus_K [ 13.15 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Ja, den här SDR-dongeln som jag blev tipsad om är fullkomligt fantastiskt. När man börjar lära sig kombon SDR Sharp ihop med Universal Radio Hacker så är man fast. :)
SDR sharp är dock lite överflödigt i mitt läge men spektrum analysatorn slår URH's med hästlängder tycker jag.

Ok. Kan göra ett försök att visa hur det ser ut.

Första bilden visar ett komplett meddelande från väderstationen till huvudenheten. Det verkar onekligen vara OOK-överföring vilket förenklar en del.
Den andra bilden visar vad jag antar är preamble + start av ett meddelande. Tiden mellan flankerna enligt översta alternativet i min tidigare bild är 450µs.
Gissar också att en preamble består av skiftande 1 och 0 enda chansen att få till det är att dubbla 450µs till 900µs enligt variant 2 i tidigare bild.
Vad tror ni om det?

Bilaga:
Burst.JPG

Bilaga:
Start_av_meddelande.JPG

Författare:  Castor [ 17.48 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Jag skulle gissa att första "bursten" synkar, sedan kommer en portion med alternerande 1:or och nollor, dvs bitlängden är som i ditt alternativ 3, läsning efter en tredjedel ger 1 eller 0.

Författare:  Magnus_K [ 17.53 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Tack för svaret Castor. En gissning är bättre än inget :)
Satt en stund och testade alt 2 innan men det "kändes inte rätt". Ska lägg lite mer tid på det du tror.

Författare:  Magnus_K [ 18.41 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Nu så! Nu blev det bättre! :D

Jag och ungarna satt och blåste på anemometern och sniffade signalen samtidigt. När den väl hade tagit några samples så kikade jag på huvudenheten vilken hastighet vi kom upp till, hela 4km/h.
Dock stämde detta MYCKET bra med bitarna 84-86. Som ni ser så säger det senaste samplet "4". Självklart är det fler än 3 bitar som representerar vindhastighet men jag ville bara markera något så ska jag rätta till etiketten senare när jag vet maxhastighet.

Gissar att det bara är att jobba vidare. Har löst vilka bitar som rapporterar vindriktning men inte ännu riktigt förstått hur.

Bilaga:
Debug.JPG

Författare:  peolah [ 19.12 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Det kanske är "Manchester Encoding" som används, vilket 90% av alla OOK/FSK2 baserade 433 MHz kortdistans-ISM gör.

Först kommer en antal preamblepulser + och sedan startbit/synk-bytes och eventuell adress + datapaketet + CRC (Polynombaserd - Olika för olika sändare). Om du har otur använder dom "whitening" vilket gör det lite svårare, men inte alls troligt med en väderstation.

Manchester kodning:
1-0 = 1
0-1 = 0

Sedan om du kan logga signalen, så är Saleae Logic analysator väldigt smidig, klarar både OOK/FSK - Manchester på ett kick.
Men det tar ju udden av utmaningen.. :)

Sedan tycker jag inte att Gnu Radio är knöligt, men det är väldigt långsamt i Windows. Det är viktigt med att man har en bra USB-drivrutin. Jag använder libusb-win32 som jag tycker fungerar bäst med Win7/10 på mina burkar. Men python-script direkt är överlägset stabilast eller köra Gnu Radio i linux.

Så här kan man exportera data från Saleae..

0.109220000000000,Manchester,0x93
0.121460000000000,Manchester,0xEF
0.133720000000000,Manchester,0x84
0.146010000000000,Manchester,0xB8
0.158230000000000,Manchester,0x06
0.170490000000000,Manchester,0x0F
0.182760000000000,Manchester,0xB4
0.195040000000000,Manchester,0x00

Författare:  Magnus_K [ 20.33 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Tack för all information peolah!
Nu är jag precis ny på det här men när jag ändrar till olika typer av Manchester-modulering (eller vad det heter på svenska) så förstår jag mig verkligen inte på datan alls. Dock jättebra att veta hur det ligger till för det lär jag testa först nästa gång!

Tack vare dig så löste jag precis sista pusselbiten också - CRC !
Trodde att det vara någon slags timestamp som väderstationen skickade med men efter du läst ditt inlägg så letade jag upp två exakt lika transmissioner, och visst, exakt samma 8 bitar på slutet.

Så här ser det ut nu:

Vindriktning, rapporterar 16 väderstreck, detta gör den med 4 bitar.
Vindstyrka, lite sammanträffande så är max styrka enligt manualen 256 km/h :wink:
Luftfuktighet, rapporterar direkt i %, går åt 7 bitar med misstänker 8 bitar är allokerade.
Ute-temp, rapporterar med (antagligen) 16 bitar. Då jag inte haft >25,5° när jag labbat så har jag inte sett fler bitar.
Regnmängd, ser att varje gång skålen tippar över i mätaren så adderas det 0,7mm/h på huvudenheten. När klockan går över varje hel timma så nollas den datan på displayen.
det jag dock inte blivit klok på än är när väderstationen nollar sin räknare, samt vad datan betyder.
Lufttryck verkar huvudenheten lösa själv tyvärr. Skulle gärna vilja haft det här också men det går ju alltid lösa med en egen sensor.

Så kvar att lösa är regnmängden, sen tror jag att det roliga kan börja på allvar!
Tack än en gång för all hjälp. Nu är jag mycket mindre beroende... :vissla:

Bilaga:
Debug.JPG

Författare:  Magnus_K [ 21.38 2018-08-18 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Hmm, nej... blir inte klok på regnmängden.

Det står klart att regnmätaren består av en skopa som tippar över och tömmer när den blivit full. En sån tippning ökar en räknare med ett steg.
Denna räknare är minst 1 byte och nollställs (gissningsvis) först vid batteribyte.
Huvudenheten stämmer bara av vid början av varje timme vad mätaren rapporterar för värde på räknaren och sedan matchar värdena för varje gång mätaren rapporterar. Vid ny timme så uppdateras siffrorna i huvudenheten och den visar 0mm/h i igen.

Det konstiga är det här:

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. Räknarvärde                Visningsvärde i mm/h
  2. 00100100 (36)              0
  3. 00100101 (37)              0,7
  4. 00101001 (41)              3,9
  5. 00110010 (50)              11
  6.             Ny timma
  7. 00110010 (50)              0


Först tänkte jag att varje ökning på räknare innebar en ökning av 0,7mm/h, som det ser ut vid första tillfället.
Sen säger displayen 3,9 vilket inte är delbart med 0,7, och där raserade hela min teori.

Är det någon som ser ett samband. Börjar bli lite mosig i skallen nu efter någon timme debuggande :)
Skulle 1 bit på räknaren kunna motsvara 0,79mm och visningen ställd att enbart visa en decimal, men ej avrunda?

Författare:  idiotdea [ 09.50 2018-08-19 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Som jag förstår det mäter regnmätaren regnmängden i millimeter. Varje gång skopan tippar över ökar räknaren med ett steg. En ökning av räknaren med 1 motsvarar därmed en viss mängd regn, X millimeter. Så långt finns det ingen tid inblandad, och därmed inte heller någonting som talar om hur mycket regn det kommer per timme.

Min gissning är att huvudenheten läser denna räknare ett antal gånger per timme, och räknar ut mm/h baserat på hur lång tid sedan senaste avläsning och hur mycket räknarens värde har ändrat. Till exempel om huvudenheten läser av räknaren en gång per 15 minuter, och räknaren har ökat med 3, så blir regnmängden i mm/h lika med X/0,25. Motsvarar en enhet i räknaren t.ex. 0,7 mm regn så blir det 2,8 mm/h. Huvudenheten kan förstås läsa av räknaren med vilken frekvens den vill och kan också ha mer avancerade beräkningar än ovan, så det kanske inte är så enkelt att korrelera räknarens värde till mm/h som visas på huvudenheten.

Att huvudenheten börjar om från 0 mm/h verkar konstigt. Ifall det verkligen är på det viset så stämmer antagligen inte ovanstående stycke.

Om du redan har kommit fram till att räknaren ökar med 1 varje gång skoppan tippar över så kan du kalibrera den utan att blanda in huvudenheten. Töm skopan manuellt, sedan fyller du på med vatten tills skopan tippar över. Mät upp vattenmängden som gick åt och tvärsnittsarean på regnuppsamlaren. Dividera vattenmängden (i mm³) med tvärsnittsarean (i mm²) så har du konstanten X (i mm).

Författare:  Magnus_K [ 10.42 2018-08-19 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Nej det är verkligen ingen smart enhet. Har kollat flera gånger och den nollar verkligen regnmängden vid varje hel timma :)

Kände att jag blev nyfiken på mätaren och började faktiskt skratta när jag fick isär allt. En gungbräda med magnet och en reed-swich - enkelt och tycks fungera.

Bilaga:
20180819_113213.jpg

Författare:  tecno [ 11.30 2018-08-19 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Det är ju mm/h som du mäter så klart som attan att detta skall nollas varje timme.

https://www.wunderground.com/personal-w ... 817/mdaily

här lite data från min station från den 17:de

Författare:  Magnus_K [ 11.35 2018-08-19 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Nja, jag tänker nog att det snarare borde vara lite FIFO över visningen, alltså så den visar mm/h sedan 1 timma tillbaka hela tiden.

Författare:  tecno [ 11.37 2018-08-19 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Du har ju ackumulerad för att se bakåt i tiden vad som skett.

Författare:  Magnus_K [ 12.32 2018-08-19 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Jo men huvudenheten tömmer ju det ackumulerade varje hel timma. Just nu så kan det vräka ner regn mellan 11:00 och 11:59, och man kanske läser 40mm/h. Tittar man tillbaka efter 1 minut så har det regnat 0mm/h.

Författare:  tecno [ 12.34 2018-08-19 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Inte min station, så det är väl för dig att hacka lite så du får det som du vill ha det.

Ja jo 1/dygn dvs midnatt

Författare:  Magnus_K [ 17.45 2018-08-19 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Tänker jag rätt här?

Modulen från Swech kan gå (som lägst) ner till 5Kbps i "Air Baud Rate".
En bit i väderstationens överföring tar 1,5ms. Omvandlat till frekvens så blir det ~666Hz.

Är Swech-modulen (datablad) alltså inte rätt verktyg för att lyssna på väderstationen?

EDIT: När jag kollar i mjukvaran så verkar den kunna gå ner till 1,2K. Dock händer inget på serieporten så gissar att den skulle behöva gå ner ett snäpp till...

Författare:  peolah [ 15.08 2018-08-21 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Kanske lite too much info, men om du skall forsätta med trådlöst så kan detta vara bra att veta..

Nej, du kan inte använda Sweech mottagare - som för övrigt är en mycket bra point-point ism-länk som jag själv använt. Men de tillverkas väl inte längre och Sweech har inte dessa i lager. Sweech moduler har fasta kanaler, den som troligen är närmst din väderstation är kanal 0 som ligger på 433.999969(MHZ), kanal 1 ligger på 434.999725(MHZ) vilket är utanför de fria kanalerna i Sverige, men som radioamatör kan man köra upp till 438 MHz.

Din väderstation ligger sannolikt på ~433.820 MHz vilket är inom det fria ISM bandet 433.050–434.790 MHz. Men dessutom måste din "mottagare" som skall avlyssna din väderstation ha exakt samma bitrate.

Denna modul i kombination med en Arduino kan du eventellt använda:

https://www.electrokit.com/produkt/rfm6 ... ansceiver/

Med eventuellt menar jag att (om) du kan konfigurera RFM69 som din OOK sändares CRC mm. Vilket är ganska troligt med inte helt 100%. Det går annars att lösa med RF69 oavsett med bitbanging (DIO) - men det är ingen direkt enkelt första projekt.

Ett problem med Arduino/RFM69HCW är att RFM69 inte är 5V tolerant. Så antingen får du använda en extern 3.3V spänningsstab och en nivåomvandlare
till SPI (4 pinnar), står att det är till I2C men fungerar också till SPI. Det är iaf MOSI, MISO, SCK, NSS. Om du vill använda interupt och Reset behöver
du två st.. :)

https://www.electrokit.com/produkt/niva ... onell-i2c/

Man kan även bygga on tex en Arduino Nano till 3.3V, men det är lite mer komplicerat. Problem man slipper, är nivåomvandling på alla SPI och DIO. Men ett problem är att 16 MHz 3.3V på en ATMega328P är överklockning. Jag kör denna metod utan problem dock.

Finns info på nätet om sådana projekt..

Använder själv egen kod. Men annars finns ett bra Arduino bibliotek som en kille som heter Paul Stoffengren (RadioHead) gjort.

https://github.com/PaulStoffregen/RadioHead

Oj, det blev mycket.. Nu har du lite att syssla med.. hehe

Skrivit allt ovan quick and dirty, så det finns säkert en del fel i ovan..

Edit : 433.920 MHz är det !

73 de

Författare:  Magnus_K [ 16.18 2018-08-21 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Lite körig vecka men ska läsa mer om allt du länkar senare.
Jag är jättetacksam för all info. Det kan aldrig bli för mycket!

Liten snabbfråga om Baudrate. Även denna modul kan gå ner till 1,2 Kpbs. Kan det vara så att min gamla väderstation har en så långsam dataström så det helt enkelt blir problem med dagens teknik?
Ska jag bara ärlig så tror jag att jag tänker fel någonstans, men vet inte vart.

Författare:  ToPNoTCH [ 16.33 2018-08-21 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

peolah skrev:
Man kan även bygga on tex en Arduino Nano till 3.3V, men det är lite mer komplicerat. Problem man slipper, är nivåomvandling på alla SPI och DIO. Men ett problem är att 16 MHz 3.3V på en ATMega328P är överklockning. Jag kör denna metod utan problem dock.


Som info så finns det på eBay fortfarande massor med "pro MINI" i 8 MHz variant som kör 3.3V om man inte vill modda själv.

Författare:  peolah [ 17.12 2018-08-21 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Magnus_K skrev:
Lite körig vecka men ska läsa mer om allt du länkar senare.
Jag är jättetacksam för all info. Det kan aldrig bli för mycket!

Liten snabbfråga om Baudrate. Även denna modul kan gå ner till 1,2 Kpbs. Kan det vara så att min gamla väderstation har en så långsam dataström så det helt enkelt blir problem med dagens teknik?
Ska jag bara ärlig så tror jag att jag tänker fel någonstans, men vet inte vart.


Inte för jag kört under 1,2 Kbps. Men RF69(SX1231) kan du sätta till mycket lägre hastighet med de 2 prescaler registren för detta.
Sedan har jag aldrig varit med något som kör under just 1,2 Kbps. men det är ju lätt att komma fram till bitraten - bara att kolla perioden på preamablen..

Har funderat lite, är det inte så att du missuppfattat bitrate/symbolrate och hur det fungerar i sin enklaste form av OOK.

OOK , betyde ju ON-OFF KEY, en nolla i bitrate-strömmen slår av bärvågen och en etta sätter på bärvågen.

Dvs det du ser som en preamble lik denna _--_--_--_--_--_--_--_-- är alltså inte 8 data bitar, utan 16 databitar OOK : 0x5555 i detta fallet!

Symbolraten är alltså inte samma som bitrate, med 666 Hz i preamble motsvarar ~1332 bps i OOK ..
Däremot finns det olika sätt hur man samplar databitarna, som sagt inte lätt att veta förrän man tittat närmre på detta.

Men Iaf, lycka till..

Edit : Fixat stavfel mm..

Författare:  Magnus_K [ 23.03 2018-08-21 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Snyggt peolah! Du fick mig att tänka efter lite mer och läsa på om OOK-modulation.
Kikar jag tillbaka på puls-tåget och vad jag anser vara 1 bit, så består ju faktiskt den av 3 symboler; 001 & 110.
Om en sån här bit tar 1,5ms så innebär ju det att en symbol är 0,5ms, dvs 1/0,0005 = 2000 Symbols/sec
Måste göra ett nytt test med 2k i Baudrate :D

För att gå tillbaka till ditt tidigare inlägg.
Jag hade verkligen sett fram emot att använda Swech's modul ,men nu ser (och förstår) jag vad det här med kanalerna innebär. Fick nog för mig att jag kunde mjukvaru-tuna frekvensen.
Nåja, den kommer säkert till användning till något annat projekt.
RFM69 har jag varit så sugen på så länge så nu ska jag köpa ett par såna och labba med. Tydligen riktigt bra grejer så tack för det tipset!

Jag kommer försöka få 433-trafiken in på LAN:et på något sätt och har övervägt använda en Raspberry Pi + RF-modul. Dels pga 3,3V-nivån men också pga att jag trodde det behövdes "lite pulver".
Börjar istället titta på en ENC28J60.
Vet inte om det är möjligt att först konfigurera RFM69 och sen koppla ihop den med ENC28J60 för att få över datan in till datorn. Måste läsa lite mer.

@ToPNoTCH:
Tror faktiskt jag har några såna för just detta ändamålet. Tack för tipset!

Supertack för allt! :tumupp:

Författare:  peolah [ 12.18 2018-08-22 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Man kan iofs lätt ändra fuses på en AVR att köra 8 MHz intern oscillator via en ISP-programmerare och Atmel Studio eller dylikt.

Det inte svårt att modda ett nano som nedan till 3.3V. Byta LDO, löda dit 2 byglar och bryta en pcb-bana efter schottky dioden.
Det skiljer lite i PCB varianterna och om du har CH340G eller FT232RL som USB-kontroller

https://www.electrokit.com/produkt/utve ... mpatibelt/

Pinkompatibel 3.3V LDO:

https://www.electrokit.com/produkt/lm11 ... -ldo-3-3v/

Jag föredrar Nano då den har USB, det är lite bökigt att programmera firmware via ISP som man får göra med pro Mini.

Författare:  Magnus_K [ 14.42 2018-12-10 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Någon som "ser" det? Försöker utröna vilken metod som används för meddelandet.

Hela den jämna raden med pulser ska vara det som representerar nollorna i det här -> 11001000000000000000000010111
Det jag inte blir klok på är dessa "dubbel-pulser", dom ställer till det. Ser inget mönster med om dom kommer före/efter en annan puls.
Det finns en risk att meddelandet är baklänges.

Bilaga:
decoding.PNG

Författare:  Magnus_K [ 21.28 2018-12-10 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Provar så här i stället. Nu är jag nära!

Detta är mitt binära meddelande:
110000101100001100100000000000000000000011111010000

Om man avkodar bitströmmen (längst ner i inlägget) mha sanningstabellen:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. A B O
  2. 0 0 0
  3. 0 1 1
  4. 1 0 0
  5. 1 1 1


så verkar det stämma.
Frågan är då. Finns det något program som kan hjälpa mig så jag slipper göra det här manuellt?

110011000110011001100011001100110011001100110011001100110011001100101100110001101010011000101010110100110011001101010011001010101101001010101011010010101011001101001010101101001011001010101010101010101010101010101010101010110101010100011001010101011001101001100110011001101001011000

Författare:  Kulla [ 21.29 2018-12-10 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Sigrok, kanske kolla om protokollet finns eller du får skapa den själv.

https://sigrok.org/wiki/Protocol_decoders

Författare:  Klas-Kenny [ 21.39 2018-12-10 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Med den där sanningstabellen kan du ju helt enkelt plocka bort varannan bit, så har du svaret.. :)

Eller så kan du spendera fem minuter på att skriva ett program som avkodar..

https://onlinegdb.com/ryMkkUhyE :vissla:

Författare:  Magnus_K [ 22.13 2018-12-10 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

På ren svenska, fan vilket geni du är Klas-Kenny!
Trodde absolut inte att du skrivit ihop något liknande, utan bara postade en länk!

Är det ok om jag stjäl den koden och försöker göra ett program i RPin där jag bara kan mata in pulståget och ut spottar den resultatet. Kan vara en halvklurig övning för mig att göra.

Tack än en gång! Blev extra glad när jag insåg att det stämde också :D

Författare:  Klas-Kenny [ 22.21 2018-12-10 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Självklart får du göra vad du vill med koden.
Den är inte optimal på något sätt, men den är enkel och gick snabbt att skriva. :D

Författare:  Magnus_K [ 08.38 2018-12-11 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Tack :tumupp:

Jag slaktade den lite igår... Läste lite hur man använder getopt().
Trodde det gick relativt bra men ju mer jag rättar till, desto fler kompileringsfel.
Har lite problem att flytta text mellan RPin och EF så här kommer bara koden. Ska jobba på att få över kompileringsfelen också, men det är lite många i nuläget.
Nu så, nu är kompileringsfelen nedanför koden.

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <getopt.h>
  4.  
  5. void print_usage() {
  6.         printf("Usage: binDecoderv1 -b <bin> | binDecoderv1 -h\n");
  7.         exit(2);
  8. }
  9.  
  10. void main(int argc, char **argv) {
  11.  
  12.     if (argc < 2) {
  13.         print_usage();
  14.     }
  15.  
  16.     int option;
  17.     int bflag = 0;
  18.     int hflag = 0;
  19.  
  20.     while ((option = getopt(argc, argv, "b:h")) !=-1) {
  21.             switch (option) {
  22.                     case 'b' :
  23.                             if (bflag) {
  24.                                     print_usage();
  25.                             } else {
  26.                                     bflag++;
  27.                                     print_decoded_result(atoi(optarg));
  28.                             }
  29.                             break;
  30.                     case 'h' :
  31.                             if (hflag) {
  32.                                     print_usage();
  33.                             } else {
  34.                                     printf("Enter pulsetrain and get it decoded!");
  35.                             }
  36.                             break;
  37.                     default :
  38.                             print_usage();
  39.             }
  40.     }
  41. }
  42.  
  43. int print_decoded_result(char binary) {
  44.    
  45.     char b[] = binary;
  46.    
  47.     for(int i=0; i<sizeof(b); i+=2) {
  48.        
  49.         if(b[i] == '0') {
  50.             if(b[i+1] == '0')
  51.                 printf("0");
  52.             else if(b[i+1] == '1')
  53.                 printf("1");
  54.         } else if(b[i] == '1') {
  55.             if(b[i+1] == '0')
  56.                 printf("0");
  57.             else if(b[i+1] == '1')
  58.                 printf("1");
  59.         }
  60.     }
  61.     printf("\n");
  62.     return 0;
  63. }


Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. binDecoderv1.c: In function ‘main’:
  2. binDecoderv1.c:27:37: warning: implicit declaration of function ‘print_decoded_result’ [-Wimplicit-function-declaration]
  3.                                      print_decoded_result(atoi(optarg));
  4.                                      ^~~~~~~~~~~~~~~~~~~~
  5. binDecoderv1.c: At top level:
  6. binDecoderv1.c:43:5: error: conflicting types for ‘print_decoded_result’
  7.  int print_decoded_result(char binary) {
  8.      ^~~~~~~~~~~~~~~~~~~~
  9. binDecoderv1.c:43:1: note: an argument type that has a default promotion can’t match an empty parameter name list declaration
  10.  int print_decoded_result(char binary) {
  11.  ^~~
  12. binDecoderv1.c:27:37: note: previous implicit declaration of ‘print_decoded_result’ was here
  13.                                      print_decoded_result(atoi(optarg));
  14.                                      ^~~~~~~~~~~~~~~~~~~~
  15. binDecoderv1.c: In function ‘print_decoded_result’:
  16. binDecoderv1.c:45:16: error: invalid initializer
  17.      char b[] = binary;
  18.                 ^~~~~~
  19.  

Författare:  Klas-Kenny [ 08.54 2018-12-11 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Inte provkört programmet, men det kompilerar i alla fall. :)

Flyttade main() till sist i programmet (funktionen print_decoded_result() var annars inte deklarerad innan den användes), bytte namn på variabeln binary till bara b och tog bort det misslyckade försöket att kopiera binary till b (för att göra som du försökte hade det krävt att allokera minne till b med malloc, sen kopiera med memcpy. Arrayhantering är inte alltid helt trivialt i C), samt lade till variabel hflag.

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <getopt.h>
  4.  
  5. void print_usage() {
  6.         printf("Usage: binDecoderv1 -b <bin> | binDecoderv1 -h\n");
  7.         exit(2);
  8. }
  9.  
  10.  
  11.  
  12. int print_decoded_result(char b[]) {
  13.    
  14.     for(int i=0; i<sizeof(b); i+=2) {
  15.        
  16.         if(b[i] == '0') {
  17.             if(b[i+1] == '0')
  18.                 printf("0");
  19.             else if(b[i+1] == '1')
  20.                 printf("1");
  21.         } else if(b[i] == '1') {
  22.             if(b[i+1] == '0')
  23.                 printf("0");
  24.             else if(b[i+1] == '1')
  25.                 printf("1");
  26.         }
  27.     }
  28.     printf("\n");
  29.     return 0;
  30. }
  31.  
  32. void main(int argc, char **argv) {
  33.  
  34.     if (argc < 2) {
  35.         print_usage();
  36.     }
  37.  
  38.     int option;
  39.     int bflag, hflag = 0;
  40.  
  41.     while ((option = getopt(argc, argv, "b:h")) !=-1) {
  42.             switch (option) {
  43.                     case 'b' :
  44.                             if (bflag) {
  45.                                     print_usage();
  46.                             } else {
  47.                                     bflag++;
  48.                                     print_decoded_result(atoi(optarg));
  49.                             }
  50.                             break;
  51.                     case 'h' :
  52.                             if (hflag) {
  53.                                     print_usage();
  54.                             } else {
  55.                                     printf("Enter pulsetrain and get it decoded!");
  56.                             }
  57.                             break;
  58.                     default :
  59.                             print_usage();
  60.             }
  61.     }
  62. }

Författare:  Magnus_K [ 09.14 2018-12-11 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Försökte enbart göra ändringarna genom din text, blir lättare att förstå felen då. Nu kompilerar det med ett par varningar men får Segmenteringsfel när jag försöker tex ./binDecoderv1 -b 10101101010101.

Ska kika mer på det lite senare men roligt att se svaren om man bara skriver ./binDecoderv1 eller ./binDecoderv1 -h :)

Författare:  Klas-Kenny [ 11.35 2018-12-11 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Ser felet nu, du vill inte ha atoi(optarg) eftersom du vill ha en sträng till print_decoded_result(), inte strängen omvandlas till integer.

Skicka optarg direkt istället.

Författare:  Magnus_K [ 11.44 2018-12-11 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Det löste det mesta! :tumupp:

Det enda den inte vill förstå nu (tror jag), det är den egentliga storleken på b[].
Kör jag tex ./binDecoder -b 110101010101 så får jag bara tillbaka 11. Den verkar enbart uppfatta b som storlek 1, och kör for-loopen endast en gång.

EDIT: Tror det är jag som rör ihop det. Det blev lite dumt att döpa både option till 'b' samt använda det som variabelnamn för det binära pulståget.

Författare:  Magnus_K [ 14.46 2018-12-11 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Nej, får inte ihop det riktigt. Förstår inte vad det är för värde som lägger sig i binary[]. Lägger sig varje bit som ett element?
Så här ser koden ut nu. Med kompileringsvarningen nedan.

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <getopt.h>
  4.  
  5. void print_usage() {
  6.         printf("Usage: binDecoderv1 -b <bin> | binDecoderv1 -h\n");
  7.         exit(2);
  8. }
  9.  
  10.  
  11. int print_decoded_result(char binary[]) {
  12.    
  13.     //binary = sizeof(b) / sizeof(b[0]);
  14.  
  15.     for(int i=0; i<sizeof(binary); i+=2) {
  16.        
  17.         if(binary[i] == '0') {
  18.             if(binary[i+1] == '0')
  19.                 printf("0");
  20.             else if(binary[i+1] == '1')
  21.                 printf("1");
  22.         } else if(binary[i] == '1') {
  23.             if(binary[i+1] == '0')
  24.                 printf("0");
  25.             else if(binary[i+1] == '1')
  26.                 printf("1");
  27.         }
  28.     }
  29.     printf("\n");
  30.     return 0;
  31. }
  32.  
  33. void main(int argc, char **argv) {
  34.  
  35.     if (argc < 2) {
  36.         print_usage();
  37.     }
  38.  
  39.     int option;
  40.     int bflag = 0;
  41.     int hflag = 0;
  42.  
  43.     while ((option = getopt(argc, argv, "b:h")) !=-1) {
  44.             switch (option) {
  45.                     case 'b' :
  46.                             if (bflag) {
  47.                                     print_usage();
  48.                             } else {
  49.                                     bflag++;
  50.                                     print_decoded_result(optarg);
  51.                             }
  52.                             break;
  53.                     case 'h' :
  54.                             if (hflag) {
  55.                                     print_usage();
  56.                             } else {
  57.                     hflag++;
  58.                                     printf("Enter pulsetrain and get it decoded!\n");
  59.                             }
  60.                             break;
  61.                     default :
  62.                             print_usage();
  63.             }
  64.     }
  65. }
  66.  

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. binDecoderv1.c: In function ‘print_decoded_result’:
  2. binDecoderv1.c:15:26: warning:sizeof’ on array function parameter ‘binary’ will return size of ‘char *[-Wsizeof-array-argument]
  3.      for(int i=0; i<sizeof(binary); i+=2) {
  4.                           ^
  5. binDecoderv1.c:11:31: note: declared here
  6.  int print_decoded_result(char binary[]) {
  7.                                ^~~~~~
  8.  

Författare:  adent [ 17.04 2018-12-11 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Nu vet jag inte riktigt var optarg kommer ifrån.

Felet är att sizeof(binary) inte returnerar strängens/arrayens längd utan storleken för en pekare istället.

Testa med: strlen(binary) istället för sizeof(binary). Kanske behöver du inkludera <string.h> oxo.

Författare:  Magnus_K [ 17.56 2018-12-11 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Snyggt adent :tumupp:
Jag som testat strlen i olika varianter men inte så.

Programmet räknar fortfarande inte riktigt så det är fortfarande något fel.
Jag testade att göra printf(optarg); och då skriver den ut exakt det pulståget som jag matade in. Med andra ord får funktionen print_decoded_result(); det den ska.
Testade sen att i den funktionen skriva printf(strlen(binary)); men får en drös varningar då om pekare och annat. Tyvärr inte möjlighet att kopiera meddelandet nu.

Författare:  Klas-Kenny [ 20.49 2018-12-11 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

printf("%d",strlen(binary));

Kan inte ge printf en integer direkt...

Printf tar en sträng som första argument. Och en sträng i C är en pekare till en char-array.
Så ger du den en integer kommer den skriva ut vad som råkar finnas på den adressen som integerns tal är. Vilket sannolikt bara blir skräptecken.

Författare:  Magnus_K [ 21.13 2018-12-11 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Oj, ja då blir det tokigt.
Får tillbaka 11.

Författare:  bearing [ 22.39 2018-12-11 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Var 11 väntat, eller hur lång var strängen?

Författare:  Mr Andersson [ 11.04 2018-12-14 ]
Inläggsrubrik:  Re: Dekoda pulståg i Audacity

Jag tycker ni gör det onödigt invecklat. Varför ha en komplex if-sats om O=B?

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(int argc, const char **argv) {
  5.     if(argc != 2) {
  6.         printf("Usage: %s <data>\n", argv[0]);
  7.         return 1;
  8.     }
  9.  
  10.     for(size_t i = 1; i < strlen(argv[1]); i += 2) {
  11.         printf("%c", argv[1][i]);
  12.     }
  13.     printf("\n\n");
  14. }
  15.  

Alla tidsangivelser är UTC + 1 timme
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/