35 lines
1.1 KiB
C#
35 lines
1.1 KiB
C#
|
|
using System;
|
|||
|
|
|
|||
|
|
namespace FftSharp.Windows
|
|||
|
|
{
|
|||
|
|
public class Tukey : Window, IWindow
|
|||
|
|
{
|
|||
|
|
private readonly double Alpha;
|
|||
|
|
|
|||
|
|
public override string Name => "Tukey";
|
|||
|
|
public override string Description =>
|
|||
|
|
"A Tukey window has a flat center and tapers at the edges according to a cosine function. " +
|
|||
|
|
"The amount of taper is defined by alpha (with low values being less taper). " +
|
|||
|
|
"Tukey windows are ideal for analyzing transient data since the amplitude of transient signal " +
|
|||
|
|
"in the time domain is less likely to be altered compared to using Hanning or flat top.";
|
|||
|
|
|
|||
|
|
public Tukey()
|
|||
|
|
{
|
|||
|
|
Alpha = .5;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public Tukey(double alpha = .5)
|
|||
|
|
{
|
|||
|
|
Alpha = alpha;
|
|||
|
|
}
|
|||
|
|
protected override double windowValue(int index, int size)
|
|||
|
|
{
|
|||
|
|
double m = 2 * Math.PI / (Alpha * size);
|
|||
|
|
int edgeSizePoints = (int)(size * Alpha / 2);
|
|||
|
|
bool isEdge = (index < edgeSizePoints) || (index > size - edgeSizePoints);
|
|||
|
|
|
|||
|
|
return isEdge ? (1 - Math.Cos(index * m)) / 2 : 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|