# PSK Demodulator performance

**URL:** <https://www.ruby-forum.com/t/psk-demodulator-performance/240861>\
**Category:** GNU Radio\
**Created:** [May 3, 2014, 9:36am UTC](https://www.ruby-forum.com/t/psk-demodulator-performance/240861 "2014-05-03T09:36:51Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Detlef\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@Detlef\_R](https://www.ruby-forum.com/u/Detlef_R)\
**Post date:** [May 3, 2014, 9:36am UTC](https://www.ruby-forum.com/t/psk-demodulator-performance/240861/1 "2014-05-03T09:36:51Z")

</div>

Does anyone have any information on the performance - specifically the  
implementation loss of the Gnuradio PSK demodulator block? I am trying  
to  
work out a link budget. Typically this would be 1dB or so from ideal.

Mike

---

<div class="post-metadata">

**Author:** ![vh1](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/278dde/32.png) [@vh1](https://www.ruby-forum.com/u/vh1)\
**Post date:** [May 3, 2014, 11:27am UTC](https://www.ruby-forum.com/t/psk-demodulator-performance/240861/2 "2014-05-03T11:27:59Z")

</div>

On 05/03/2014 09:35 AM, Mike W. wrote:

> Does anyone have any information on the performance specifically the  
> implementation loss of the Gnuradio PSK demodulator block? I am trying  
> to work out a link budget. Typically this would be 1dB or so from ideal.

By ideal, you mean the theoretical BER values for a given Eb/N0? If so,  
that would be easy to determine – have a look at berawgn.py, replace  
the slicer with the PSK demod and allow for some initialization time.

Cheers,  
Martin

---

<div class="post-metadata">

**Author:** ![vh1](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/278dde/32.png) [@vh1](https://www.ruby-forum.com/u/vh1)\
**Post date:** [May 4, 2014, 6:21am UTC](https://www.ruby-forum.com/t/psk-demodulator-performance/240861/3 "2014-05-04T06:21:12Z")

</div>

Hi Mike!

Well, from a purely algorithmic point of view, there is no approximate  
magic happening inside the PSK demapper  
(from constellation.cc):  
unsigned int  
constellation\_psk::get\_sector(const gr\_complex \*sample)  
{  
float phase = arg(\*sample);  
float width = M\_TWOPI / n\_sectors;  
int sector = floor(phase/width + 0.5);  
if(sector \< 0)  
sector += n\_sectors;  
return sector;  
}

This is “perfect” up to the degree that arg() works well enough, which  
is  
mainly a matter of float accuracy, I guess, and should therefore be well  
below any significance.

The other thing is the finite-length root-raised cosine matched  
filtering;  
I think you can derive losses for that, but I think Martin’s approach of  
measuring things might be faster and more accurate in the end.

Greetings,  
Marcus

---

<div class="post-metadata">

**Author:** ![vh1](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/278dde/32.png) [@vh1](https://www.ruby-forum.com/u/vh1)\
**Post date:** [May 5, 2014, 1:19pm UTC](https://www.ruby-forum.com/t/psk-demodulator-performance/240861/4 "2014-05-05T13:19:24Z")

</div>

On 03.05.2014 13:16, Marcus M. wrote:

> Hi Mike!
> 
> Well, from a purely algorithmic point of view, there is no approximate  
> magic happening inside the PSK demapper

Oh, I assumed Mike was talking about the entire demod chain  
(sync/eq/demap), which would have its own inherent loss. Maybe Mike can  
clarify.

If I’m correct, there’s the question of the correct metric, since Eb/N0  
alone might not be the only factor affecting BER.

M
