/// <summary> /// Выделение огибающей на базе квадратурн. сост /// </summary> public static Vector OgibNew(Vector t, Vector st, double f0) { ComplexVector cV = new ComplexVector(t.N); for (int i = 0; i < t.N; i++) { cV[i] = Complex.Exp(-new Complex(0, 1) * Math.PI * 2 * f0 * t[i]); } ComplexVector newSt = st * cV; return(newSt.RealToVector() + newSt.ImgToVector()); }
/// <summary> /// Сигнал сопряженный по Гильберту /// </summary> /// <param name="st">Исходный сигнал</param> public static Vector ConjugateToTheHilbert(Vector st) { ComplexVector cv = Furie.DPF(st); Complex j = new Complex(0, 1); int n1 = st.N / 2, n2 = st.N; //cv.RealToVector().Visual(); for (int i = 0; i < n1; i++) { cv.DataInVector[i] = cv.DataInVector[i] * (-j); } for (int i = n1; i < n2; i++) { cv.DataInVector[i] = cv.DataInVector[i] * j; } cv = Furie.ODPF(cv); return(cv.RealToVector()); }
/// <summary> /// Сигнал сопряженный по Гильберту /// </summary> /// <param name="st">Исходный сигнал</param> public static Vector ConjugateToTheHilbert(Vector st) { Vector stNew = st.CutAndZero(Functions.NextPow2(st.N)); ComplexVector cv = Furie.fft(stNew); Complex j = new Complex(0, 1); int n1 = stNew.N / 2, n2 = stNew.N; for (int i = 0; i < n1; i++) { cv.DataInVector[i] = cv.DataInVector[i] * (-j); } for (int i = n1; i < n2; i++) { cv.DataInVector[i] = cv.DataInVector[i] * j; } cv = Furie.ifft(cv).CutAndZero(st.N); return(cv.RealToVector()); }