(Prog) Расчет FIR-фильтра по стандартной формуле (Си)
Материал из Модулярная арифметики
Версия от 11:03, 10 июля 2013; Turbo (обсуждение | вклад)
Содержание
Описание
Расчет FIR-фильтра по стандартной формуле для линейной свертки.
Исходник
#include <stdio.h> #include <math.h> #include <stdlib.h> #define NL 1000 /* Простейший подход - действуем по определению свертки */ int calc_fir_filter_deafult( int *vec1, int len1, int *vec2, int len2, int *out) { int i, j; for (i = 0; i < len1+len2-1; i++) { out[i] = 0; printf("res[%d] = ", i); for (j = (i-len2+1 > 0)?(i-len2+1):0; j <= i; j++) { if (j >= len1) break; out[i] += vec1[j]*vec2[i-j]; if (len1 < 10 && len2 < 10) printf("a[%d]*b[%d] + ", j, i-j); } printf(" = %d\n", out[i]); } return 0; } int main () { int i, z; double maxVal; int filter[NL]; int filterLen; int testArray[100*NL]; int arrayLen; int dataBit; int res[10*NL]; freopen("input.txt", "r", stdin); scanf("%d", &z); while(z--) { scanf("%d %d %d", &dataBit, &filterLen, &arrayLen); for (i = 0; i < filterLen; i++) { scanf("%d", &(filter[i])); } for (i = 0; i < arrayLen; i++) { scanf("%d", &(testArray[i])); } } maxVal = pow(2.0, 2*dataBit)*(filterLen+arrayLen); printf("Max value: %.0lf\n", maxVal); calc_fir_filter_deafult(filter, filterLen, testArray, arrayLen, res); return 0; }
Входные/выходные данные
Формат входных/выходных данных для FIR-фильтра