Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.Numerics;
- using MathNet.Numerics.IntegralTransforms;
- using MathNet.Numerics.IntegralTransforms.Algorithms;
- using System.Windows.Forms.DataVisualization.Charting;
- namespace DFT
- {
- public partial class Form1 : Form
- {
- #region Zmienne
- Complex[] Data;
- double fs;
- int ProbeNumbers = 100, fx;
- double[] Time;
- Series s1, s2;
- #endregion
- public double g(double t, int f)
- {
- return (3 * Math.Sin((2 * Math.PI * f * t)));
- }
- public double rad2deg(double x)
- {
- return x * 180 / (Math.PI);
- }
- public void button1_Click(object sender, EventArgs e)
- {
- if (radioButton1.Checked)
- {
- fx = 100;
- }
- else
- {
- fx = 105;
- }
- fs = 1000;
- Data = new Complex[ProbeNumbers];
- Time = new Double[ProbeNumbers];
- for (int t = 0; t < Time.Length; t++)
- {
- Time[t] = t * (1 / fs);
- }
- for (int m = 0; m < Data.Count(); m++)
- {
- Data[m] = new Complex(g(Time[m],fx), 0);
- }
- DiscreteFourierTransform DFT = new DiscreteFourierTransform();
- var DFTdata = DFT.NaiveForward(Data, FourierOptions.Matlab);
- s1 = chart1.Series[0];
- s2 = chart1.Series[1];
- s1.Points.Clear();
- s2.Points.Clear();
- double[] amp = new double[DFTdata.Count()];
- for (int i = 0; i < DFTdata.Count(); i++)
- {
- if (DFTdata[i].Magnitude < Math.Pow(10, -5))
- {
- s1.Points.AddXY(Time[i], 0);
- s2.Points.AddXY(Time[i], 0);
- }
- else
- {
- s1.Points.AddXY(i, DFTdata[i].Magnitude);
- s2.Points.AddXY(i, rad2deg(DFTdata[i].Phase));
- }
- }
- }
- public Form1()
- {
- InitializeComponent();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement