<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/258550</link>
    <title>MATLAB Central Newsreader - signal propagation time and pilot signal acquisition</title>
    <description>Feed for thread: signal propagation time and pilot signal acquisition</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Fri, 14 Aug 2009 18:48:03 -0400</pubDate>
      <title>signal propagation time and pilot signal acquisition</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/258550#673305</link>
      <author>Md.Humayun Kabir</author>
      <description>&lt;br&gt;
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. &lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
I also need suggestion regarding Despreading of Pilot channel signal to estimate time delay.&lt;br&gt;
&lt;br&gt;
Thank you in advanced.&lt;br&gt;
&lt;br&gt;
Kabir&lt;br&gt;
--------&lt;br&gt;
&lt;br&gt;
clc; clear all; close all;&lt;br&gt;
&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
%       IS-95 CDMA&lt;br&gt;
%       BitRate = 9.6e3;&lt;br&gt;
%       ChipRate = 1.2288e6; &lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
%%%%%%%%  Transmitter side %%%%%%%%%%%&lt;br&gt;
data_all_zero = zeros([1,384]);   &lt;br&gt;
&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
%%%%%%%%%%%   WALSH CODING  %%%%%%%%&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
channel_num=1;    % walsh channel &lt;br&gt;
walsh_matrix=hadamard(64); &lt;br&gt;
&lt;br&gt;
for wcol=1:64 &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for wrow=1:64 &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if walsh_matrix(wcol,wrow)==1; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;walsh_matrix(wcol,wrow)=0; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;walsh_matrix(wcol,wrow)=1; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;end &lt;br&gt;
end &lt;br&gt;
&lt;br&gt;
%initialise a variable for holding Walsh coded data chips stream &lt;br&gt;
walshed1=zeros([1,24576]); &lt;br&gt;
for i=1:length(data_all_zero) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;st=((i-1)*64)+1; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if data_all_zero(i)==0 &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;walshed1(st:st+63)=walsh_matrix(channel_num,:); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if data_all_zero(i)==1 &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;walshed1(st:st+63)= ~(walsh_matrix(channel_num,:)); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;end &lt;br&gt;
end &lt;br&gt;
walshed=walshed1; &lt;br&gt;
&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
%%%%%%%%%%%   MODULATION    %%%%%%%%&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
N= length(walshed)/2;&lt;br&gt;
&lt;br&gt;
Ishift=zeros([1,14]); &lt;br&gt;
Ishift=[Ishift 1];          % initial value for I pilot PN sequence generator&lt;br&gt;
Qshift=zeros([1,14]); &lt;br&gt;
Qshift=[Qshift 1];          % initial value for Q pilot PN sequence generator&lt;br&gt;
&lt;br&gt;
outI=zeros([1,N]);          % make two arrays to hold the I and Q bit streams of data &lt;br&gt;
outQ=zeros([1,N]);          % each stream hold a total of 12288 bits &lt;br&gt;
&lt;br&gt;
%seperate the incoming 24576 walsh code modulated data bit stream &lt;br&gt;
for i=1:2:length(walshed) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outI(round(i/2))=walshed(i); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outQ(round(i/2))=walshed(i+1); &lt;br&gt;
end &lt;br&gt;
&lt;br&gt;
tranI=zeros([1,N]);&lt;br&gt;
tranQ=zeros([1,N]); &lt;br&gt;
&amp;nbsp;&lt;br&gt;
sI=zeros([1,N]); &lt;br&gt;
sQ=zeros([1,N]); &lt;br&gt;
&lt;br&gt;
%perform modulo-2 addition with the respective PN sequence each stream contains&lt;br&gt;
%12288 chips=24576/2 and set data symbol 0-&amp;gt;-1 and 1-&amp;gt;1 &lt;br&gt;
for i=1:N &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sI(i)=Ishift(15); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sQ(i)=Qshift(15); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tranI(i)=mod((outI(i)+Ishift(15)),2); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tranQ(i)=mod((outQ(i)+Qshift(15)),2); &lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if tranI(i)==0 &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tranI(i)=-1; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end &lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if tranQ(i)==0 &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tranQ(i)=-1; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end &lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%The I and Q pilot PN sequence generating polynomials &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%I=x^15+x^13+x^9+x^8+x^7+x^5+1 &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%Q=x^15+x^12+x^11+x^10+x^6+x^5+x^4+x^3+1 &lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%we calculate the Q and I LFSR feedback value &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ifeed=mod((Ishift(15)+Ishift(13)+Ishift(9)+Ishift(8)+ Ishift(7)+Ishift(5)),2); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Qfeed=mod((Qshift(15)+Qshift(12)+Qshift(11)+Qshift(10)+Qshift(6)+Qshift(5)+ Qshift(4)+Qshift(3)),2); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%shifting &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ishift(2:15)=Ishift(1:14); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Qshift(2:15)=Qshift(1:14); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%shifting for the LFSRS &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ishift(1)=Ifeed; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Qshift(1)=Qfeed; &lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
%%%%%% generate carrier signal&lt;br&gt;
fc=890e6;                 % Forward Link: carrier freq. 869 to 894 MHz  &lt;br&gt;
fs=1.2288e6;              % sample rate = chip rate &lt;br&gt;
t=[0:length(tranI)-1]/fs; &lt;br&gt;
&lt;br&gt;
%fs=8.*1.2288e6;          % sample rate = 8*chip rate  &lt;br&gt;
%t=(0:8*length(tranI)-1)/fs; &lt;br&gt;
&lt;br&gt;
c_cos=cos(2*pi*fc*t); 	  % carrier cos; &lt;br&gt;
c_sin=sin(2*pi*fc*t); 	  % carrier sin; &lt;br&gt;
&lt;br&gt;
tranIc= tranI.*c_cos;     % I-channel multiply carrier&lt;br&gt;
tranQc= tranQ.*c_sin;     % Q-channel multiply carrier&lt;br&gt;
&lt;br&gt;
T_oWave=tranIc+j.*tranQc; % i.e. Transmitted wave = I+jQ;&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
%%%%%%%%%%%   AWGN CHANNEL    	  %%%%%%%&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
&amp;nbsp;SNR   = 30;    % snr in dB&lt;br&gt;
&amp;nbsp;noise = randn(size(T_oWave));&lt;br&gt;
&amp;nbsp;const = std(T_oWave)/(std(noise).*10^(SNR/20));&lt;br&gt;
&lt;br&gt;
%%%%%%%% Receiver side %%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
Rx = T_oWave + noise.*const; &lt;br&gt;
I_loc_carrier=c_cos;&lt;br&gt;
Q_loc_carrier=c_sin;&lt;br&gt;
&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
%%%%%%%%%%%    DEMODULATION      %%%%%%%%&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
N = length(Rx);&lt;br&gt;
real_Rx = Rx.*I_loc_carrier;&lt;br&gt;
imag_Rx = Rx.*Q_loc_carrier;&lt;br&gt;
&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
%seperate the I and Q streams &lt;br&gt;
outI2=zeros([1,N]); &lt;br&gt;
outQ2=zeros([1,N]); &lt;br&gt;
&lt;br&gt;
for i=1:N &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;if real_Rx(i)&amp;gt;=0 &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outI2(i)=1; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;end &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;if real_Rx(i)&amp;lt;0 &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outI2(i)=0; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;end &lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;if imag_Rx(i)&amp;gt;=0 &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outQ2(i)=(1*sqrt(-1)); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outQ2(i)=imag(outQ2(i)); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;end &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;if imag_Rx(i)&amp;lt;0 &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outQ2(i)=(0*sqrt(-1)); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outQ2(i)=imag(outQ2(i)); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;end &lt;br&gt;
end &lt;br&gt;
&lt;br&gt;
&amp;nbsp;Rx_I_data = outI2';&lt;br&gt;
&amp;nbsp;Rx_Q_data = outQ2';&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&amp;nbsp;Rx_Isg = [Rx_I_data Rx_I_data];&lt;br&gt;
&amp;nbsp;Rx_Qsg = [Rx_Q_data Rx_Q_data];&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
%--- PN Spreading sequences generation-----&lt;br&gt;
&lt;br&gt;
Gi_ind = [15, 13, 9, 8, 7, 5, 0]';&lt;br&gt;
Gq_ind = [15, 12, 11, 10, 6, 5, 4, 3, 0]';&lt;br&gt;
&lt;br&gt;
Gi = zeros(16, 1);&lt;br&gt;
Gi(16-Gi_ind) = ones(size(Gi_ind));&lt;br&gt;
Zi = [zeros(length(Gi)-1, 1); 1];     % Initial State for I-Channel PN generator&lt;br&gt;
&lt;br&gt;
Gq = zeros(16, 1);&lt;br&gt;
Gq(16-Gq_ind) = ones(size(Gq_ind));&lt;br&gt;
Zq = [zeros(length(Gq)-1, 1); 1];     % Initial State for Q-Channel PN generator&lt;br&gt;
&lt;br&gt;
% Rate = 1.2288 Mcps&lt;br&gt;
[PNi Zi] = PNGen(Gi, Zi, N);          % I-channel PN generation&lt;br&gt;
[PNq Zq] = PNGen(Gq, Zq, N);          % Q-channel PN generation&lt;br&gt;
&lt;br&gt;
&amp;nbsp;Dspr_PNi = [PNi PNi];&lt;br&gt;
&amp;nbsp;Dspr_PNq = [PNq PNq];&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&amp;nbsp;%%% perform Correlations  %%%%%% &lt;br&gt;
&lt;br&gt;
&amp;nbsp;w=N;&lt;br&gt;
&amp;nbsp;for n=1:w&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Corr1i(n) = Rx_Isg(1:w)*Dspr_PNi(n:w-1+n)'; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Corr2i(n) = Rx_Qsg(1:w)*Dspr_PNi(n:w-1+n)'; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Corr1q(n) = Rx_Isg(1:w)*Dspr_PNq(n:w-1+n)'; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Corr2q(n) = Rx_Qsg(1:w)*Dspr_PNq(n:w-1+n)';           &lt;br&gt;
&amp;nbsp;end&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&amp;nbsp;Corr1iq = Corr1i + Corr2q;  &lt;br&gt;
&amp;nbsp;Corr2iq = Corr1q - Corr2i;&lt;br&gt;
&amp;nbsp;Corr12  = Corr1iq.*Corr1iq + Corr2iq.*Corr2iq;&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&amp;nbsp;[peak ph] = max(Corr12);&lt;br&gt;
&amp;nbsp;chip_delay = length(Corr12)- ph&lt;br&gt;
&amp;nbsp;plot(Corr12)&lt;br&gt;
--------------------------------------------------------</description>
    </item>
  </channel>
</rss>

