re-DECTed: An RTL-SDR DECT Decoder

Over on GitHub programmer ‘znuh’ has uploaded a new RTL-SDR compatible GNURadio based tool for DECT decoding. DECT is an acronym for ‘Digital Enhanced Cordless Telecommunications’, and is the wireless standard used by modern digital cordless phones. In most countries DECT communications take place at 1880 – 1900 MHz, and in the USA at 1920 – 1930 MHz. So in order to receive these frequencies you’ll need an RTL-SDR with an E4000 chip, or some other compatible SDR that can tune this high.

It appears that the decoder is not actually able to decode audio (at least not yet or without extra work perhaps), but it can at least output the DECT packets to Wireshark for analysis. This may be of interest to those wanting to learn more about the DECT protocol.

Update: Over on the Reddit thread for this software the original poster ‘sanjuro’ has given a hint on how to (in theory) decode the audio, he writes:

In theory you only need to dump B-field data into a file and then play with g726 codec. See documentation from previous de-DECTed project

The re-DECTed decoder outputting packets to Wireshark.
The re-DECTed decoder outputting packets to Wireshark.


  1. don b

    usa dect channel should start on channel 23,
    and covered somewhere in the 1900 bands,

    why did the author not make seperate freq chart for usa

    • Dave

      DECT is specified for the whole frequency range 1880 –1939 MHz.
      For the frequency band 1880 – 1900 MHz 10 RF-carriers with centre frequencies Fc are given by:
      Fc = F0 – c * 1,728 MHz, where:F0 = 1897,344 MHz
      c = 0, 1, 2, ….., 9
      For carriers from 1899,072 to 1937,088 MHz the carrier frequencies are defined by:
      Fc = F9 + c * 1,728 MHz, where:F9 = 1881,792 MHz
      c = 10, 11, 12, ….., 32

      In the grc flowgraph, in the variable id, freq, you want to change the value to 1881.792e6+(channel*1.728e6) . You don’t need to have a complete frequency listing if you just have this formula I just gave you! The radio buttons will control the channel variable! lol! for example 1881.792e6+(23*1.728e6) = 1921.536Mhz, which is channel 23 !!! So, the GUI Chooser changes the channel variable.
      Then, in WX GUI Chooser, you want to append the last 22 channel numbers. Like this, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ,17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]

      I’m really not playing with a full deck today, guys. I’m about to relapse and buy a pack of cigs right now. But, first I had to type all this out because I feel your aggravation since not everyone knows how to come to the conclusion I came to. I hope you all have fun with it and not do anything dumb, like telling people that you can listen to their phone conversation, etc. That can get you put in jail very fast. So, with that said, with *everything* in life, just keep it to yourself! Don’t even let people know when you took a piss!

  2. eu

    here is just a quick and dirty change to work at 1900Mhz:

    $ diff dectrx.py_orig dectrx.py_1900
    # = channel = 1
    > = channel = 10
    # self.freq = freq = 1897.344e6-(channel*1.728e6) # for channels 0 to 9
    > self.freq = freq = 1881.792e6+(channel*1.728e6) # for channels 10 to 32
    # choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    > choices=[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24],
    # self.set_freq(1897.344e6-(*1.728e6)) # for channels from 0 to 9
    > self.set_freq(1881.792e6+(*1.728e6)) #for channels from 10 to 32
    > print (freq)

  3. Lee

    “Decode DECT”
    hmm, interesting
    “It appears that the decoder is not actually able to decode audio”
    sigh, not so interesting.

    • Guilherme Rodrigues

      My exact reaction, but hey let’s give it sometime, with this “entry door” available people can work and develop more tools.

Post a comment

You may use the following HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>