Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2020-12-10, 22:39
  #13
Medlem
Citat:
Ursprungligen postat av Methos
Så, koden fungerar.

Nej, det gör den ju inte. Hominem fyllde i luckorna, tex de jag nämnde i mitt första svar

Citat:
Ursprungligen postat av Hominem
Verkar saknas en del i koden för att den ska starta överhuvudtaget.
Citera
2020-12-10, 22:44
  #14
Medlem
Men kan du verkligen köra din early-late-detectering direkt på din signalen från din while loop? Du nämde FSK, vad är det för signal du får från din dongel egentligen? Innehåller inte I och Q samma information? och vad är din symbolhastighet?
Citera
2020-12-11, 08:04
  #15
Medlem
Citat:
Ursprungligen postat av smurfarfrasse
Men kan du verkligen köra din early-late-detectering direkt på din signalen från din while loop? Du nämde FSK, vad är det för signal du får från din dongel egentligen? Innehåller inte I och Q samma information? och vad är din symbolhastighet?

Av frekvensen att döma så är det ERMES

Citat:
The modulation method is 4-FSK at 6.25 kbit/s (3125 symbols/sec).

https://www.sigidwiki.com/wiki/Europ..._System_(ERMES)
Citera
2020-12-11, 11:49
  #16
Medlem
Citat:
Ursprungligen postat av smurfarfrasse
Men kan du verkligen köra din early-late-detectering direkt på din signalen från din while loop? Du nämde FSK, vad är det för signal du får från din dongel egentligen? Innehåller inte I och Q samma information? och vad är din symbolhastighet?

JA, jag kan köra synkroniseringen från den sample som tas, det är det synkroniseringen är till för: att synkronisera två signaler i fas för att signalen skall bli korrekt så att du sedan kan få synkroniseringen till bitar.

FSK är frekvenssynkroniserad modulering/kodning och använder differenser i frekvensen för att skicka meddelanden i olika format (ljud, RSS, text osv.) Slå på din radio hemma så har du just alla rundradiostationer på vad som kallas för FM-bandet, vilket FM står för FrekvensModulering. Flyget använder t.ex. AM, amplitudmodulering. En del krypton och en del andra digitala versioner av kommunikationssystem använder PSK eller QPSK, fasmodulering/fassynkronisering

Den avkodningsfunktion som du ser är bara det första steget i att få signalen till binär kod, istället för att ha en signal som går över -1,1 får man då en signal som går i 1,0 eller som i detta fallet True,False. Det hominem upptäckte var den första avkodningen från IQ till en bool-array med True-False. Sedan kommer fler funktioner att avkoda denna bool-array till binär kod i 1,0 för att sedan avkoda det binär till ascii.

Så här fungerar all signalöverförning som går över etern oavsett om det är 200m långvåg eller 5G mobilnät.

Symbolhastigheten för Pocsag (inte ERMESS) är antingen 500bps, 1200bps eller 2400bps. Vanligast 1200bps.
Därför behöver jag få in över 1000 bit sample från en signal som går i 1200bps. Där har du kärnan i denna tråd, att gå från en loop som loopar några miljoner gånger till att loopa 1-2 gånger (kankse 3-4 för att säkra sampleration som bör vara det dubbla för att få en säker digital avkodning). För tar du in låt säga 4000bit per sample så täcker du meddelandet på en sekund. Det är just detta som är problemet då programmet loopar ett flertal gånger per sekund och hackar upp signalen. Signalen sprids då i över 100 arrayer.

Här funderar jag på att använda deque och försöka få med mig hela meddelandet i samma array innan man fortsätter att behandla signalen. För signalen/meddelandet/paketet är runt 1000bit.
Citera
2020-12-11, 11:54
  #17
Medlem
Citat:
Ursprungligen postat av Hominem
Av frekvensen att döma så är det ERMES



https://www.sigidwiki.com/wiki/Europ..._System_(ERMES)

Nej, de är inte ERMES (även om jag skulle kunna avkoda ERMES också). Detta är POCSAG.
JAg förstår fortfarande inte vad denna sidodiskussion har att göra med trådstarten.

En simple fråga:

Vad kan jag använda för metod att få en while-loop att bara trigga sdr.read_sample() 2-4 gånger i sekunden och inte så fort CPU har ledigt för en ny instruktion.

Jag kan inte förstå hur denna fråga kan vara så svår?
Citera
2020-12-11, 12:16
  #18
Medlem
Jag skulle kunna köra en while loop till inom huvudkoopen:

Kod:
while True:

     While total_sample.shape ==1000:
               sample  = get_sample(sample_factor)
               total_sample.append(sample)
            
      sample, dec_sample_r = decimate_and_filter(correct_dc_offset(total_sample)
      sample = squelch(sample)
      sample = sync_complex_signals(sample)
      el_demodulator(sample, dec_sample_rate)


Detta skulle man kunna göra då bör jag få hela meddelandet innan jag behandlar signalen.
Nej, även denna kod är inte körbara då jag skrev den i forumsrutan. Men den bör vara körbara med indent-justering.

Sedan ser jag att ni saknar två vikta funktioner, där av förvirringen som sker här. Ber om ursäkt.

Här nedan är synkroniseringen av de två komplexa signalerna och det jag kallar "squeltch" (den se till att endast signalen går igenom och inte bruset.)



Kod:
def squelch(sample):

    # filter out the active signal from idle noice by taking the absolute
    # value of sample. 
    sample_mag = np.abs(sample)
    
    #setting the threshold in magnitude
    sample_mag_thrs =squelch_value     #0.003

    sample_indices = np.nonzero(sample_mag >sample_mag_thrs)[0]

    #limit the sample to signals within the sample_indices
    return sample[np.min(sample_indices) : np.max(sample_indices)]


    #DEMOD SIGNAL
def sync_complex_signals(sample):
    # demodulating fm signal with the two complex number
    sample_angle_diff = np.angle(sample[:-1] * np.conj(sample[1:]))
    #erease the diff between them
    return sample_angle_diff - np.mean(sample_angle_diff)
Citera
2020-12-11, 13:23
  #19
Medlem
Citat:
Ursprungligen postat av Methos
En simple fråga:

Vad kan jag använda för metod att få en while-loop att bara trigga sdr.read_sample() 2-4 gånger i sekunden och inte så fort CPU har ledigt för en ny instruktion. Men vill du hålla reda på tiden själv kan du istället använda time.sleep().

Jag kan inte förstå hur denna fråga kan vara så svår?

Vill du anropa en funktion med ett visst intervall så kan du använda threading.Timer eller liknande.

https://docs.python.org/3/library/th...hreading.Timer

Men kommer du inte förlora information då eftersom samplehastigheten är så hög (1,024 miljoner sample/sekund) och varje anrop hämtar 65536 sample?
Citera
2020-12-11, 14:42
  #20
Medlem
Citat:
Ursprungligen postat av Hominem
Vill du anropa en funktion med ett visst intervall så kan du använda threading.Timer eller liknande.

https://docs.python.org/3/library/th...hreading.Timer

Men kommer du inte förlora information då eftersom samplehastigheten är så hög (1,024 miljoner sample/sekund) och varje anrop hämtar 65536 sample?

Sample_rate går ju att begränsa, vilket vi gör genom decimeringen. Antalet sample per "sweep" går ju också att sätta som vi vill, du kan sätta den ända ned till 1024 (som är standard),men signalen blir väldigt opålitlig då.

Funderar på att köra som jag skrev i min senare tråd, med nån typ av begränsad while eller med deque
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback