PySDR icon indicating copy to clipboard operation
PySDR copied to clipboard

Coarse Frequency Synchronization without knowing modulation order.

Open kiran809576 opened this issue 8 months ago • 3 comments

Hey, I tried the Coarse Frequency Synchronization on the QPSK signal, it is working fine. I modified as: psd = np.fft.fftshift(np.abs(np.fft.fft(samples ** 4))) samples = samples * np.exp(-1j2np.pimax_freqt/4.0) But the problem is - in my work I don't know about the order of modulation technique (in fact, I don't know even the modulation technique).

Can you help me in coarse freq sync without knowing the order of the modulation technique? And the other doubt is, does it work for any digital modulation scheme?

kiran809576 avatar Apr 03 '25 11:04 kiran809576

Can you at least assume that the signal is fairly symmetric in freq domain? If so you could try taking an FFT and looking at the max value.

777arc avatar Apr 03 '25 20:04 777arc

Yeah, I tried by taking FFT and looking at the max value - the max_freq is matching with the above mentioned one. But for FFT, I need to use the below one:

fft_signal = np.fft.fftshift(abs(np.fft.fft(abs(samples)))) (instead of taking abs(fft), I need to make fft(abs(samples))) Check the screenshot below.

Image

Till finding max_freq is good, but for removing offset if I multiply with np.exp(-1j2np.pimax_freqt) it is not working. I have to do np.exp(-1j2np.pimax_freqt/M) (M - order of the modulation), but as I said earlier, I don't know about the modulation order before hand.

kiran809576 avatar Apr 04 '25 04:04 kiran809576

Well if you don't know the modulation then I think you want np.fft.fftshift(abs(np.fft.fft(samples))) then shift with np.exp(-2jnp.pimax_freq*t) but instead of doing 1 FFT I would do like 100 and average the results together before grabbing the max

777arc avatar Apr 04 '25 05:04 777arc