using System; using System.Collections.Generic; using System.Text; namespace CommonLib.math { public class airthm { //计算ω=exp(j*2*pi/n) public static complex omega(int n) { complex x; x.a = Math.Cos(0 - 2 * Math.PI / n); x.b = Math.Sin(0 - 2 * Math.PI / n); return x; } public static complex[] dft(short[] signal, int n) //(信号,计算结果的长度) { int i, j; complex w1; w1 = omega(n); complex[] w = new complex[n]; for (i = 0; i < n; i++) { w[i] = complex.powcc(w1, i); } complex[] f = new complex[n]; complex temp; //w[i]的次方 complex temp1; //f中单项的值 //耗时部分 for (i = 0; i < n; i++) { f[i].a = 0; f[i].b = 0; for (j = 0; j < n; j++) { temp = complex.powcc(w[i], j); temp1 = complex.commul(signal[j], temp); f[i] = complex.comsum(f[i], temp1); } } return f; } //求幅值 x 信号 n 信号长度 返回 幅值数组 public static double[] amplitude(complex[] x, int n) { int i; double temp; double[] amp = new double[n]; for (i = 0; i < n; i++) { temp = x[i].a * x[i].a + x[i].b * x[i].b; amp[i] = Math.Sqrt(temp); } return amp; } } }