Basic question about carrier synchronize in PM demodulation

Hello everyone, let me explain my question:
Let the input signal,Fc=cos(2pifct+a(t)),fc is the carrier’s
frequency,and a(t) is the information which modulated into the carrier.
But the SDR(software define radio)doesn’t processes the input signal Fc
directly, it just deal with the I/Q signal.
Multiplying the input signal Fc by cosine and sine wave, and putting
into low pass filter, the output of this low pass filter are I/Q
The frequency of the cosine and sine wave is fs. Usually,fs should equal
carrier’s frequency fc.
So the I/Q signals can be expressed as follows:
I signal SI=1/2
Q signal SQ=-1/2
If the fs is equal to fc, then fc-fs is equal to 0, and SI and SQ just
contain the modulated information a(t).
But in the real time project, fs isn’t equal to fc, there may be little
Older oscillator and doppler effective will cause the fs having little
difference with fc.
so my question is that, how to remove the errors in SI and SQ which
by fs-fc not equal to zeros, and get SI and SQ as follow:
I signal SI=1/2
Q signal SQ=-1/2*sin(a(t));

May be I have not explain my question well, and make others feel
The input signal can be expressed as Fc=cos(2pifct+a(t)), where fc is
the frequency the carrier, and a(t) is the information which modulated
But the SDR(software define radio) doesn’t deal with the Fc directly, It
just deal with I/Q signal.
I signal: SI=1/2
cos(2pi(fc-fs)t+a(t)),and Q signal:
In the real time application, fc will have little difference with fs,
the difference between fc and fs is call carrier offset.
So, my question is how to remove carrier offset in the I/Q signals.
Thanks for any reply.