Loop Bandwidth for Carrier Demodulation loop

I am trying to implement a simple MATLAB model for the demodulators for phase modulated signals (PSK) used in communication systems.

For the detection of the phase modulated output (PM out in the above figure) the bandwidth of the demodulator should be sufficiently lower than the symbol rate (modulation bandwidth) so as to ensure that the PLL is not able to track the modulation. But clearly, low frequency phase noise will be tracked which is the benefit of this demodulator.
Since the demodulator is working as a high pass filter, I assume this can be implemented with just a high pass filter in MATLAB.
I generate the input data as follows:

data = randi([0 7], 1e6,1);
modData = step(pskModulator, data);
scatterplot(modData);


I assume that my symbol rate is 1GS/s and since we want the loop bandwidth to be much lower, I keep it at 100kHz. I generate a high-pass filter as follows:

[b,a] = butter(1,100e3/1e9,'high');
H = tf(b, a, 1/1e9);
freqz(b,a)


Clearly close to 1GHz the filter reaches its pass-band.
MY QUESTION
My issue is that if I pass my input data through this filter, it still gets filtered out. I check it as follows:

angle_out = arrayfun(@(x) angle(x), modData);
angle_out_loop = filter(b,a,angle_out);
out = exp(1i*angle_out_loop);
scatterplot(out)


What am I doing wrong here? How can I make a filter which filters the low frequency noise but not the signal?
Although I have assumed 1GS/s as my symbol rate but how does MATLAB know that the random input data is indeed coming at 1GHz so that the data doesn't get filtered?
I have read similar qustions:Loop Bandwidth for symbol timing recovery but they were less implementation specific. Thanks!

• Rotation of the constellation indicates a frequency offset which is not getting corrected. Apr 2, 2020 at 11:41
• @jithin I am only working with phasors so I think frequency offset could not be the problem... Apr 2, 2020 at 11:45
• I checked that if I reduce the loop Bandwidth further the plot looks more like due the phase noise. I have edited the question to show that. Apr 2, 2020 at 11:47

1 Answer

Your results are not showing that the data is being "filtered out" necessarily but that you are using a non-linear phase filter resulting in group delay variation over your passband, as evidenced by the spread in phase.

Don't use a Butterworth filter to model this. Instead use filters derived from either firls or firpm (remez in Octave) which are linear phase and have constant group delay.

• Thanks a lot for your answer...According to my understanding, the transfer function for the entire loop is a high pass filter for the PM output. So in my model I just assume a high pass filter of bandwidth 100kHz to model the entire loop. Is this reasoning incorrect? Apr 2, 2020 at 12:19
• Oh I see what you are asking! I thought you were just using the inverse of your loop filter as the high pass filter. Let me edit my question. Apr 2, 2020 at 12:26
• Ahh Ok...But in reality does the PLL works as a linear phase filter? Is it possible because RC circuits always have some phase distortion. Apr 2, 2020 at 12:37
• That depends on your PLL design and something you need to be careful about as you see here. The analog loop filter I would implement would typically be done with an Op-amp as a PI loop filter, so just has a single pole at the origin (and the loop would have two poles at the origin due to the VCO, so 2nd order type 2 loop). Any other poles introduced would be strictly to limit high frequency noise but not dominant within the loop bandwidth. Apr 2, 2020 at 12:57
• Thank you very much!... One last question I promise... For the butterworth filter I used here, I kept the bandwidth of 100kHz so frequencies higher than 100kHz will be allowed to pass. I want to set the sampling frequency at 1GHz (sample rate) so that it is in passband. I use filter function to apply high pass filter to the input modulated data. But how does the filter function know that the input sampling rate is 1GHz because I give no sampling rate information to the function. In other words, what is the frequency of the input data according to the filter function? Apr 2, 2020 at 13:17