实序列傅里叶变换_B Real Sequence Fourier Transform

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Numerics;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using static System.Net.WebRequestMethods;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace Real_Sequence_FFT_B
{
    public partial class Real_Sequence_FFT_B_Form : Form
    {
        static double[] result = new double[64];
        public Real_Sequence_FFT_B_Form()
        {
            InitializeComponent();

        }
 /************************************
        * x(i) = 0.0; i= 0,.....9
        * x(i) = exp^(-(i-10)/15)*sin(2π(i-10)/16)
        * n=64,
        ************************************/
        private void btTransform_Click(object sender, EventArgs e)
        {
            int i, j, n = 64;
            rbPointData.Clear();
            rbTransformData.Clear();
            for (int r = 0; r < n; r++)//clear residual data
            {
                img[r] = 0.0;
                real[r] = 0.0;
            }
            foreach (var series in chart1.Series)
            {
                series.Points.Clear();
            }
            foreach (var series in chart2.Series)
            {
                series.Points.Clear();
            }
            //double[] x = new double[64];
            for (i = 0; i < 10; i++)   //real sequence's front 10 data -> 0.0
            {
                real[i] = 0.0;
                img[i] = 0.0;
            }
            for (i = 10; i < n; i++) // real sequence's behind data
            {
                real[i] = Math.Exp(-(i - 10) / 15.0) * Math.Sin(6.2831853 * (i - 10) / 16.0);
                img[i] = 0.0;
            }

            for (i = 0; i < n; i++)
            {
                chart1.Series[0].Points.AddXY(real[i], img[i]);
            }

            r1fft(real, n);//generate conjugate sequence real[0].....real[n/2] || img[n/2+1].....img[n]
                           //real[n/2+i] = real[n/2-i] i=1.....n/2-1
                           //img[i] = img[n-i], img[n/2+i] = -img[n/2+i], 
                           //real[0]....................real[n/2]real[n/2+1]..................real[n]
                           //real[0]....................real[n/2]              back equal 
                           //real[n-1].......... real[n/2+1]                       |
                           //              |                      img[1]......................img[n/2]
                           //            equal                    -img[n/2+1]................-img[n-1]
            rbPointData.AppendText("\n DISCRETE FOURIER TRANSFORM\n");
            rbPointData.AppendText("\t" + real[0].ToString("f6") + "\t" + "\t");
            chart1.Series[1].Points.AddXY(real[0], 0.0);
            rbPointData.AppendText("\t" + real[1].ToString("f6") + "\t  J " + real[n - 1].ToString("f6"));
            chart1.Series[1].Points.AddXY(real[1], real[n - 1]);
            for (i = 2; i < n / 2; i += 2)
            {
                rbPointData.AppendText("\t" + real[i].ToString("f6") + "\t  J " + real[n - i].ToString("f6"));
                rbPointData.AppendText("\t" + real[i + 1].ToString("f6") + "\t  J " + real[n - i - 1].ToString("f6"));
                chart1.Series[1].Points.AddXY(real[i], real[n - i]);
                chart1.Series[1].Points.AddXY(real[i + 1], real[n - i - 1]);
                rbPointData.AppendText("\n");
            }
            rbPointData.AppendText("\t" + real[n / 2].ToString("f6") + "\t" + "\t");
            rbPointData.AppendText("\t" + real[n / 2 - 1].ToString("f6") + "\t  J " + (-real[n / 2 + 1]).ToString("f6"));
            chart1.Series[1].Points.AddXY(real[n / 2], 0.0);
            for (i = 2; i < n / 2; i += 2)
            {
                rbPointData.AppendText("\t" + real[n / 2 - i].ToString("f6") + "\t  J " + (-real[n / 2 + i]).ToString("f6"));
                rbPointData.AppendText("\t" + real[n / 2 - i - 1].ToString("f6") + "\t  J " + (-real[n / 2 + i + 1]).ToString("f6"));
                chart1.Series[1].Points.AddXY(real[n / 2 - i], -real[n / 2 + i]);
                chart1.Series[1].Points.AddXY(real[n / 2 - i - 1], -real[n / 2 + i + 1]);
                rbPointData.AppendText("\n");
            }

            // write value to r1fft.dat file
            string path = "r1fft.dat";
            FileStream FS_BW = new FileStream(path, FileMode.Create);//r1fft.dat => \bin\debug\r1fft.dat
            BinaryWriter BW = new BinaryWriter(FS_BW);
            for (i = 0; i < n; i++)
            {
                BW.Write(i + ", " + real[i] + ", \n");
            }
            BW.Close();
            FS_BW.Close();

            for (i = 1; i < n / 2; i++)
            {
                real[i] = Math.Sqrt(real[i] * real[i] + real[n - i] * real[n - i]);
            }
            real[n / 2] = Math.Abs(real[n / 2]);

            rbTransformData.AppendText(" X(k) Spectrum:\n");
            for (i = 0; i <= n / 2; i++)
            {
                chart2.Series[0].Points.AddXY(i, real[i]);
                rbTransformData.AppendText("\t" + i.ToString() + "\t " + real[i].ToString("f6"));
            }
        }
    }  
}


实序例傅里叶变换RealSequenceFourierTransformB资源-CSDN文库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值