Диссертация (1149825), страница 16
Текст из файла (страница 16)
ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМАOPTIMISATIONOFPERIODint OptimisationOfPeriod(int fType, int P, int n,int m, int mult, int nWdiscr,int step, float* WorkR, int* AddrIndex,double* AddrSgoal){int number, schetPOend, mDelta, m1, mLocal;double s1 = -1.0, SgoalLocal = -1.0;int IndexLocal, IndexOldLocal, mShift;IndexOldLocal = *AddrIndex;IndexLocal = *AddrIndex;float *pointLocal;bool number1repeat = 0;number = 1; schetPOend = 0; mDelta = 1;if ((fType == 0)&&((n - n0)%(Shift*mm[fType][nWdiscr-1]) == 0)){IndexLocal = Scanner(fType, P, n,mult, nWdiscr, WorkR,&SgoalLocal);mLocal = mm[fType][IndexLocal];}else mLocal = m;GaDiPh(fType, P, n,mLocal, mult, nWdiscr,WorkR, &SgoalLocal);//процедура вычисляет амплитуду, фазу и невязку для mLocalif (mLocal == mm[fType][nWdiscr-1]) mDelta = -mDelta;m1 = mLocal;mLocal += mDelta;Memor(fType, P);s1 = SgoalLocal;127OtkatWorkReduce;LBLP2:GaDiPh(fType, P, n,mLocal, mult, nWdiscr,WorkR, &SgoalLocal);//процедура вычисляет амплитуду, фазу и невязку для mLocalif (s1 <= SgoalLocal)if (number1repeat){Otkat(fType, P);OtkatWorkReduce;mLocal = m1; SgoalLocal = s1; schetPOend = 1; goto LBLPend;}else if (mDelta > 0 && m1 == mm[fType][0] ||mDelta < 0 && m1 == mm[fType][nWdiscr-1]){IndexLocal = Scanner(fType, P, n,mult, nWdiscr, WorkR,&SgoalLocal);mLocal = mm[fType][IndexLocal];schetPOend = 2; goto LBLPend;}else{mDelta = -mDelta; mLocal = m1 + mDelta;number1repeat = 1;goto LBLP2;}LBLP1:number++;if (mLocal == mm[fType][0] || mLocal == mm[fType][nWdiscr-1])128{IndexLocal = Scanner(fType, P, n,mult, nWdiscr, WorkR,&SgoalLocal);mLocal = mm[fType][IndexLocal];schetPOend = 3; goto LBLPend;}s1 = SgoalLocal; m1 = mLocal; mLocal += mDelta;Memor(fType, P);OtkatWorkReduce;GaDiPh(fType, P, n,mLocal, mult, nWdiscr,WorkR, &SgoalLocal);if (SgoalLocal >= s1){Otkat(fType, P);OtkatWorkReduce;mLocal = m1; SgoalLocal = s1; schetPOend = 4; goto LBLPend;}else{if (number > (int)step/2){schetPOend = 5;goto LBLPend;}}goto LBLP1;LBLPend:*AddrIndex = IndexLocal;return mLocal;}129ПРИЛОЖЕНИЕ 5.
ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМАINITIALANAYSISvoid InitialAnalysis(int fType, int P, int mult,int mmin, int mmax, int nWdiscr,float* WorkR, int* AddrIndex, int* AddrStep,double* AddrSgoal){int IndexLocal, stepLocal, mLocal;double SgoalLocal;int tempLocal;NetPeriodFilling(fType, mmin, mmax,nWdiscr, &stepLocal);*AddrStep = stepLocal;IndexLocal = Scanner(fType, P, n0,mult, nWdiscr, WorkR,&SgoalLocal);*AddrIndex = IndexLocal;mNode[fType] = mm[fType][IndexLocal];for (int i = 0; i < 3; i++){mNode[fType] = OptimisationOfPeriod(fType, P, n0+i*Shift,mNode[fType], mult, nWdiscr,stepLocal, WorkR+i*Shift,&IndexLocal, &SgoalLocal);Nodes[fType][i+1][0] = acc*2.0*M_PI/mNode[fType];PhaseShift(fType, P);for (int j = 0; j < P; j++)Nodes[fType][i+1][j+1] = aHalf[fType][j];if (i == 2)for (int j = 0; j < P; j++) phaseprev[fType][j] = phase[fType][j];130else if (i == 1)phasesynth[fType][0] = phase[fType][0] - Nodes[fType][2][0];}for (int k = -k0[fType][0]; k < 0; k++)Mw[fType][k] = Nodes[fType][1][0];for (int k = 0; k < k0[fType][0]; k++)Mw[fType][k] = Nodes[fType][2][0];for (int j = 0; j < P; j++){for (int k = -k0[fType][0]; k < 0; k++)M[fType][j][k] = Nodes[fType][1][j+1];for (int k = 0; k < k0[fType][0]; k++)M[fType][j][k] = Nodes[fType][2][j+1];}}131ПРИЛОЖЕНИЕ 6.
ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМАREGULARANAYSISint RegularAnalysis(int fType, int P, int n,int m, int mult, int nWdiscr,int step, float* WorkR, int* AddrIndex,double* AddrSgoal){int mLocal, IndexLocal;double SgoalLocal;IndexLocal = *AddrIndex;mLocal = OptimisationOfPeriod(fType, P, n,m, mult, nWdiscr,step, WorkR, &IndexLocal,&SgoalLocal);PhaseShift(fType, P);for (int j = 0; j < P; j++)phaseprev[fType][j] = phase[fType][j];*AddrIndex = IndexLocal;return mLocal;}132ПРИЛОЖЕНИЕ 7. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМАAVERAGINGvoid Averaging(int fType, int P, float w){float SLocal, sumMLocal, sumwLocal;SLocal = 0.0;for (int i = 0; i < 3; i++)for (int j = 0; j <= P; j++)Nodes[fType][i][j] = Nodes[fType][i+1][j];for (int j = 0; j < P; j++){sumMLocal = aHalf[fType][j];for (int k = 1-k0[fType][j]; k < k0[fType][j]-1; k++){sumMLocal += M[fType][j][k];M[fType][j][k] = M[fType][j][k+1];}M[fType][j][k0[fType][j]-1] = aHalf[fType][j];Nodes[fType][3][j+1] = sumMLocal/(2.0*k0[fType][j]-1);}sumwLocal = w;for (int k = 1-k0[fType][0]; k < k0[fType][0]-1; k++){sumwLocal += Mw[fType][k];Mw[fType][k] = Mw[fType][k+1];}Nodes[fType][3][0] = sumwLocal/(2.0*k0[fType][0]-1);}133ПРИЛОЖЕНИЕ 8.
ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМАSYNTHESISvoid Synthesis(){float S = 0.0;float Coef3[nAnal][P[fType]+1], Coef2[nAnal][P[fType]+1],Coef1[nAnal][P[fType]+1], Coef0[nAnal][P[fType]+1];for (int fType = 0; fType < nAnal; fType++){for (int j = 1; j <= P[fType]; j++){phasesynth[fType][j-1] += j*Nodes[fType][1][0];phasesynth[fType][j-1] = Minimizer(phasesynth[fType][j-1]);S += sin(phasesynth[fType][j-1])*Nodes[fType][1][j];}}for (int j = 0; j <= P[fType]; j++){Coef3[fType][j] = (Nodes[fType][3][j]-3*Nodes[fType][2][j]+3*Nodes[fType][1][j]-Nodes[fType][0][j])/(2*Shift*Shift*Shift);Coef2[fType][j] = (-Nodes[fType][3][j]+4*Nodes[fType][2][j]5*Nodes[fType][1][j]+2*Nodes[fType][0][j])/(2*Shift*Shift);Coef1[fType][j] = (Nodes[fType][2][j]-Nodes[fType][0][j])/(2*Shift);Coef0[fType][j] = Nodes[fType][1][j];}Out[nExit++] = (UnShort)S;for (int i = 1; i < Shift; i++){S = 0.0;for (int fType = 0; fType < nAnal; fType++)134for (int j = 1; j <= P[fType]; j++){phasesynth[fType][j-1] += j*(Coef3[fType][0]*i*i*i+Coef2[fType][0]*i*i+Coef1[fType][0]*i+Coef0[fType][0]);S += sin(phasesynth[fType][j-1])*(Coef3[fType][j]*i*i*i+Coef2[fType][j]*i*i+Coef1[fType][j]*i+Coef0[fType][j]);}Out[nExit++] = (UnShort)S;}}.