|
Hello, I am trying to simulate the Pilot channel acquisition in IS-95 CDMA system. Could you please give me any suggestion how I can make delay 17 nsec of transmitted signal. So that signal could propagate arround 5 meter distance.
In my m-file simulation(stated bellow), I consider 1 sample per chip. I need matlab coding for oversampling , so that it could be, 1 chip = 48 sample.
I also need suggestion regarding Despreading of Pilot channel signal to estimate time delay.
Thank you in advanced.
Kabir
--------
clc; clear all; close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% IS-95 CDMA
% BitRate = 9.6e3;
% ChipRate = 1.2288e6;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%% Transmitter side %%%%%%%%%%%
data_all_zero = zeros([1,384]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%% WALSH CODING %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
channel_num=1; % walsh channel
walsh_matrix=hadamard(64);
for wcol=1:64
for wrow=1:64
if walsh_matrix(wcol,wrow)==1;
walsh_matrix(wcol,wrow)=0;
else
walsh_matrix(wcol,wrow)=1;
end
end
end
%initialise a variable for holding Walsh coded data chips stream
walshed1=zeros([1,24576]);
for i=1:length(data_all_zero)
st=((i-1)*64)+1;
if data_all_zero(i)==0
walshed1(st:st+63)=walsh_matrix(channel_num,:);
end
if data_all_zero(i)==1
walshed1(st:st+63)= ~(walsh_matrix(channel_num,:));
end
end
walshed=walshed1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%% MODULATION %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N= length(walshed)/2;
Ishift=zeros([1,14]);
Ishift=[Ishift 1]; % initial value for I pilot PN sequence generator
Qshift=zeros([1,14]);
Qshift=[Qshift 1]; % initial value for Q pilot PN sequence generator
outI=zeros([1,N]); % make two arrays to hold the I and Q bit streams of data
outQ=zeros([1,N]); % each stream hold a total of 12288 bits
%seperate the incoming 24576 walsh code modulated data bit stream
for i=1:2:length(walshed)
outI(round(i/2))=walshed(i);
outQ(round(i/2))=walshed(i+1);
end
tranI=zeros([1,N]);
tranQ=zeros([1,N]);
sI=zeros([1,N]);
sQ=zeros([1,N]);
%perform modulo-2 addition with the respective PN sequence each stream contains
%12288 chips=24576/2 and set data symbol 0->-1 and 1->1
for i=1:N
sI(i)=Ishift(15);
sQ(i)=Qshift(15);
tranI(i)=mod((outI(i)+Ishift(15)),2);
tranQ(i)=mod((outQ(i)+Qshift(15)),2);
if tranI(i)==0
tranI(i)=-1;
end
if tranQ(i)==0
tranQ(i)=-1;
end
%The I and Q pilot PN sequence generating polynomials
%I=x^15+x^13+x^9+x^8+x^7+x^5+1
%Q=x^15+x^12+x^11+x^10+x^6+x^5+x^4+x^3+1
%we calculate the Q and I LFSR feedback value
Ifeed=mod((Ishift(15)+Ishift(13)+Ishift(9)+Ishift(8)+ Ishift(7)+Ishift(5)),2);
Qfeed=mod((Qshift(15)+Qshift(12)+Qshift(11)+Qshift(10)+Qshift(6)+Qshift(5)+ Qshift(4)+Qshift(3)),2);
%shifting
Ishift(2:15)=Ishift(1:14);
Qshift(2:15)=Qshift(1:14);
%shifting for the LFSRS
Ishift(1)=Ifeed;
Qshift(1)=Qfeed;
end
%%%%%% generate carrier signal
fc=890e6; % Forward Link: carrier freq. 869 to 894 MHz
fs=1.2288e6; % sample rate = chip rate
t=[0:length(tranI)-1]/fs;
%fs=8.*1.2288e6; % sample rate = 8*chip rate
%t=(0:8*length(tranI)-1)/fs;
c_cos=cos(2*pi*fc*t); % carrier cos;
c_sin=sin(2*pi*fc*t); % carrier sin;
tranIc= tranI.*c_cos; % I-channel multiply carrier
tranQc= tranQ.*c_sin; % Q-channel multiply carrier
T_oWave=tranIc+j.*tranQc; % i.e. Transmitted wave = I+jQ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%% AWGN CHANNEL %%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SNR = 30; % snr in dB
noise = randn(size(T_oWave));
const = std(T_oWave)/(std(noise).*10^(SNR/20));
%%%%%%%% Receiver side %%%%%%%%%%%
Rx = T_oWave + noise.*const;
I_loc_carrier=c_cos;
Q_loc_carrier=c_sin;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%% DEMODULATION %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N = length(Rx);
real_Rx = Rx.*I_loc_carrier;
imag_Rx = Rx.*Q_loc_carrier;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%seperate the I and Q streams
outI2=zeros([1,N]);
outQ2=zeros([1,N]);
for i=1:N
if real_Rx(i)>=0
outI2(i)=1;
end
if real_Rx(i)<0
outI2(i)=0;
end
if imag_Rx(i)>=0
outQ2(i)=(1*sqrt(-1));
outQ2(i)=imag(outQ2(i));
end
if imag_Rx(i)<0
outQ2(i)=(0*sqrt(-1));
outQ2(i)=imag(outQ2(i));
end
end
Rx_I_data = outI2';
Rx_Q_data = outQ2';
Rx_Isg = [Rx_I_data Rx_I_data];
Rx_Qsg = [Rx_Q_data Rx_Q_data];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%--- PN Spreading sequences generation-----
Gi_ind = [15, 13, 9, 8, 7, 5, 0]';
Gq_ind = [15, 12, 11, 10, 6, 5, 4, 3, 0]';
Gi = zeros(16, 1);
Gi(16-Gi_ind) = ones(size(Gi_ind));
Zi = [zeros(length(Gi)-1, 1); 1]; % Initial State for I-Channel PN generator
Gq = zeros(16, 1);
Gq(16-Gq_ind) = ones(size(Gq_ind));
Zq = [zeros(length(Gq)-1, 1); 1]; % Initial State for Q-Channel PN generator
% Rate = 1.2288 Mcps
[PNi Zi] = PNGen(Gi, Zi, N); % I-channel PN generation
[PNq Zq] = PNGen(Gq, Zq, N); % Q-channel PN generation
Dspr_PNi = [PNi PNi];
Dspr_PNq = [PNq PNq];
%%% perform Correlations %%%%%%
w=N;
for n=1:w
Corr1i(n) = Rx_Isg(1:w)*Dspr_PNi(n:w-1+n)';
Corr2i(n) = Rx_Qsg(1:w)*Dspr_PNi(n:w-1+n)';
Corr1q(n) = Rx_Isg(1:w)*Dspr_PNq(n:w-1+n)';
Corr2q(n) = Rx_Qsg(1:w)*Dspr_PNq(n:w-1+n)';
end
Corr1iq = Corr1i + Corr2q;
Corr2iq = Corr1q - Corr2i;
Corr12 = Corr1iq.*Corr1iq + Corr2iq.*Corr2iq;
[peak ph] = max(Corr12);
chip_delay = length(Corr12)- ph
plot(Corr12)
--------------------------------------------------------
|