I have a simple BPSK demodulator. Very simply, the signal comes in and is split into two branches, one for I and one for Q.
- The I branch is mixed with a sin wave of the carrier, and the Q branch mixed with the cosine wave of the carrier.
- Then, each of the outputs is convolved with a matched filter, (in this case a root-raised-cosine, which initially pulse shaped my transmitted bits).
- Now, if I combine both outputs and take the magnitude of both of them (I^2 + Q^2), I get the envelope.
- From here, I look for peaks, and choose their indicies.
- I then use those same indicies that I got from (4), and sample my I and Q at those same indicies. Now I have complex softbit values, and am able to correct for any phase or frequency offsets, and can make hard decisions from there. (I have the luxury of post processing btw).
This technique worked well with high to medium SNR. The problem is that with lower SNR (and maybe multipath), I do not know how to perform bullet (4). The problem is that instead of one peak in the envelopes corresponding to one bit, I now have multiple peaks, and 'peak picking' wont work because there are so many to choose from... how is this problem mitigated? This seems to be a bottleneck because if I cannot tell where my 'bit' is, I cannot move forward. Any thoughts?
Any help is appreciated, math is good, although I would ask the answers be more pesudo-code /concept oriented in advance. Thanks!
Edit: Thanks to feedback from Dilip, I should also add that I can clearly see 'energy' in the envelope when there is a signal and there isnt a signal. (ie, before my signal arrived), so this leads me to believe that I should be able to sync/demod and that it isnt an SNR issue solely...