Оконные функции Ханнинга и Хэмминга в C # - PullRequest
2 голосов
/ 14 июля 2011

Я пытаюсь реализовать оконные функции Хеннинга и Хэмминга в C #. Я нигде не могу найти образцы .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;
}

Ответы [ 3 ]

3 голосов
/ 15 июля 2011

Вот пример окна Хэмминга, используемого в C # -приложении с открытым исходным кодом, которое я написал некоторое время назад.Он используется в детекторе высоты тона для эффекта автонастройки .

2 голосов
/ 22 марта 2017

Вы можете использовать библиотеку 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

0 голосов
/ 15 июля 2011

Операция «оконный» означает умножение сигнала на оконную функцию.Этот код, который вы нашли, появляется для генерации оконной функции и масштабирования исходного сигнала.Уравнения предназначены только для самой оконной функции, а не для масштабирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...