Jump to content

    
Sign in to follow this  
Arlleex

FFT на STM32

Recommended Posts

32 minutes ago, jcxz said:

Хотя всё равно скорей всего не один период нужно будет измерять, а несколько. И усреднять.


Да я так делал , когда нужно было только одну частоту при двоичном кодировании расшифровывать.

 

19 minutes ago, uriy said:

Переделайте DTMF декодер на алгоритме герцеля под ваши частоты.

 

Да хочу сначала какую нибудь одну реализацию попробовать, потом на другие перейти, сейчас занялся через rfft , как сделаю покажу результат.

 

Не пойму почему в CMSIS DSP если использовать         arm_rfft_256_fast_init_f32 тратиться всего 3килобайта флэша , а при использовании arm_rfft_init_q15(&sq15,256, 0, 1)  - 70 килобайт флэш. 
баг какой то или это нормальное явление

 

Edited by Mysteo

Share this post


Link to post
Share on other sites

в STM32 нет встроенной поддержки Q15. Наверно это не баг. И мне кажется float в STM32 будет работать медленно, но Q15 еще медленнее. Если в вашем чипе есть FPU то умножение будет отрабатывать за один такт, а у множение Q15 за один такт уже не сработает. С фильтрами еще печальней, в STM32 нет аппаратных циклов. На одно полезную операцию умножения с накоплением будет уходить больше операций на инкремент счетчика, проверку условия и переход в начало цикла.

Share this post


Link to post
Share on other sites

Когда я использовал цифровые фильтры через CMSIS DSP то такой утечки флэши не встречал. И при фильтрации q15 быстрее работал , чем float , что логично. Наверное это все таки с Real FFT Tables как то связано

Edited by Mysteo

Share this post


Link to post
Share on other sites
13 минут назад, Mysteo сказал:

Не пойму почему в CMSIS DSP если использовать         arm_rfft_256_fast_init_f32 тратиться всего 3килобайта флэша , а при использовании arm_rfft_init_q15(&sq15,256, 0, 1)  - 70 килобайт флэш. 
баг какой то или это нормальное явление

Может потому что первое компилите для Cortex-M4F (с FPU)? Но у Вас ведь Cortex-M3, где нет FPU. Зачем тогда оно Вам?

Share this post


Link to post
Share on other sites
28 минут назад, uriy сказал:

Если в вашем чипе есть FPU то умножение будет отрабатывать за один такт, а у множение Q15 за один такт уже не сработает.

Во-первых: в CM3 нет FPU. Во-вторых: CM3 запросто умножает два Q15-числа за один такт + 1 такт на сдвиг. А если есть последующие операции с этим результатом, то этот сдвиг можно прибавить к ним и лишнего такта не потребуется.

Цитата

С фильтрами еще печальней, в STM32 нет аппаратных циклов. На одно полезную операцию умножения с накоплением будет уходить больше операций на инкремент счетчика, проверку условия и переход в начало цикла.

Так не надо делать одну операцию фильтра в цикле. Надо делать их несколько. Тогда печаль немного уменьшится.  :wink:  Хотя до DSP ему конечно всё равно далеко....

13 минут назад, Mysteo сказал:

Нет я не компилю для Cortex M3 . дефайны ARM_MATH_CM3 стоят

:wacko2: Так для чего Вы компилите??? Для какого ядра? Это секрет? 

Share this post


Link to post
Share on other sites

Ой , извините опечатался , я компилю для Cortex M3 и дейфайны выставлены правильные  ARM_MATH_CM3 

при использовании arm_rfft_init_q15 70 килобайт флэши скушалось.
image.thumb.png.7a56163e2e5ae202c204eadbeaa78e61.png

Расскоментируем arm_rfft_init_q15
 

image.png.198debbb859b628bee580b1a707415c4.png

 

Share this post


Link to post
Share on other sites
1 минуту назад, Mysteo сказал:

при использовании arm_rfft_init_q15 70 килобайт флэши скушалось.

Так посмотрите на свои же картинки - скушалось оно у Вас под какие-то данные, а не под код. Под код там всего ~200 байт добавилось.

Чтоб убедиться какие именно используются инструкции (используются ли инструкции FPU или нет) нужно листинги смотреть.

Share this post


Link to post
Share on other sites

Слушайте , а как быть с тонокомпенсацией или как это по правильному называется ... Но суть в том что если передавать разные частоты с одинаковой амплитудой то микрофон , да и человеческое ухо реагирует на них по разному , какие то громче какие то тише частоты , это весьма мешает при составлении алгоритма, на передающей стороне эту компенсацию лучше делать или на приемной ?

Share this post


Link to post
Share on other sites

По-правильному это называется "предыскажения" (на передачу +6дБ/окт в полосе модулирующих частот 300..3400 Гц, на приём соответственно -6дБ/окт), присуще аналоговым средствам радиосвязи (разборчивость речи улучшается при узкополосной ЧМ); для полосы ваших частот (500..1250 Гц) или если не используется аналоговый тракт радиопередачи - не нужно.
Электретный микрофон (или вы ДЭМШ применяете Ж8-\) в вашей полосе смело считайте линейным ;-)

Share this post


Link to post
Share on other sites

Вот что удалось пока сделать https://youtu.be/qWgP6HoH7dw

В звуке зашифровано helloWorld , все распознается.

Пока алгоритм построен на rfft преобразовании. Сейчас пробовать делать на герцеле , а потом просто на компараторе, как писал один из участников форума.

 

 

Единственный минус пришлось добавить между детектируемыми частотами левую частоту, иначе нужно как-то мучиться с синхронизацией......

Edited by Mysteo

Share this post


Link to post
Share on other sites

16 частот по 40 мс (те на 25 б/с): 400 б/с ... двадцать лет назад (это не для красного словца) доступные микросхемы FFSK-модемов (FX469) без затей, и без затраты "дикой" вычислительной мощи, в телефонном тракте позволяли 4800 б/с.

"Стоило ли так напрягаться, чтоб узнать так мало", - как сказал малыш дойдя до конца азбуки.

Share this post


Link to post
Share on other sites
4 часа назад, Mysteo сказал:

В звуке зашифровано helloWorld , все распознается.

Теперь подмешайте туда шум с некоторым уровнем.  :wink:

То, что работает на идеальном сигнале, без шума - пользы мало.

Share this post


Link to post
Share on other sites
On 10/21/2019 at 6:57 PM, Obam said:

16 частот по 40 мс (те на 25 б/с): 400 б/с ... двадцать лет назад (это не для красного словца) доступные микросхемы FFSK-модемов (FX469) без затей, и без затраты "дикой" вычислительной мощи, в телефонном тракте позволяли 4800 б/с.

Да я прекрасно понимаю , что велосипед тут не изобретаю , но нужно было в устройстве сделать передачу данных как в яндекс станции смотреть с 35 секунды.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this