📄 mysglgen.m
字号:
% 生成AD采样量化后的中频数字信号,纯信号,用二进制存储
%clear,clc
function ADdata=MySglGen(Svnum,Dopplerfreq)
% Doppler = input('Please input doppler freq(KHz)');
% if(length(Doppler) ==0) Doppler =0; end;
% Svnum = input('Please input satlite number');
% if(length(Svnum) ==0) Svnum =1; end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%参数配置%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fs=4.8e+6; % 采样频率Hz
Doppler = Dopplerfreq;
fIF=3.78e+6 + Doppler; % 中频频率3.78MHz
% fIF=0+Doppler; & test mode without the carrier
% 采样点的伪码和相位初相设置为0
codeindexstart=eps; % 关于码片归一化
carrierindexstart=0; % 关于2pi归一化
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Svnum=1;
nst = 2; % the amplitude of noise
% Amplitue=sqrt(2) * (10^(-19/20)) * nst; % 信号幅度
Amplitue=2;
ChipsPerCycle=1023; % 扩频码一个周期的码片数
ChipsPerBit=ChipsPerCycle*20; % 一个导航电文内包含的码片数
Rc=1.023e+6; % 扩频码的码率
Bit_Num=1; % 共生成Bit_Num个导航电文的长度,每个电文20ms
PN_Index=Svnum; % 卫星PN编号,用来选择不同的伪码,按照GPS协议定义
% 数据存放在该文件中
% 文件格式,1个字节表示一个采用点的数据
% fid=fopen('ADdata.bin','w');
% 生成一个周期的扩频码存放到GoldCode以备调用
GoldCode=CACodeGen(PN_Index);
for k=1:Bit_Num
% SamplesPerBit=ceil((ChipsPerBit-codeindexstart)/(Rc/fs)); % 计算1个bit内的采样点数目
SamplesPerBit=20e-3*fs; % T(one bit)=20ms, n=T*fs:the total sample points in one bit.
% index=floor(mod(codeindexstart+[0:SamplesPerBit-1]*Rc/fs,ChipsPerCycle))+1;% 计算每个采样点的伪码编号
index=mod(floor([0:SamplesPerBit-1]*Rc/fs+codeindexstart),ChipsPerCycle)+1;
LocalCode=GoldCode(index); % 获得1bit内采样的本地伪码
LocalCode=LocalCode*(1-2*(rand>0.5)); % 调制一个随机的导航电文
% codeindexstart=mod(codeindexstart+SamplesPerBit*Rc/fs,ChipsPerCycle); % 重新计算下一个bit的初相
codeindexstart=mod(SamplesPerBit*Rc/fs+codeindexstart,1023);
index=mod(carrierindexstart+[0:SamplesPerBit-1]*fIF/fs,1); % 计算各采样点的载波相位,关于2pi归一化
carrierindexstart=mod(carrierindexstart+SamplesPerBit*fIF/fs,1); % 计算下一个bit的初相
data=Amplitue*LocalCode.*cos(2*pi*index); % 生成扩频信号
% noisedata=nst*randn(1,SamplesPerBit);
% data=data+noisedata;
% partition=linspace(-3,3,6); % 7电平量化
% codebook=[-3:3]; % 分别对应-3,-2,-1,0,+1,+2,+3
% [index,data]=quantiz(data,partition,codebook); %
% fprintf(fid,'%3.0f\n',data);
% fwrite(fid,data,'bit8'); % 数据写入文件
ADdata = data;
end
% fclose(fid);
% % *********** generate the PRN=6 signal ********************************
% GoldCode=CACodeGen(6);
%
% SamplesPerBit=20e-3*fs;
% codeindexstart=floor(1023*rand)+eps;
% index=mod(floor([0:SamplesPerBit-1]*Rc/fs+codeindexstart),ChipsPerCycle)+1;
% LocalCode=GoldCode(index);
% LocalCode=LocalCode*(1-2*(rand>0.5));
% codeindexstart=mod(SamplesPerBit*Rc/fs+codeindexstart,1023);
%
% index=mod(carrierindexstart+[0:SamplesPerBit-1]*fIF/fs,1);
% carrierindexstart=mod(carrierindexstart+SamplesPerBit*fIF/fs,1);
%
% data=Amplitue*LocalCode.*cos(2*pi*index);
% ADdata = ADdata+data;
% % ************************************************************************
%
% % ********** generate the PRN=19 signal ***************************
% GoldCode=CACodeGen(19);
%
% SamplesPerBit=20e-3*fs;
% codeindexstart=floor(1023*rand)+eps;
% index=mod(floor([0:SamplesPerBit-1]*Rc/fs+codeindexstart),ChipsPerCycle)+1;
% LocalCode=GoldCode(index);
% LocalCode=LocalCode*(1-2*(rand>0.5));
% codeindexstart=mod(SamplesPerBit*Rc/fs+codeindexstart,1023);
%
% index=mod(carrierindexstart+[0:SamplesPerBit-1]*fIF/fs,1);
% carrierindexstart=mod(carrierindexstart+SamplesPerBit*fIF/fs,1);
%
% data=Amplitue*LocalCode.*cos(2*pi*index);
% ADdata = ADdata+data;
% % ************************************************************************
%
% % **************** generate the noise ******************************
%noisedata=nst*randn(1,SamplesPerBit);
%ADdata=ADdata+noisedata;
%data=ADdata;
partition=linspace(-3,3,6);
codebook=[-3:3];
[index,data]=quantiz(data,partition,codebook);
[index,ADdata]=quantiz(ADdata,partition,codebook);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -