Расскажите как новичку в вопросах оптимизации и повышения быстродействия.
Код:
//////////////////Конвертируем - подробнее//////////////////////////////////
double IQconv(int X)
{
double Y = (double)int.Parse(X.ToString());
if (Y == 1) Y = -1;
if (Y == 2) Y = -0.707;
if (Y == 3) Y = 0;
if (Y == 4) Y = 0.707;
if (Y == 5) Y = 1;
return Y;
}
float[] OFDM_spec(string XI, string XQ, int n, float[] fin)
{
////////////////////////////////////////////////ОБПФ///////////////////////////////////////////////////////////
////////////////////////////////Формирование спектра ОФДМ №1////////////////////////////////////
///////////////////////////////Добавление нулевых поднесущих////////////////////////////////////
for (int i = 0; i < n; i++)
{
fin[i * 2] = 0; // I part of the Complex Number
fin[i * 2 + 1] = 0; // Q part of the Complex Number
}
//////////////////////////////Добавление поднесущих с данными//////////////////////////////////
var pilotsv = new List<int>() { }; //Добавить сюда частоты, если на них нужны пилот-сигналы
int ndatas = 75; int dat_and_pil = ndatas + pilotsv.ToArray().Length;
int[] datas1 = new int[dat_and_pil]; for (int i = 0; i < dat_and_pil; i++) { datas1[i] = i + 1; }
var datas = Enumerable.Range(1+24, dat_and_pil) //datas формируется так, чтобы не включить в себя индексы pilotsv
.Where(val => !pilotsv.Contains(val)) //datas - номера поднесущих
.ToArray();
int[] pilots = pilotsv.ToArray();
float A1, A2, A3, A4; //А здесь уже закладывается сама информация
for (int ii = 0; ii < datas.Length; ii++)
{
for (int i = 0; i < n; i++)
{
A1 = (float)IQconv(XI[ii] - 48); A2 = (float)IQconv(XQ[ii] - 48); //8-DPSK IQ информация
A3 = (float)IQconv(XI[ndatas + ii] - 48); A4 = (float)IQconv(XQ[ndatas + ii] - 48);
if (i == datas[ii]) { fin[i * 2] = A1; fin[i * 2 + 1] = A2; } //Для положительной части спектра
if (i == (n - datas[ii])) { fin[i * 2] = A3; fin[i * 2 + 1] = A4; } //Для отрицательной части спектра
}
}
//////////////////////////////Добавление пилот-сигналов///////////////////////////////////////
for (int ii = 0; ii < pilots.Length; ii++)
{
for (int i = 0; i < n; i++)
{
A1 = (float)10;
A2 = A1; A3 = A1; A4 = A1;
if (i == pilots[ii]) { fin[i * 2] = A1; fin[i * 2 + 1] = A2; }
if (i == (n - pilots[ii])) { fin[i * 2] = A3; fin[i * 2 + 1] = A4; }
}
}
/////////////////////////////////Спектр на ОБПФ №1 сформирован!///////////////////////////////
return fin;
}
Пробовал закомментировать выполнение функции OFDM_spec - выдает результат в 3 раза быстрее. прямо миллисекунд на 300 быстрее. В чем может быть суть?