klhztrader/KLHZ.Trader.Core.Tests/FFTTests.cs

54 lines
1.8 KiB
C#

using KLHZ.Trader.Core.Math.Declisions.Utils;
using MathNet.Numerics;
using MathNet.Numerics.IntegralTransforms;
using System.Security.Cryptography;
namespace KLHZ.Trader.Core.Tests
{
public class FFTTests
{
[Test]
public static void Test()
{
var da = new List<float>();
for (int i = 0; i < 100; i++)
{
da.Add((float)System.Math.Sin(0.5 * i)+(float)System.Math.Cos(0.5 * i));
}
var start = da.ToArray();
var arrv = da.Select(d => new Complex32(d, 0)).ToArray();
Fourier.Forward(arrv);
var tem = arrv.Select(a => Complex32.Abs(a)).ToArray();
var s = tem.Sum();
Fourier.Inverse(arrv);
var res = arrv.Select(a => a.Real).ToArray();
for (int i = 0; i < 1000; i++)
{
var d = res[i] - start[i];
}
}
[Test]
public static void CalcHarmonyPeriodTest1()
{
var period1 = FFT.CaclHarmonycPeriod(TimeSpan.FromHours(1), 1000, 1);
var period2 = FFT.CaclHarmonycPeriod(TimeSpan.FromHours(1), 1000, 2);
var period3 = FFT.CaclHarmonycPeriod(TimeSpan.FromHours(1), 1000, 3);
var period4 = FFT.CaclHarmonycPeriod(TimeSpan.FromHours(1), 1000, 4);
}
[Test]
public static void CalcPhaseRange()
{
var res = FFT.CalcPhaseRange(1, 0, 0, 0.001);
Assert.IsTrue(res.min < System.Math.PI / 2);
Assert.IsTrue(res.min > System.Math.PI / 2 * 0.9);
Assert.IsTrue(res.max > System.Math.PI / 2);
Assert.IsTrue(res.max < System.Math.PI / 2 * 1.1);
}
}
}