打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#的FFT函数
userphoto

2010.09.20

关注
同学编的C#的FFT函数拿出来共享
发信站: BBS 水木清华站 (Mon Jun 16 23:41:25 2003), 转信

struct complex//定义复数
{
        
        //复数a+bi中
        //a为实部,b为虚部
        public  double a;
        public  double b;
        public static complex commul(double x,complex y)
        {
                complex c = new complex();
                c.a = x*y.a;
                c.b = x*y.b;
                
                return c;
        }
        public static complex commulcc(complex x,complex y)
        {
                complex c = new complex();
                c.a = x.a*y.a - x.b*y.b;
                c.b = x.a*y.b + x.b*y.a;
                
                return c;
        }
        public static complex comsum(complex x,complex y)
        {
                complex c = new complex();
                c.a = x.a + y.a;
                c.b = x.b + y.b;
                
                return c;
        }
        public static complex comsum1(double x,complex y)
        {
                complex c = new complex();
                c.a = x + y.a;
                c.b = y.b;
                
                return c;
        }
        public static complex decrease(complex x,complex y)
        {
                complex c = new complex();
                c.a = x.a*y.a - x.b*y.b;
                c.b = x.a*y.b + x.b*y.a;
                
                return c;
        }
        public static complex powcc(complex x,double n)
        {
                int k;
                complex xout;
                xout.a = 1;
                xout.b = 0;
                for(k=1; k<=n; k++)
                {
                        xout = complex.commulcc(xout,x);
                }
                return xout;
        }
        public void show()
        {
                Console.Write(a+" + "+b+"i      ");
        }
}
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(double[] 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;
        }
}
/////////////////////////////////////////////////////////////////////
//调用
                int n=6;
                double[] x = new double[]{1,2,3,4,5,6};//被计算的数组
                complex[] y = new complex[n];//接收复数结果的数组
                double[] z = new Double[n];//接收幅值结果的数组
                y = airthm.dft(x,n);
                z = airthm.amplitude(y,n);





--

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
讨论一下C#面向集合的扩展
C#实现FFT正反变换和频域滤波
C# 实现 复数 运算 类
VC++动态链接库编程之DLL典型实例
快速傅里叶变换与逆变换(一)
傅丽叶变换
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服