我正在尝试在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;
}

最佳答案

这是我不久前写的开源C#应用程序中Hamming window in use的示例。它用于autotune effect的音高检测器中。

关于c# - C#中的Hanning和Hamming窗口函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6699106/

10-13 04:44