У меня есть много (~ 100 или около того) коэффициентов фильтра, рассчитанных с помощью некоторых Matlab и Excel, которые я хочу записать в заголовочный файл C для общего использования, но я не уверен, чтолучший способ сделать это будет.Я начинал так:
#define BUTTER 1
#define BESSEL 2
#define CHEBY 3
#if FILT_TYPE == BUTTER
#if FILT_ROLLOFF == 0.010
#define B0 256
#define B1 512
#define B2 256
#define A1 467
#define A2 -214
#elif FILT_ROLLOFF == 0.015
#define B0 256
#define B1 512
// and so on...
Однако, если я сделаю это и запихну их все в заголовок, мне нужно установить условия (FILT_TYPE
, FILT_ROLLOFF
) в моем источнике, прежде чем включатьэто, кажется, немного противно.Более того, если у меня есть 2+ разных фильтра, которые хотят использовать разные типы фильтров, это не сработает.Я мог бы #undef
мои 5 коэффициентов (A1-2, B0-2) в этом файле коэффициентов, но все равно кажется неправильным вставлять #include
в коде.
Редактировать: Это для встроенного 8-битного процессора с очень маленьким (2-4K) кодовым пространством.Похоже, я не могу этого сделать, сохранив их в массиве структур, потому что занимаемое им пространство недопустимо.Даже объявляя их все константами, мой компилятор не будет «оптимизировать их», поэтому у меня останется тень более 1,2K дополнительных двоичных данных.
Приведенное ниже не работает.
typedef struct {
int16_t b0, b1, b2, a1, a2;
} filtCoeff;
const filtCoeff butter[41] = {
{256,512,256,467,-214},
{256,512,256,444,-196},
{255,512,255,422,-179},
// ...
};
const filtCoeff bessel[41] // ...