当前位置: 首页 > news >正文

C# 实现傅里叶变化(DFT)

1、DFT函数类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace DFT_FFTApp.Utils
{public class DFT{/// <summary>/// DFT/// </summary>/// <param name="data"></param>/// <returns></returns>public static List<List<double>> DFTNative(List<double> data){int N = data.Count;List<List<double>> xks = new List<List<double>>();for (int k = 0; k < N; k++){List<double> xk = DFTPoint(k, data);xks.Add(xk);}GC.Collect();return xks;}/// <summary>/// 单点DFT/// </summary>/// <param name="k"></param>/// <param name="data"></param>/// <returns></returns>public static List<double> DFTPoint(int k, List<double> data){int N = data.Count;double real = 0;double image = 0;for (int n = 0; n < N; n++){real += data[n] * Math.Cos(2 * Math.PI * (k * n) / N);image -= data[n] * Math.Sin(2 * Math.PI * (k * n) / N);}List<double> res = new List<double>() { real, image };return res;}/// <summary>/// 频域求模/// </summary>/// <param name="data"></param>/// <returns></returns>public static List<double> GetMod(List<List<double>> data){List<double> res= new List<double>();foreach(var  x in data){res.Add(Math.Sqrt(x[0] * x[0] + x[1] * x[1]));}return res;}/// <summary>/// 频域求相位/// </summary>/// <param name="data"></param>/// <returns></returns>public static List<double> GetPhase(List<List<double>> data){List<double> res = new List<double>();foreach (var x in data){double phase = 0;if (x[0] == 0){phase = 90;}else{phase = Math.Atan2(x[1], x[0]);}res.Add(phase);}return res;}}
}

2、应用

private void DFTApp(){List<double> list = GetCaseData(128);List<List<double>> Xk = DFT.DFTNative(list);List<double> res = DFT.GetMod(Xk);foreach (double item in res){Console.WriteLine(item);}easyChartX1.Plot(res, 0, 1);}
/// <summary>/// 获取时域数据/// </summary>/// <param name="points"></param>/// <returns></returns>private List<double> GetCaseData(int points){List<double> data = new List<double>();double w = 2*Math.PI / points;for(int i = 0; i < points;i++){double d=Math.Sin(w * i);//Console.WriteLine($"i={i},d={d.ToString("G2")}");data.Add(d);}return data;}

http://www.mrgr.cn/news/15046.html

相关文章:

  • 38. 字符串的排列【难】
  • 工作中常用的100个知识点
  • centos yum 源停用整改
  • PostgreSQL支持的数据类型
  • 28 TreeView组件
  • MyBatis中#{}和 ${}的区别是什么?
  • VScode应用有哪些?
  • 设计模式 8 组合模式
  • ISIS路由渗透
  • jre与tomcat打包到一起
  • 【C语言进阶】C语言指针进阶实战:优化与难题解析
  • 【Docker】Docker 的基本概念和优势简介
  • Java的IO模型详解-BIO,NIO,AIO
  • 如何构建基于Java SpringBoot的保险业务管理与数据分析系统
  • 目前支持云计算的有哪些厂家?
  • 单例模式(Singleton Pattern)
  • java.io.FileNotFoundException open failed: EACCES (Permission denied)
  • 自建 git 服务器
  • DNS工作流程
  • Visual Basic:多线程编程的优雅之舞