void SSMethod(double *S, double *G, double *D, double *X1, int N){ int i; double temp; for(i=0; i<N; i++){ temp = 1 - (D[i]/absComplex(X1[2*i+1],X1[2*i+2])); G[i] = (temp+fabs(temp))/2; S[2*i+1] = G[i]*X1[2*i+1]; S[2*i+2] = G[i]*X1[2*i+2]; } }
vector<double> MatchParam::getParams(vector<cplx> signal, int numP, int fi0PP, int stepDopler) { vector<double> result(5); int nUmp = periodRecordImp[numP]; // vector<vector<vector<vector<vector<double>>>>> fMMMP; std::size_t signalLenght = signal.size(); vector<cplx> signalFFT(signalLenght, 0); signalFFT = dft(signal); vector<double> signalModule = absComplex(signalFFT); int targetStep = (target.max - target.min)/target.numbPoints; int clutterStep = (clutter.max - clutter.min)/clutter.numbPoints; int widthClutterStep = widthClutter.max/widthClutter.numbPoints; int amplStep = ampl.max/ampl.numbPoints; double threshold = 2000; std::size_t freqTarget = target.min; #pragma omp parallel for for (freqTarget = target.min; freqTarget < target.max; freqTarget += targetStep) { std::cout << freqTarget << std::endl; for (std::size_t freqClutter = clutter.min; freqClutter < clutter.max; freqClutter += clutterStep) { for (std::size_t widClutter = widthClutter.min; widClutter < widthClutter.max; widClutter += widthClutterStep) { for (std::size_t aTarget = ampl.min; aTarget < ampl.max; aTarget += amplStep) { for (std::size_t aClutter = ampl.min; aClutter < ampl.max; aClutter += amplStep) { vector<cplx> bearingSignal(signalLenght); std::size_t n = widClutter/widthClutterStep + 1; double fd = 1200000/periodRecordImp[numP]; for (std::size_t i = 0; i < signalLenght; ++i) { cplx clutt = cplx(0, 0); double value = (1/fd) * i; for (std::size_t j = 0; j < n; ++j) { double freqClutterI = freqClutter - widClutter/2 + widthClutterStep * j; clutt += cplx(aClutter, 0) * std::exp(cplx(0, 1) * freqClutterI); } bearingSignal[i] = cplx(aTarget, 0) * std::exp(cplx(0, 1) * cplx(freqTarget, 0) * cplx(value, 0)) + clutt * cplx(value, 0); } vector<cplx> bearingSpectr = dft(bearingSignal); vector<double> bearingModule = absComplex(bearingSpectr); vector<double> diff = difference(signalModule, bearingModule); double error = 0; for (auto const& value: diff) { error += value; } if (abs(error) < threshold) { threshold = abs(error); result[0] = freqTarget; result[1] = freqClutter; result[2] = widClutter; result[3] = aTarget; result[4] = aClutter; } } } } } } return result; }
void NoiseSpecterEstimate(double *D, double *X1, int P, int N){ int i; for(i=0; i<N; i++){ D[i] += (absComplex(X1[2*i+1],X1[2*i+2])/P); } }