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

 
 
> DSP на STM32F4
Atlantis-
сообщение Aug 25 2016, 07:59
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Здравствуйте!
Помогите разобраться с DSP на STM32F429. Никогда раньше этой темой не занимался, не понимаю в какую сторону начинать копать. Задача такая: мне нужно генерировать белый шум, фильтровать его разными фильтрами и выдавать на аудио ЦАП (48 кГц). Фильтры нужны режекторный второго порядка и полосовой, четвертого порядка, с БИХ. Фильтры я посчитал в матлабе, приготовился уже реализовывать в целочисленной арифметике. Но в этом процессоре есть блок вычислений с плавающей точкой. Я с этим никогда дела не имел. В референс мануале описание этого блока не нашел. Есть некая библиотека CMSIS DSP, в которой реализованы фильтры, но я так понял она мне не подойдет, поскольку там какая то странная структура реализованного IIR фильтра и работает он с какими то блоками данных. А мне надо просто сгенерировать Х, посчитать Y, запомнить Х-1 и Y-1 для следующего отчета.
Скажите, какое преимущество мне даст работа с float и вообще, могу ли я так просто, без всяких библиотек взять и расписать свои фильтры во float?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Aug 25 2016, 08:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Atlantis- @ Aug 25 2016, 10:59) *
Скажите, какое преимущество мне даст работа с float и вообще,

Сам Матлаб может дать вам характеристики фильтра с учетом квантования.
Целочисленная порой сильно уступает ПТ даже одинарной точности.

Цитата(Atlantis- @ Aug 25 2016, 10:59) *
могу ли я так просто, без всяких библиотек взять и расписать свои фильтры во float?

Я вообще написал фильтр на asm
CODE
//---------------------------------------------
// fpu_iir
//---------------------------------------------
.thumb
.thumb_func
.global fpu_iir
.type fpu_iir, %function
fpu_iir:
.cfi_startproc
cbnz r1, fpu_iir_load
bx lr
fpu_iir_load:
push {r0-r4, lr}
VPUSH {s0-s7}
// load f
VLDR.F32 s1, [r3, #0] // G
VLDR.F32 s2, [r3, #4] // a1
VLDR.F32 s3, [r3, #8] // a2
VLDR.F32 s4, [r3, #12] // b
VLDR.F32 s5, [r3, #16] // tn-1
VLDR.F32 s6, [r3, #20] // tn-2
fpu_iir_loop:
// load
ldr r4, [r0], #4
// s0 <- x
VMOV.F32 s0, r4
// calc tn
VMUL.F32 s7, s1, s0 // G * x
VFMS.F32 s7, s2, s5 // -a1 * tn-1
VFMS.F32 s7, s3, s6 // -a2 * tn-2
// calc y
VADD.F32 s0, s7, s6 // tn-2
VFMA.F32 s0, s4, s5 // b * tn-1
// save t
VMOV.F32 s6, s5 // tn-2
VMOV.F32 s5, s7 // tn-1
// y -> r0
VMOV.F32 r4, s0
// store
str r4, [r2], #4
subs r1, #1
bne fpu_iir_loop
VSTR.F32 s5, [r3, #16] // tn-1
VSTR.F32 s6, [r3, #20] // tn-2
VPOP {s0-s7}
pop {r0-r4, pc}
.size fpu_iir, .-fpu_iir
.cfi_endproc
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Aug 25 2016, 08:45
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(adnega @ Aug 25 2016, 11:24) *
Я вообще написал фильтр на asm

На asm то понятно, компилятор никуда не денется. А на Си если писать, для операций с float надо что-то настраивать, подключать? Или просто задать коэффициенты float a,b; float x,y; и пошел их перемножать, складывать, вычитать, а компилятор сам подставит нужные команды, для работы с плавающей точкой? Под компилятором я подразумеваю Keil.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 25 2016, 08:50
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Atlantis- @ Aug 25 2016, 11:45) *
А на Си если писать, для операций с float надо что-то настраивать, подключать?

Ничего не надо настраивать, только ядро правильное указать.
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Aug 25 2016, 09:30
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(aaarrr @ Aug 25 2016, 11:50) *
Ничего не надо настраивать, только ядро правильное указать.

Да, я попробовал перемножить два int-a и два float-a, посмотрел дизассемблер, там отличие только в том, что в первом случае команда MULS, а во втором VMUL.F32
Судя из статьи, VMUL.F32 выполняется за 1 такт, как и обычное умножение. Круто!
Тогда у меня еще один вопрос, на входе у меня генератор белого шума, который выдает int, а на выходе, для ЦАП мне надо 24-битное число. Как в первом случае быстро преобразовать int (сдвинутый на 6 разрядов, чтобы на входе тоже было 24 бита) во float, а во втором случае float в int?

И я правильно понимаю, что используя float вместо int я нисколько не потеряю в скорости выполнения программы? Даже выиграю, с учетом того, что не надо будет масштабировать результат?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 25 2016, 09:31
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Atlantis- @ Aug 25 2016, 12:21) *
Как в первом случае быстро преобразовать int (сдвинутый на 6 разрядов, чтобы на входе тоже было 24 бита) во float, а во втором случае float в int?

Поделить/перемножить с требуемым масштабным коэффициентом.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Atlantis-   DSP на STM32F4   Aug 25 2016, 07:59
|- - adnega   Цитата(Atlantis- @ Aug 25 2016, 12:3...   Aug 25 2016, 10:40
|- - Atlantis-   Цитата(adnega @ Aug 25 2016, 13:40) Есть ...   Aug 25 2016, 11:46
|- - DASM   Цитата(Atlantis- @ Aug 25 2016, 14:4...   Aug 25 2016, 11:53
||- - Atlantis-   Цитата(DASM @ Aug 25 2016, 14:53) Насколь...   Aug 25 2016, 12:04
|- - adnega   Цитата(Atlantis- @ Aug 25 2016, 14:4...   Aug 25 2016, 15:32
- - DASM   Так у флоат 23 бита мантиссы, как оно может быть м...   Aug 25 2016, 12:31
|- - Atlantis-   Цитата(DASM @ Aug 25 2016, 15:31) Так у ф...   Aug 25 2016, 12:36
- - DASM   Понятно. Математик из меня никакой, может просто п...   Aug 25 2016, 12:40
|- - Atlantis-   Цитата(DASM @ Aug 25 2016, 15:40) Понятно...   Aug 25 2016, 13:09
- - DASM   Не знаю что и сказать, SystemVue позволяет считать...   Aug 25 2016, 13:35
|- - Atlantis-   Цитата(DASM @ Aug 25 2016, 16:35) Не знаю...   Aug 25 2016, 13:48
|- - DASM   Цитата(Atlantis- @ Aug 25 2016, 16:4...   Aug 25 2016, 13:53
- - sigmaN   Что нужно знать про арифметику с плавающей запятой...   Aug 25 2016, 18:26
|- - Atlantis-   Цитата(sigmaN @ Aug 25 2016, 21:26) Что н...   Aug 26 2016, 06:04
|- - adnega   Цитата(Atlantis- @ Aug 26 2016, 09:0...   Aug 26 2016, 06:18
|- - Atlantis-   Цитата(adnega @ Aug 26 2016, 09:18) Счита...   Aug 26 2016, 09:37
- - khach   Начинать писание своего фильтра надо с того что ...   Aug 26 2016, 08:06
|- - Atlantis-   Цитата(khach @ Aug 26 2016, 11:06) Начина...   Aug 26 2016, 11:41
- - sigmaN   ЦитатаНачинать писание своего фильтра надо с того ...   Aug 26 2016, 09:44
- - sigmaN   https://www.keil.com/pack/doc/CMSIS/DSP/htm...scad...   Aug 26 2016, 16:41
|- - Atlantis-   Цитата(sigmaN @ Aug 26 2016, 19:41) https...   Aug 27 2016, 16:25
- - sigmaN   Читаем описание функци, реализует она следующее: Ц...   Aug 28 2016, 08:37
- - Atlantis-   Аааа, вон оно как...понял, спасибо большое! По...   Aug 29 2016, 11:56
- - Atlantis-   Порылся в интернете, на последний вопрос вроде наш...   Aug 29 2016, 14:24
- - sigmaN   Цитата1) результат вычислений получается float, дл...   Aug 29 2016, 19:11
|- - Atlantis-   Цитата(sigmaN @ Aug 29 2016, 22:11) Корре...   Aug 30 2016, 07:22
- - sigmaN   ЦитатаНашел в интернете округление - просто прибав...   Aug 30 2016, 11:15
|- - ig_z   QUOTE (sigmaN @ Aug 30 2016, 14:15) Ну ка...   Aug 30 2016, 12:00
- - sigmaN   Не знал, не знал. Ну тогда даташит на ЦАП в помощь...   Aug 30 2016, 12:05
- - Atlantis-   Вот я смотрю даташиты на оба ЦАП и не нахожу даже ...   Aug 30 2016, 14:02
- - Atlantis-   Нашел ответ на свой вопрос ЦитатаThe AD1852 accept...   Aug 31 2016, 12:16
- - sigmaN   Ну вот, значит отрицательные числа представлены та...   Sep 1 2016, 10:24
|- - ig_z   QUOTE (sigmaN @ Sep 1 2016, 13:24) если B...   Sep 1 2016, 17:34
- - Atlantis-   Сделал полосовые фильтры, проверил - все нормально...   Sep 5 2016, 13:51
- - Atlantis-   Как то так получается, что при подаче на вход реже...   Sep 6 2016, 07:45


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

 


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


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