Two GMSK decoders with two msg queues

Dear Guys

Thank you for helping me out with my previous question about the
general_work() function, I have done what I want with your help. Now I
have
another problem, here is a fraction of the code:

    self._rcvd_pktq_B = gr.msg_queue()
    self._rcvd_pktq_A = gr.msg_queue()          # holds packets from 

the
PHY

    self.separator = gr.separator_ccc ()

    self.gmsk_demod_A = gmsk2.gmsk2_demod(fg, *args, **kwargs)
    self.gmsk_demod_B = gmsk2.gmsk2_demod(fg, *args, **kwargs)
    self.correlator_A = gr.correlate_access_code_bb(access_code,

threshold)
self.correlator_B = gr.correlate_access_code_bb(access_code,
threshold)

    self.framer_sink_A = gr.framer_sink_1(self._rcvd_pktq_A)
    self.framer_sink_B = gr.framer_sink_1(self._rcvd_pktq_B)

    fg.connect((self.fm_separator, 0), self.gmsk_demod_A,

self.correlator_A, self.framer_sink_A)
fg.connect((self.fm_separator, 1), self.gmsk_demod_B,
self.correlator_B, self.framer_sink_B)

    gr.hier_block.__init__(self, fg, self.fm_separator, None)
    self._watcher_A = _queue_watcher_thread(self._rcvd_pktq_A,

callbackA)
self._watcher_B = _queue_watcher_thread2(self._rcvd_pktq_B,
callbackB)

Here the incoming signal is the sum of two baseband, complex GMSK
signals.
The block “self.separator” implements an algorithm to separate the two
complex signals, recovering the original signals. Then two GMSK decoding
streams are connected to the block, pretty much following what has been
provided.

However, my obeservation was that the two streams produce exactly the
same
packets (which are supposed to be produced only by A, not B, the output
of B
should be different). So could anyone help me check whether I am doing
things correctly here?

Thank you very much

Dawei

On Sat, Oct 14, 2006 at 01:04:43PM -0400, Dawei Shen wrote:

   self.separator = gr.separator_ccc ()

Here the incoming signal is the sum of two baseband, complex GMSK signals.
The block “self.separator” implements an algorithm to separate the two
complex signals, recovering the original signals. Then two GMSK decoding
streams are connected to the block, pretty much following what has been
provided.

I’m not sure what you’re trying to do with gr.separator_ccc. If you’re
just trying to extract two different channels from the complex
baseband signal from the usrp, gr.freq_xlating_fir works great.

However, my obeservation was that the two streams produce exactly the same
packets (which are supposed to be produced only by A, not B, the output of B
should be different). So could anyone help me check whether I am doing
things correctly here?

Have you logged the two outputs of gr.separator_ccc into files and
examined them? Are they by any chance identical?

Eric

Hey, Michael and Eric

Thank you for your reply. Yeah, you are right, the I found out my
problem in
my separator_ccc block, I did something stupid so that the two output
streams become identical. Now I have solved the problem and now
everything
works perfectly.

Basically what I am trying to do is to separate two digital co-channel
signals.

Thank you guys

Dawei

On Mon, Oct 16, 2006 at 10:37:10PM -0400, Dawei Shen wrote:

Hey, Michael and Eric

Thank you for your reply. Yeah, you are right, the I found out my problem in
my separator_ccc block, I did something stupid so that the two output
streams become identical. Now I have solved the problem and now everything
works perfectly.

Great! Glad to hear it works.

Basically what I am trying to do is to separate two digital co-channel
signals.

Thank you guys

You’re welcome. Keep us posted!

Dawei

Eric

Dawei - A first-order read-over of your code looks good to me; there
is nothing obviously incorrect - though of course this is just a code
snippet. The overall code might have other issues.

On Oct 14, 2006, at 1:22 PM, Eric B. wrote:

I’m not sure what you’re trying to do with gr.separator_ccc. If
you’re
just trying to extract two different channels from the complex
baseband signal from the usrp, gr.freq_xlating_fir works great.

Correct me if I’m wrong, Dawei, but I think this is the scenario:
there are 2 different transmitters and 1 receiver, all at the same
(center) frequency and bandwidth. “separator_ccc” is meant to input
the single received signal (at baseband), and separate out the 2
transmissions into 2 streams … kind of like using different CDMA
codes, but he’s trying out a different algorithm (not CDMA).

However, my obeservation was that the two streams produce exactly
the same
packets (which are supposed to be produced only by A, not B, the
output of B
should be different). So could anyone help me check whether I am
doing
things correctly here?

Have you logged the two outputs of gr.separator_ccc into files and
examined them? Are they by any chance identical?

I think that’s what he’s saying, that, yes, the 2 are identical.

I’m guessing that the question is whether or not 2 different GMSK2
demodulators can run at the same time - since they both use threads
to do their work and maybe those threads interact in unexpected
ways. Or maybe some other issues.

There could also be other issues, but I think those would be with
this “separator_ccc” block or other programming that we can’t see. I
would guess he’s trying to make sure everything else works before
going back to debugging that block. I might be wrong :wink: - MLD