Jump to content

    

FFT на STM32

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

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

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

У меня канал передачи динамик - электретный микрофон . В будущем переедем на цифровой MEMS

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now