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