реклама на сайте
подробности

 
 
> Целочисленные алгоритмы ЦОС, надо сформулировать правила
Zelepuk
сообщение Mar 6 2011, 07:22
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Существует рабочий алгоритм(несколько фильтров и БПФ). Код работает на плавучке на обычном десктопе.
Стоит задача портировать алгоритм на процессор с фиксированой точкой.
Отсчёты, над которыми производятся преобразования, поступают в формате 1.15.
Понимаю что тупое преобразование float в int ни к чему хорошему не приведёт.
Тогда стоит вопрос: какие требования к оперрациям нужно предъявить?

Коэффиценты фильтров и БПФ должны быть тоже в 1.15?
Как производить умножение, деление, суммирование и вычитание, чтобы избегать переполнений?

(лучше если примеры коротенькие на С будут)

Используется 32-битный процессор на ARM9E ядре

Заранее спасибо.



Сообщение отредактировал Zelepuk - Mar 6 2011, 07:48
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
PetrovichKR
сообщение Mar 8 2011, 04:31
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 20-03-10
Пользователь №: 56 092



Цитата
Хлчется вкуритсь "трюки" на С чтобы всё что угодно писать... (КИХ, БИХ фильтрацию...)

Реализация КИХ-фильтрации на архитектуре AVR. Числа в формате 1.1.14
Код
//Порядок НЦФ
#define N 22

//Сдвиг умножителей НЦФ
#define SHIFT 14

//Весовые коэффициенты НЦФ
#define FIR_COEFFS \
{\
    (int)(-0.02144952651096*16384),\
    (int)(-0.05675564761031*16384),\
    (int)(-0.00722412687546*16384),\
    (int)(-0.01824005662087*16384),\
    (int)( 0.00295576469554*16384),\
    (int)( 0.02091815981809*16384),\
    (int)( 0.04723483351816*16384),\
    (int)( 0.07439211184117*16384),\
    (int)( 0.10087221829014*16384),\
    (int)( 0.12272427450964*16384),\
    (int)( 0.13727372353230*16384),\
    (int)( 0.14230086051190*16384),\
    (int)( 0.13727372353230*16384),\
    (int)( 0.12272427450964*16384),\
    (int)( 0.10087221829014*16384),\
    (int)( 0.07439211184117*16384),\
    (int)( 0.04723483351816*16384),\
    (int)( 0.02091815981809*16384),\
    (int)( 0.00295576469554*16384),\
    (int)(-0.01824005662087*16384),\
    (int)(-0.00722412687546*16384),\
    (int)(-0.05675564761031*16384),\
}

typedef struct            //Сигнальная память с указателем
{
    int X[N];
    unsigned char offset;
}
memory;

//НЦФ без сдвига сигнальной памяти
int fir(int x, memory *mem)
{
    static const int h[N] PROGMEM = FIR_COEFFS;                        //Весовые коэффициенты
    int out = 0;                                                        //Выходная переменная
    int *X = mem->X;                                                    //Указатель на сигнальную память
    unsigned char offset = mem->offset;                                        //Смещение сигнальной памяти
    X[offset] = x;                                                        //Загрузка текущего отсчета в сигнальную память
    for(unsigned char i = 0, j = offset; i < N; i++, j++)                     //Цикл ДВС
    {
        out += (int) pgm_read_word(&h[i]) * ((long) X[j]) >> SHIFT;    //Операция умножения с накоплением
        if(j == N - 1) j = -1;                                            //Закольцовывание сигнальной памяти
    }
    mem->offset = offset? offset - 1: N - 1;                        //Сдвиг смещения сигнальной памяти
    return out;
}


Конкретно в цифровой фильтрации, исключение переполнений достигается путем масштабирования. Насчет БПФ не знаю.

Сообщение отредактировал PetrovichKR - Mar 8 2011, 04:32
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Zelepuk   Целочисленные алгоритмы ЦОС   Mar 6 2011, 07:22
- - _Anatoliy   Цитата(Zelepuk @ Mar 6 2011, 09:22) Это...   Mar 6 2011, 08:35
- - Zelepuk   Познавательное видео. Но хотелось бы писать всё с...   Mar 7 2011, 06:30
|- - alexPec   Цитата(Zelepuk @ Mar 7 2011, 09:30) Позна...   Mar 7 2011, 10:07
||- - Zelepuk   Цитата(alexPec @ Mar 7 2011, 13:07) Переп...   Mar 7 2011, 13:38
||- - alexPec   Цитата(Zelepuk @ Mar 7 2011, 16:38) когда...   Mar 7 2011, 14:47
|- - diwil   Цитата(Zelepuk @ Mar 7 2011, 09:30) Иными...   Mar 7 2011, 11:58
|- - Zelepuk   Цитата(diwil @ Mar 7 2011, 14:58) 1. floa...   Mar 7 2011, 21:12
|- - diwil   Цитата(Zelepuk @ Mar 8 2011, 00:12) Никак...   Mar 9 2011, 08:05
- - Ruslan1   еще может интересно будет, насчет целочисленной ре...   Mar 18 2011, 16:48
|- - Zelepuk   Цитата(Ruslan1 @ Mar 18 2011, 19:48) еще ...   Mar 18 2011, 17:36
|- - MSP430F   Цитата(Ruslan1 @ Mar 18 2011, 20:48) еще ...   Aug 22 2013, 14:14
|- - Zelepuk   Цитата(MSP430F @ Aug 22 2013, 18:14) Скаж...   Aug 23 2013, 07:55
|- - MSP430F   Цитата(Zelepuk @ Aug 23 2013, 11:55) коне...   Aug 23 2013, 08:52
|- - Zelepuk   Цитата(MSP430F @ Aug 23 2013, 12:52) Вопр...   Aug 23 2013, 09:02
|- - MSP430F   Цитата(Zelepuk @ Aug 23 2013, 13:02) поче...   Aug 23 2013, 09:16
|- - Maverick   Цитата(MSP430F @ Aug 23 2013, 12:16) по...   Aug 23 2013, 09:35
|- - Corner   Цитата(MSP430F @ Aug 23 2013, 13:16) Вот ...   Aug 23 2013, 18:04
||- - MSP430F   Цитата(Corner @ Aug 23 2013, 22:04) С уче...   Aug 26 2013, 12:44
||- - Corner   Цитата(MSP430F @ Aug 26 2013, 16:44) Как ...   Aug 29 2013, 15:02
|- - alex_os   Цитата(MSP430F @ Aug 23 2013, 13:16) Вот ...   Sep 18 2013, 19:26
|- - Corner   Цитата(alex_os @ Sep 18 2013, 23:26) можн...   Sep 19 2013, 15:02
|- - DASM   Цитата(alex_os @ Sep 18 2013, 23:26) Ужас...   Sep 19 2013, 15:21
|- - Corner   Цитата(DASM @ Sep 19 2013, 19:21) UMULL 3...   Sep 19 2013, 15:28
- - Corner   На ПЛИС БПФ 8192 точки 18 бит знаковое сносно дает...   Aug 22 2013, 14:35
- - Zelepuk   Вообще проще взять и проверить. Код есть. За полча...   Aug 23 2013, 09:17
- - DASM   Странно, дока говорит иное.Вы уверены, что это не ...   Sep 19 2013, 15:34
|- - Corner   Цитата(DASM @ Sep 19 2013, 19:34) Странно...   Sep 19 2013, 15:36
|- - AndrewN   QUOTE (Corner @ Sep 19 2013, 18:36) Тольк...   Sep 19 2013, 17:41
|- - Corner   Цитата(AndrewN @ Sep 19 2013, 21:41) Для ...   Sep 24 2013, 16:30
|- - AndrewN   QUOTE (Corner @ Sep 24 2013, 19:30) 16+16...   Sep 24 2013, 20:57
|- - Corner   Цитата(AndrewN @ Sep 25 2013, 00:57) А та...   Sep 29 2013, 09:15
- - DASM   Посмотрю завтра, с телефона неудобно. И что, в экс...   Sep 19 2013, 15:44


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 19:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016