【发布时间】:2011-07-14 19:48:47
【问题描述】:
我正在尝试在 C# 中实现 Hanning and Hamming window functions。我在任何地方都找不到任何 .Net 示例,我不确定我从 C++ 示例转换的尝试是否能很好地完成这项工作。
我的问题主要是看formulas 我想他们需要在等式右侧的某个地方找到原始数字——我只是看公式没有得到它。 (我的数学显然还没有那么好。)
到目前为止我所拥有的:
public Complex[] Hamming(Complex[] iwv)
{
Complex[] owv = new Complex[iwv.Length];
double omega = 2.0 * Math.PI / (iwv.Length);
// owv[i].Re = real number (raw wave data)
// owv[i].Im = imaginary number (0 since it hasn't gone through FFT yet)
for (int i = 1; i < owv.Length; i++)
// Translated from c++ sample I found somewhere
owv[i].Re = (0.54 - 0.46 * Math.Cos(omega * (i))) * iwv[i].Re;
return owv;
}
public Complex[] Hanning(Complex[] iwv)
{
Complex[] owv = new Complex[iwv.Length];
double omega = 2.0 * Math.PI / (iwv.Length);
for (int i = 1; i < owv.Length; i++)
owv[i].Re = (0.5 + (1 - Math.Cos((2d * Math.PI ) / (i -1)))); // Uhm... wrong
return owv;
}
【问题讨论】:
-
检查你的循环 - 它简单地跳过数组 'owv[0]' 中的第一个元素。它必须是: for (int i = 0; i