Hi guys,
I'm reading the code of Airprobe and I found this function.
double gsm_receiver_cf::compute_freq_offset(const gr_complex * input, unsigned first_sample, unsigned last_sample)
{
double phase_sum = 0;
unsigned ii;
for (ii = first_sample; ii < last_sample; ii++) {
double phase_diff = compute_phase_diff(input[ii], input[ii-1]) - (M_PI / 2) / d_OSR;
phase_sum += phase_diff;
}
double phase_offset = phase_sum / (last_sample - first_sample);
double freq_offset = phase_offset * 1625000.0 / (12.0 * M_PI);
return freq_offset;
}
It calculates the frequency offset with "freq_offset = phase_offset * 1625000.0 / (12.0 * M_PI);" I guess the (1625000.0/12*pi) equals (1625000/6)/(2pi) and 1625/6 kbit/s is the modulation rate of GSM.
So, what is the principle of this calculation? How to calculate the freq_offset with phase_offset. I tried some derivation but failed. Can anyone help me to find out the derivation ?
Best wishes,
Zhenhua