簡體   English   中英

Hanning 和 Hamming window 函數在 C# 中

[英]Hanning and Hamming window functions in C#

我正在嘗試在 C# 中實現Hanning 和 Hamming window 函數 我在任何地方都找不到任何.Net 樣本,我不確定我從 C++ 樣本轉換的嘗試是否能很好地完成工作。

我的問題主要是看公式,我想他們需要在等式右側的某個地方有原始數字——我只是看公式沒有得到它。 (我的數學顯然還沒有那么好。)

到目前為止我所擁有的:


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示例。 它被用於音高檢測器以實現自動調諧效果

您可以使用 Math.NET 庫。

    double[] hannDoubles = MathNet.Numerics.Window.Hamming(dataIn.Length);
    for (int i = 0; i < dataIn.Length; i++)
    {
        dataOut[i] = hannDoubles[i] * dataIn[i];
    }

請參閱我對類似問題的回答: https://stackoverflow.com/a/42939606/246758

“加窗”操作是指將信號乘以 window function。 您找到的這段代碼似乎生成了 window function 並縮放原始信號。 這些方程式僅適用於 window function 本身,而不是縮放比例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM