Спасибо, то что нужно. Простейшее понятное объяснение расчёта 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
Надо ещё Кайзера написать - он легко перестраивает АЧХ