• 大小: 51KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-09-14
  • 语言: 其他
  • 标签: 基频算法  

资源简介

算法主要针对桥梁拉索索力频谱法测试应用 1、调用FFT进行快速傅里叶变换; 2、获取变换后峰值; 3、通过峰值和设计基频比较,取得最接近这几基频的结果

资源截图

代码片段和文件信息

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace CableSlover.BasisClass
{
    public class CSuoliSlover
    {
        /// 
        /// 快速傅立叶变换
        /// 

        /// 当l=0时,存放n个采样输入的实部,返回离散傅里叶变换的模;当l=1时,存放傅里叶变换的n个实部,返回逆傅里叶变换的模
        /// 当l=0时,存放n个采样输入的虚部,返回离散傅里叶变换的幅角;当l=1时,存放傅里叶变换的n个虚部,返回逆傅里叶变换的幅角;幅角的单位为度
        /// 采样点数
        /// 满足n=2的k次方
        /// 当l=0时返回傅里叶变换的n个实部;当l=1时返回逆傅里叶变换的n个实部
        /// 当l=0时返回傅里叶变换的n个虚部;当l=1时返回逆傅里叶变换的n个虚部
        /// 当l=0表示要求本函数进行傅里叶变换计算;当l=1表示要求本函数进行逆傅里叶变换计算
        /// 当il=0时表示不要求本函数计算傅里叶变换或者逆傅里叶变换的模与幅角;当il=1时表示要求本函数计算傅里叶变换或者逆傅里叶变换的模与幅角
        [DllImport(“FFT.dll“ EntryPoint = “kfft“ CharSet = CharSet.Auto CallingConvention = CallingConvention.Cdecl SetLastError = true)]
        public static extern void kfft(double[] pr double[] pi int n int k double[] fr double[] fi int l int il);

        /// 
        /// 归一化
        /// 

        /// 原始数据
        public static void Normalized(double[] DatOri)
        {
            int n = DatOri.Length;
            int i;
            double t = 0.0;
            for (i = 0; i < n; i++)
            {
                t += DatOri[i] * DatOri[i];
            }
            t = Math.Sqrt(t);
            for (i = 0; i < n; i++)
            {
                DatOri[i] = DatOri[i] / t;
            }
        }

        /// 
        /// 获取峰值假设峰值个数PN>n
        /// 

        /// 为待分析的数组
        /// 峰值所在位置数组
        /// 峰值数组
        /// Data数组大小
        /// peak数组的大小
        public static void PeakValue(double[] Data double[] peak double[] Out int m int n)
        {
            int PN = 0;
            double m_Min = Data[0];
            double[] In = new double[m + 2];
            int[] Flag = new int[m];

            In[0] = Data[0] - 1;
            for (int k = 0; k < m; k++)
            {
                In[k + 1] = Data[k];
                Flag[k] = 0;
            }
            In[m + 1] = Data[m - 1] - 1;
            for (int i = 1; i < m + 1; i++)
            {
                if (In[i] < m_Min)
                {
                    m_Min = In[i];
                }
                if ((In[i] > In[i - 1]) && (In[i] > In[i + 1]))//判断中间点是否比两边点的值大
                {
                    Flag[PN] = i;
                    PN++;
                }
            }
            for (int j = 0; j < n; j++)
            {
                Out[j] = m_Min;
                peak[j] = 0;
            }
         

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      11733  2014-08-31 14:08  傅里叶变换基频获取算法\CSuoliSlover.cs

     文件     229425  2009-05-25 16:37  傅里叶变换基频获取算法\FFT.dll

     文件        144  2014-08-31 14:13  傅里叶变换基频获取算法\算法使用说明.txt

     目录          0  2014-08-31 14:11  傅里叶变换基频获取算法

----------- ---------  ---------- -----  ----

               241302                    4


评论

共有 条评论