DSPRelated.com
Forums

MATLAB GMSK simulation

Started by ik303 February 8, 2007
Hello all,

I am an EE university student and want to simulate the physical layer of a
GSM communications system in MATLAB. I have studied several papers and
resources on the web,but I think that I am missing something. Below, I
will try to illustrate my approach, which tries to follow the quadrature
baseband method presented in 
http://www.emc.york.ac.uk/reports/linkpcp/appD.pdf, pages 6-11. Could you
please read through and point out any errors that you spot ? 

1. My function processes 148 bits. In the GSM 05.04 document, it states
that the Dirac pulses (output of the differential encoder) excite a linear
filter with a rect repsonse. The way I do this is replace each of the 148
dirac pulses (1 or -1) with a train of 10 similar values (e.g. [1 1 1 1 1
1 1 1 1 1]) corresponding to a period T = 3.69*10^-6. This would
correspond to sampling the "continuous" square wave at 10x the frequency.
The result is a (1x1480) matrix called "wave".

2.Next step is to filter "wave" with a Gaussian filter. I do this using
the following functions: 

T = 3.69*10^-6;
B = 0.3/T;             
sigma = sqrt(log(2))/(2*pi*B);
time_index = -T:(T/10):T;
%the 10 has to do with sampling the "continuous" square wave at 10x the
frequency
H = (1/sigma)*(1/sqrt(2*pi))*exp((-time.^2)./(2*sigma^2));
b = conv(H,wave)
b = b(1:1480); 

This part is probabaly wrong, but I cant figure out how to do it properly.
Is it correct to keep only the first 1480 values of the resulting
convoluted signal ?

3. Next step is integration of the resulting waveform. This is done using
the cumtrapz (cumulative trapezoidal numerical integration) function:

time_index2 = 0:(T/10):((148*T)-(T/10)) ;
c = cumtrapz(time_index2,b);
%the 10 has to do with sampling the "continuous" square wave at 10x the
frequency

Is this what I am supposed to be doing ?

4.Next step is I/Q decomposition:
I = cos(c);
Q = sin(c);

5.Final step is the FM modulation:
 
f_c = 900*10^6;
m = (I.*sin(2*pi*f_c*time_index2)) + (Q.*cos(2*pi*f_c*time_index2));

Another question that I have is: since the modulating frequency is very
high (900MHz), does that mean that I need at least 1800Msamples++ per
second in order to accurately plot the result ?

Please help me by explaining how you would go about implementing this. Is
what I am doing completely wrong ? 

Thank you in advance for your time, I really appreciate it !
John