I am working on modulation and demodulation of BPSK using python. i made a code for modulation and demodulation,while demodulate i tried to compare my actual data bit stream with demodulated bit stream,when no noise is added to the modulated signal i have zero errors after i demodulate. But when i tried to send the modulated wave(iam working on sound waves) from one PC and i used another PC to receive the signal(using pyaudio) and when i try to apply the same demodulation method on the received sound i am getting 50% error(which i think the total demodulation technique is wrong or decision boundary changed because of noise that get added while recording the sound from transmitting pc).

So i need help to figure out which is causing error in demodulation(error i mean after comparing my sent data and the data that i get after demodulation)

is it possible like there will be shift in decision boundary after adding noise in it? if so how can we find the shifted decision boundary for my BPSK.

thanks in advance, any help is greatly appreciated :).


1 Answer 1


Zero-mean noise by itself can't modify the decision boundary. However, the number of things that can go wrong in your system is large.

Is your channel flat or frequency-selective?

You can think of the channel as the sound card and its driver, the loudspeaker, the air, the microphone, and the receiver's sound card and its driver. In my experience, there's very large variability in the frequency response of such a system. You can find the channel's response (for example by transmitting noise or an impulse) and use only the frequency band where it's flat. Or, you can design a wide-band system, but then you'll need an equalizer in the receiver.

Is your carrier synchronizer working?

Plot the received signal and see if its envelope is constant. If it's changing over time, you may have a faulty synchronizer. One quick way to get around this problem is to use DSB-LC modulation and demodulate the signal with an envelope detector.

Are you using a matched filter?

You need one to get optimal signal-to-noise ratio. After your filter, plot the signal's eye diagram. If it's open, then you know that your system up to this point is correct.

Is your symbol timing correct?

Since the clocks of the transmitter and receiver are different, you need to do adaptive symbol timing recovery to properly sample the matched filter's output. To test this, plot the sampled symbols over a long time. If they are correct for some time, but then start to get closer and closer, your symbol timing recovery is off.

Is your frame synchronization correct?

Finally, you need to verify your frame synchronization is correct; otherwise it's very hard to align the transmitted and received streams for bit error calculations.

I'd suggest verifying the correct operation of your system block by block, in the order I have listed them.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.