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 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!