ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
1343370 Топик полностью
Связанные сообщения
FirБих
Рассчитывается КИХ фильтр так. Отклик в частотной области представляет ступеньку, во временной области представляет sinc-функцию...2023-08-23
Если требования к потреблению не более 30-50 мВт, то возможно ли реализовать на МК полосовой фильтр высокой добростнойстью? АЧХ ...2011-06-05
Generalизверг (23.08.2023 09:37, просмотров: 402) ответил RxTx на Рассчитывается КИХ фильтр так. Отклик в частотной области представляет ступеньку, во временной области представляет sinc-функцию. И если надо то наоборот. Значит наша задача не более чем сгенерировать sinc-функцию. Коэффициенты КИХ фильтра её и представляют. И вся фильтрация, т.е. фильтр будет представлять собой банальную свертку с ней, т.е. к коэффициентами). Налабал демо-код в дикой спешке, у меня нет времени писать красиво, завтра с утра ехать запускать проект и я
Спасибо, то что нужно. Простейшее понятное объяснение расчёта FIR без МАТКАДа. Допишу что ещё узнал. Конечно интересно получить такое же объяснение для тупых для случая IIR он же БИХ -кажется он должен быть ещё проще вследствии реккурентной формулы расчёта 
#define PI 3.14159265

#define NumTaps 51       // Длина ядра фильтра
float Koefficients[NumTaps];   // коэфф. фильтра, оно ж ядро

float Fcutoff = 0.003;     // F среза, задается в диапазоне от 0  до 0.5 от F сэмплирования исх. сигнала

// Расчет ядра фильтра aka sinc-фунции
void CalcFIR(void)
{

    // Расчет коэфф. фильтра.  
    for (int i = 0 ; i < NumTaps ; i++)
    {
        if ( (i-NumTaps/2) == 0) 
        { 
            Koefficients[i] = 2*PI*Fcutoff; 
        }
        else if ((i-NumTaps/2) != 0)  
        { 
            Koefficients[i] = sinf(2*PI*Fcutoff * (i-NumTaps/2)) / (i-NumTaps/2);
        }

        Koefficients[i] = Koefficients[i] * (0.42f - 0.5f * cosf( 2*PI*i/NumTaps ) + 0.08f * cosf( 4*PI*i/NumTaps) );
    }


    // Банальная нормализация полученного
    float sum = 0.0f;                 
    for (int i = 0; i < NumTaps; i++)
    {
        sum = sum + Koefficients[i];
    }

    for (int i = 0; i < NumTaps; i++)
    { 
        Koefficients[i] = Koefficients[i] / sum;
    }

}


Нормализация понятно
Свёртка понятно

Окна -норм, только 1 момент - коэффициенты должны быть выше 0
Надо ещё Кайзера написать - он легко перестраивает АЧХ
Брижит Бардо в купальнике выглядит талантливее, чем Фаина Раневская @Гайдай