Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Помогите!!!

Отправлено Flasher 11 декабря 2006 г. 20:42


Нужно вместить ЦФ Чебышева полосовой четвертого порядка с 50Гц по350Гц в 500 тактов AVR. Winfilter формирует этот код
/**************************************************************
WinFilter version 0.8
http://www.winfilter.20m.com
akundert@hotmail.com

Filter type: Band Pass
Filter model: Chebyshev
Filter order: 4
Sampling Frequency: 8 KHz
Fc1 and Fc2 Frequencies: 0.050000 KHz and 0.350000 KHz
Pass band Ripple: 1.000000 dB
Coefficents Quantization: float

Z domain Zeros
z = -1.000000 + j 0.000000
z = -1.000000 + j 0.000000
z = -1.000000 + j 0.000000
z = -1.000000 + j 0.000000
z = 1.000000 + j 0.000000
z = 1.000000 + j 0.000000
z = 1.000000 + j 0.000000
z = 1.000000 + j 0.000000

Z domain Poles
z = 0.976000 + j -0.059394
z = 0.976000 + j 0.059394
z = 0.932623 + j -0.147930
z = 0.932623 + j 0.147930
z = 0.995230 + j -0.039345
z = 0.995230 + j 0.039345
z = 0.936464 + j -0.260363
z = 0.936464 + j 0.260363
***************************************************************/
#define NCoef 8
float iir(float NewSample) {
float ACoef[NCoef+1] = {
0.00007195260136887461,
0.00000000000000000000,
-0.00028781040547549844,
0.00000000000000000000,
0.00043171560821324772,
0.00000000000000000000,
-0.00028781040547549844,
0.00000000000000000000,
0.00007195260136887461
};

float BCoef[NCoef+1] = {
1.00000000000000000000,
-7.68063375446713880000,
25.90100643055060600000,
-50.09133464741564300000,
60.76715009184484000000,
-47.35299704986960700000,
23.14766333337755800000,
-6.48986464795786590000,
0.79901025608775755000
};

static float y[NCoef+1]; //output samples
static float x[NCoef+1]; //input samples
int n;

//shift the old samples
for(n=NCoef; n>0; n--) {
x[n] = x[n-1];
y[n] = y[n-1];
}

//Calculate the new output
x[0] = NewSample;
y[0] = ACoef[0] * x[0];
for(n=1; n<=NCoef; n++)
y[0] += ACoef[n] * x[n] - BCoef[n] * y[n];

return y[0];
}
В целочисленных коэффициентах он не может решить. Помогите где посмотреть с целочисленным вариантом коэффициентов или хотя бы какое- нибудь приведение к другому формату чтобы можно было использовать команды умножения.

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 76:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru