On Mon, Dec 16, 2013 at 8:16 AM, Miklos Maroti <mmar...@math.u-szeged.hu> wrote:
> Hi Marcus,
>
> Ok, that makes sense. It does not crash with QPSK, but it does with
> BPSK and 8PSK, and BPSK and 8PSK do not set the pre_diff_code. This
> explains why there is crash in one case and not the other. Although
> neither sets the apply_pre_diff_code, so even QPSK should not set
> pre_diff_code.
>
> I think the real problem is in constellation::calc_soft_dec. I does
> not check whether d_apply_pre_diff_code is set or not.
>
> (By the way, I do not understand the usefulness of pre_diff_code. Can
> you just permute the constellation points and get the same effect?)
>
> Miklos

Miklos,

Can you try to attached patch? I had made the assumption that
pre_diff_code was always set in the constellation objects.

And yes, the pre_diff_code is essentially a LUT for the permutation.

Tom



> On Mon, Dec 16, 2013 at 1:34 PM, Marcus Müller <mar...@hostalia.de> wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Well, after having a debug build and then adding a lot of "volatile"s
>> into the code at the crashing function, it looks as if the
>> d_pre_diff_code of the constellation has size 0; and thus, you can't
>> access the 0. (read: first) element. How this could happen with a QPSK
>> object is currently subject to my confusion. Stay tuned for more
>> confusing facts as the code unfolds :).
>>
>> Greetings,
>> Marcus
>>
>> On 16.12.2013 08:30, Miklos Maroti wrote:
>>> Hi Marcus,
>>>
>>> I do not think it is a compiler bug, but something uninitialized.
>>> Constellation_qpsk and constellation_calcdist does not crash (I
>>> did not verify if they work). However, if I generate the LUT for
>>> constellation_qpsk, then it crashes.
>>>
>>> # uname -a Linux maroti-t410 3.11.0-14-generic #21-Ubuntu SMP Tue
>>> Nov 12 17:04:55 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
>>>
>>> # gcc --version gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
>>>
>>> Using latest master branch of gnuradio, hash 117058bac41c91, both
>>> CMAKE_BUILD_TYPE=Debug and Release produces the same behavior
>>>
>>> # gdb `which python` core Reading symbols from
>>> /usr/bin/python2.7...(no debugging symbols found)...done.
>>>
>>> warning: core file may not match specified executable file. [New
>>> LWP 2249] [New LWP 2251] [New LWP 2240] [New LWP 2248] [New LWP
>>> 2247] [New LWP 2239] [New LWP 2250]
>>>
>>> warning: Can't read pathname for load map: Input/output error.
>>> [Thread debugging using libthread_db enabled] Using host
>>> libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
>>> Core was generated by `python ./constellation_simulation.py'.
>>> Program terminated with signal 11, Segmentation fault. #0
>>> 0x00007f98dbbe01a7 in gr::digital::constellation::calc_soft_dec (
>>> this=0x48321c0, sample=..., npwr=<optimized out>) at
>>> /home/mmaroti/workspace/gnuradio/gr-digital/lib/constellation.cc:286
>>>
>>>
>> 286        for(int j = 0; j < k; j++) {
>>>
>>> i stack #0  0x00007f98dbbe01a7 in
>>> gr::digital::constellation::calc_soft_dec ( this=0x48321c0,
>>> sample=..., npwr=<optimized out>) at
>>> /home/mmaroti/workspace/gnuradio/gr-digital/lib/constellation.cc:286
>>>
>>>
>> #1  0x00007f98dbbe0f7e in gr::digital::constellation::soft_decision_maker (
>>> this=0x48321c0, sample=...) at
>>> /home/mmaroti/workspace/gnuradio/gr-digital/lib/constellation.cc:355
>>>
>>>
>> #2  0x00007f98dbbe94dc in
>>> gr::digital::constellation_soft_decoder_cf_impl::work
>>> (this=0x4fb11a0, noutput_items=8190, input_items=...,
>>> output_items=...) at
>>> /home/mmaroti/workspace/gnuradio/gr-digital/lib/constellation_soft_decoder_cf_impl.cc:68
>>>
>>>
>> #3  0x00007f98e1c5dd38 in gr::sync_interpolator::general_work (
>>> this=0x4fb11c0, noutput_items=<optimized out>, ninput_items=...,
>>> input_items=..., output_items=...) at
>>> /home/mmaroti/workspace/gnuradio/gnuradio-runtime/lib/sync_interpolator.cc:67
>>>
>>>  You should be able to reproduce the problem quite easily, but if
>>> needed I can provided a test program.
>>>
>>> Best, Miklos
>>>
>>> On Mon, Dec 16, 2013 at 7:59 AM, Marcus Müller <mar...@hostalia.de>
>>> wrote:
>>>> Could you post the whole backtrace (as a github gist, pastebin
>>>> etc)? That would be very helpful, along with information such
>>>> as: Compiler (Gcc (version), VC++, clang ...), Platform (Linux,
>>>> win, mac,...), architecture (x86(64), ARMv9, IBM S7390,...) and
>>>> GNU Radio source version.
>>>>
>>>> Thanks and happy hacking, Marcus
>>>>
>>>> On 12/16/2013 01:05 AM, Miklos Maroti wrote:
>>>>>
>>>>> Hi Guys,
>>>>>
>>>>> Constellation soft decoder crashes for constellation_bpsk()
>>>>> and constellation_8psk(). I could not find the cause of this
>>>>> problem, the back trace on my machine points to
>>>>>
>>>>> gnuradio/gr-digital/lib/constellation.cc:286 for(int j = 0; j <
>>>>> k; j++) {
>>>>>
>>>>> which does not make any sense. Any idea what could go wrong?
>>>>>
>>>>> Miklos
>>>>>
>>>>> _______________________________________________
>>>>> Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org
>>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>>>
>>>>
>>>>
>>>> _______________________________________________ Discuss-gnuradio
>>>> mailing list Discuss-gnuradio@gnu.org
>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.15 (GNU/Linux)
>> Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
>>
>> iQEcBAEBAgAGBQJSrvNkAAoJEAFxB7BbsDrLTuIIAKGc2OjoUYgV3Lw8SuarcCjb
>> awWSZUC+jGxiOs5meaDOcfVsR8Viv9D0G98s6Ck0U6uHkJ1GPvzLLkRbxonPEhcB
>> syFs4Uz4nhqYddfuiNTyG4LhWXPWC3i/rm53lngIO50zBRelrGwxWIg4y5VyKwfV
>> JZfQ3duH+4JBe81VNuUw9Cb6/xhxHORD65AhnwOQBYU4w1mIrP1kNokfsFkXK/WN
>> e55jg+inffiRAg47Bz5wl0SsYGFrlNRNq+JnEmCMCR74c5xNE8T3ZO/NfDGxEwjl
>> fqXhY3ZpWqcoFOnizepUs8qvdzosveaFYKF+R474IkoBGZxUMn0Q5d+GxNAhxj4=
>> =G4mf
>> -----END PGP SIGNATURE-----
>
> _______________________________________________
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
From c87344a7145a21efec3ae8c938f0c269c83d75a4 Mon Sep 17 00:00:00 2001
From: Tom Rondeau <t...@trondeau.com>
Date: Mon, 16 Dec 2013 08:43:08 -0500
Subject: [PATCH] digital: if pre_diff_code is not used, use [0, M-1] as the
 code in soft decison calculation.

---
 gr-digital/lib/constellation.cc | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/gr-digital/lib/constellation.cc b/gr-digital/lib/constellation.cc
index aab00f0..7d2c170 100644
--- a/gr-digital/lib/constellation.cc
+++ b/gr-digital/lib/constellation.cc
@@ -273,6 +273,7 @@ namespace gr {
       std::vector<float> s(k, 0);
 
       float scale = d_scalefactor*d_scalefactor;
+      int v;
       
       for(int i = 0; i < M; i++) {
         // Calculate the distance between the sample and the current
@@ -283,10 +284,15 @@ namespace gr {
         // the scaled noise power.
         float d = expf(-dist / (2.0*npwr*scale));
 
+        if(d_apply_pre_diff_code)
+          v = d_pre_diff_code[i];
+        else
+          v = i;
+
         for(int j = 0; j < k; j++) {
           // Get the bit at the jth index
           int mask = 1 << j;
-          int bit = (d_pre_diff_code[i] & mask) >> j;
+          int bit = (v & mask) >> j;
 
           // If the bit is a 0, add to the probability of a zero
           if(bit == 0)
-- 
1.8.3.2

_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to