C# 实现 FFT 正反变换 和 频域滤波

要进行FFT运算首先要构造复数类,参考

http://blog.csdn.net/iamoyjj/archive/2009/05/15/4190089.aspx

 

下面的程序在依赖上述复数类的基础上实现了FFT正反变换算法和频域滤波算法,另外由于一般如果是对实数进行FFT的话,要将FFT得到的复数数组转为实数数组,下面类中的Cmp2Mdl方法的作用就是这个。这个FFT算法是基-2FFT算法,因此,如入的序列必须是2n次方个点长。

频域滤波的基本原理是:

1、  对输入序列进行FFT

2、  得到的频谱乘以一个权函数(滤波器,系统的传递函数)

3、  得到的结果进行IFFT

4、  如果是实数运算的话用Cmp2Mdl方法转为实数

代码如下:

    /// <summary>

    /// 频率分析器

    /// </summary>

    public static class FreqAnalyzer

    {

 

        /// <summary>

        /// 求复数complex数组的模modul数组

        /// </summary>

        /// <param name="input">复数数组</param>

        /// <returns>模数组</returns>

        public static double[] Cmp2Mdl(Complex[] input)

        {

            ///有输入数组的长度确定输出数组的长度

            double[] output = new double[input.Length];

 

            ///对所有输入复数求模

            for (int i = 0; i < input.Length; i++)

            {

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值