SignalGenerator.m
上传用户:shencti
上传日期:2016-08-16
资源大小:16k
文件大小:2k
源码类别:

邮电通讯系统

开发平台:

Matlab

  1. %%产生输入中频数据
  2. function   [signal,signal_noise]=SignalGenerator(EmulateIndex,inputcode,fs,Ts,fi,delay_time,fd,SNR,Bandwidth,code_cycle,sigma_n,f0,N)
  3. %42位查表,低32位为查找表相位值,高10位为码片值
  4. nb=42;             %查找表位数 
  5. fre_nb=2^nb;    
  6. fre_nb_low=2^32;   %查找表的低32位
  7. fre_nb_high=2^10-1;  %查找表的高10位
  8. NCO_phase=0;%载波NCO相位为0
  9. NCO_fre=fre_nb_low/fs; %单位频率对应的频率字
  10.     
  11. %码延时转换为相应的查找表初始相位
  12. time_phase=-(delay_time*fs)*(code_cycle*(1+fd/f0))*NCO_fre;
  13. %码查找表初始相位 从1003开始
  14. global Fre_acumulator;
  15. if ( 1 == EmulateIndex )
  16.     Fre_acumulator = time_phase;
  17. end
  18. % Fre_acumulator=Phase_NCO_init;  %为了使伪码相位连续,使频率字累加初始值等于上一次调用的剩余相位值
  19. L_min=(EmulateIndex-1)*N+1;   %调用此段数据的最小值点和最大值点
  20. L_max=EmulateIndex*N;
  21. for loop_N=1:N
  22.     t_pass=Ts*(loop_N+L_min-1);       
  23.     PN_code_freq=code_cycle*(1+fd/f0);  %存在多普勒时的码率
  24.     PN_Fre_word=PN_code_freq*NCO_fre; %码频率字
  25.     
  26.     Fre_acumulator=Fre_acumulator+PN_Fre_word;   %频率字累加
  27.     Fre_acumulator=mod(Fre_acumulator,fre_nb_low*fre_nb_high);
  28.     %查找对应的码片值
  29.     PNcode_index=fix(Fre_acumulator/fre_nb_low);    
  30.     PNcode_index=mod(PNcode_index,fre_nb_high)+1;
  31.     Code_samp(loop_N)=inputcode(PNcode_index);
  32.     %载波n
  33.     carrier(loop_N)=cos(2*pi*(fi+fd)*Ts.*(loop_N+L_min-1));
  34. end
  35. [Gauss_Noise_NB,Noise_NB_Power] = NB_GaussNoise(sigma_n,N,Bandwidth,fs,fi);
  36. Gauss_Noise_NB(find(Gauss_Noise_NB>3*sigma_n))=3*sigma_n;  %限幅
  37. Gauss_Noise_NB(find(Gauss_Noise_NB<-3*sigma_n))=-3*sigma_n;  %限幅
  38. %%%信号幅度的计算
  39. A = sqrt(2*Noise_NB_Power*10^(SNR/10));      % 接收的数字中频信号的幅度
  40. %输出信号
  41. signal=A*Code_samp.*carrier+Gauss_Noise_NB;
  42. signal_noise=Gauss_Noise_NB ;%只有噪声的情况
  43. % % 没有噪声情况
  44. % signal=A*Code_samp.*carrier;
  45. % signal_noise=zeros(size(Gauss_Noise_NB)) ;%只有噪声的情况
  46.