Esempio n. 1
0
 /// <summary>
 /// 进行单次指纹生成仿真,包括信号生成、加噪和指纹生成
 /// </summary>
 /// <param name="signal_type">信号类型</param>
 /// <param name="noise_type">噪声类型</param>
 /// <param name="noise_params">噪声参数集合,与噪声类型有关</param>
 /// <param name="fingerprint_name">指纹类型</param>
 /// <param name="ray_angles">波束方向集合</param>
 /// <param name="ray_strengths">波束强度集合</param>
 /// <param name="ray_taus">波束时延集合</param>
 /// <param name="N">信号点数</param>
 /// <param name="args">args参数集合,与信号类型有关</param>
 /// <returns></returns>
 public Fingerprint SingleFingerprintSim(Signal_Type signal_type, Noise_Type noise_type, double[] noise_params,
                                      Fingerprint_Name fingerprint_name, List<double>[] ray_angles, List<double>[] ray_strengths,
                                      List<double>[] ray_taus, int N, double[] args)
 {
     MWNumericArray[] signals = new MWNumericArray[ray_angles.GetLength(0)];
     for(int i = 0; i < signals.Length; i++)
     {
         signals[i] = this.GenerateSignal_MW(signal_type, ray_angles[i].ToArray(), ray_strengths[i].ToArray(), ray_taus[i].ToArray(), N, args);
         signals[i] = this.AddNoise_MW(noise_type, signals[i], noise_params);
     }
     Fingerprint fp = this.GenerateFingerprint(signal_type, fingerprint_name, signals, args);
     return fp;
 }
Esempio n. 2
0
 /// <summary>
 /// 生成指纹
 /// </summary>
 /// <param name="signal_type">信号类型</param>
 /// <param name="fingerprint_name">指纹类型</param>
 /// <param name="signals">各接收站的信号集合</param>
 /// <param name="args">args参数集合,与信号类型有关</param>
 /// <returns>指纹参数集合,与指纹类型有关</returns>
 public Fingerprint GenerateFingerprint(Signal_Type signal_type, Fingerprint_Name fingerprint_name, MWNumericArray[] signals, double[] args)
 {
     switch(fingerprint_name)
     {
         case Fingerprint_Name.S:
             {
                 Fingerprint_S.S[] ss = new Fingerprint_S.S[signals.Length];
                 for (int i = 0; i < signals.Length; i++)
                 {
                     if (signals[i] == null)
                         ss[i] = new Fingerprint_S.S();
                     else
                     {
                         MWNumericArray s = (MWNumericArray)sptb.CalcStrength(signals[i]);
                         ss[i] = new Fingerprint_S.S(s.ToScalarDouble());
                     }
                 }
                 Fingerprint_S fp = new Fingerprint_S(ss);
                 return fp;
             }
         case Fingerprint_Name.SA:
             {
                 Fingerprint_SA.SA[] sas = new Fingerprint_SA.SA[signals.Length];
                 switch(signal_type)
                 {
                     case Signal_Type.PSEUDO_DOPPLER:
                         {
                             MWNumericArray fl = new MWNumericArray(args[0]);
                             MWNumericArray fc = new MWNumericArray(args[1]);
                             MWNumericArray fs = new MWNumericArray(args[2]);
                             MWNumericArray fswitch = new MWNumericArray(args[3]);
                             MWNumericArray R = new MWNumericArray(args[4]);
                             MWNumericArray NA = new MWNumericArray(args[5]);
                             for (int i = 0; i < signals.Length; i++)
                             {
                                 if (signals[i] == null)
                                     sas[i] = new Fingerprint_SA.SA();
                                 else
                                 {
                                     MWNumericArray s = (MWNumericArray)sptb.CalcStrength(signals[i]);
                                     MWNumericArray aoa = (MWNumericArray)sptb.CalcPseudoDopplerAOA(signals[i], fl, fc, fs, fswitch, R, NA);
                                     sas[i] = new Fingerprint_SA.SA(s.ToScalarDouble(), aoa.ToScalarDouble());
                                 }
                             }
                             Fingerprint_SA fp = new Fingerprint_SA(sas);
                             return fp;
                         }
                 }
                 return null;
             }
     }
     return null;
 }