ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
120230 Топик полностью
ZeDStavr (13.05.2008 16:27, просмотров: 160) ответил ZeDStavr на Неудача заключается в том, что выход фильтра достаточно быстро достигает 0x7FFF (формат Q15) независимо от того какой сигнал на входе.
В дополнение рабочий код на фильтр 2 порядка... Исходник из библиотеки приложен. Мой код (фильтр 2 порядка): #define _PSVPAGE( n ) __builtin_psvpage( n ) #define SetupFilter( fil, state1, state2, coeffs, section )\ fil.numSectionsLess1 = section - 1;\ fil.coeffsBase = (fractional *)coeffs;\ fil.coeffsPage = _PSVPAGE( coeffs );\ fil.delayBase1 = state1;\ fil.delayBase2 = state2;\ fil.finalShift = 0x0 //Количество секций #define sum_LPFNumSections 1 const fractional sum_LPFCoefs[] = { 0x001D, // b( 1,0)/2 0x003B, // b( 1,1)/2 0x001D, //-a( 1,0)/2 0x780A, // b( 1,2)/2 0xC77F //-a( 1,2)/2 }; IIRTransposedStruct sum_LPFFilter; //Структура фильтра fractional sum_LPFStates1[sum_LPFNumSections * 2]; fractional sum_LPFStates2[sum_LPFNumSections * 2]; //Входной сигнал (отсчеты АЦП) fractional sum_inputSignal __attribute__((space(xmemory))); //Выходной сигнал (выход фильтра) fractional sum_outputSignal __attribute__((space(xmemory))); int main (void) { ... SetupFilter(sum_LPFFilter, sum_LPFStates1, sum_LPFStates2, sum_LPFCoefs, sum_LPFNumSections); IIRTransposedInit(&sum_LPFFilter); //Инициализация цифрового фильтра ... while (1) { if (Отсчет АЦП готов) { IIRTransposed(1, &sum_outputSignal, &sum_inputSignal, &sum_LPFFilter); ... } ... } } Если теперь меняю коэффициенты на const fractional sum_LPFCoefs[] = { 0x0014, // b( 1,0)/2 0x0014, // b( 1,1)/2 0x7FD6, //-a( 1,0)/2 0x0000, // b( 1,2)/2 0x0000 //-a( 1,2)/2 }; Выход улетает "вверх" и не возвращается