/// <summary> /// Вычисляет интегральную функцию комплексный вектор /// </summary> /// <returns></returns> public static ComplexVector Integral(ComplexVector A) { int kRasshR = 2; ComplexVector B = new ComplexVector(A.N), C, D = A.InterpolayrZero(kRasshR); for (int i = 0; i < A.N; i++) { C = A.CutAndZero(i); B.DataInVector[i] = Summ(C); } return(B); }
/// <summary> /// Прямая свертка комплексный вектор /// </summary> public static ComplexVector DirectConvolution(ComplexVector A, ComplexVector B) { int nMax = A.N + B.N - 1; ComplexVector st, ht; Complex[] convolut = new Complex[nMax]; for (int n = 0; n < nMax; n++) { st = A.CutAndZero(n); ht = B.CutAndZero(n); ht = ht.Revers(); convolut[n] = Functions.Summ(st * ht); } return(new ComplexVector(convolut)); }
/// <summary> /// Круговая свертка комплексный вектор /// </summary> public static ComplexVector СircularConvolution(ComplexVector A, ComplexVector B) { if (A.N == B.N) { int nMax = A.N; ComplexVector st, ht; Complex[] convolut = new Complex[nMax]; for (int n = 0; n < nMax; n++) { st = A.CutAndZero(n); ht = B.CutAndZero(n); ht = ht.Revers(); convolut[n] = Functions.Summ(st * ht); } return(new ComplexVector(convolut)); } else { return(DirectConvolution(A, B)); } }
/// <summary> /// Возвращает комплексный вектор спектра сигнала /// </summary> /// <param name="inp">Массив значений сигнала. Количество значений должно быть степенью 2</param> /// <returns>Массив со значениями спектра сигнала</returns> private static ComplexVector ifft1(ComplexVector inp) { ComplexVector inpV = inp.CutAndZero(Functions.NextPow2(inp.N)); return(new ComplexVector(ifft(inpV.DataInVector))); }
/// <summary> /// Возвращает комплексный вектор спектра сигнала /// </summary> /// <param name="inp">Массив значений сигнала. Количество значений должно быть степенью 2</param> /// <returns>Массив со значениями спектра сигнала</returns> public static ComplexVector fft(ComplexVector inp) { ComplexVector inpV = inp.CutAndZero(Functions.NextPow2(inp.N)); return(new ComplexVector(fft(inpV.DataInVector))); }
/// <summary> /// ОБПФ /// </summary> /// <param name="inp">Вход</param> public ComplexVector IFFT(ComplexVector inp) { ComplexVector cV = !inp.CutAndZero(_n); // Комплексно-сопряженный вектор return(new ComplexVector(FFT(cV.DataInVector))); }