дискретное преобразование фурье на AVR\Pic24F

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
стьюдент
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт мар 20, 2012 07:16:43

дискретное преобразование фурье на AVR\Pic24F

Сообщение стьюдент »

Привет всем радио котам. Возникла проблема: реально ли реализовать ДПФ(дискретное преобразование фурье) на микроконтроллере AVR(например ATmega32). В связи с тем, что в цифровой обработке сигналов я новичек, вынужден попросить вашей помощи. Не могу разобраться в алгоритме ДПФ\БПФ. Есть ли примеры кода на ассемблере\или готовые алгоритмы? Понимаю что в реальном времени сигнал обработать я не успею, на данном этапе мне важно именно понимание алгоритма и математики , которая используется для преобразования фурье. В дальнейшем, после полного понимания алгоритма, буду переделывать проект на Pic24F. У кого есть какие соображения???
Реклама
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение Ser60 »

Посмотрите здесь
http://www.microchip.com/stellent/idcpl ... e=en023598
и здесь.
ftp://ftp.efo.ru/pub/efo-ftp/TMP/pub/at ... s-on+1.pdf
И еще в Гугле.
Реклама
Аватара пользователя
Shapa
Встал на лапы
Сообщения: 127
Зарегистрирован: Пт июн 20, 2008 09:38:05
Откуда: Харьков
Контактная информация:

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение Shapa »

Да, реально. Лично я реализовал на Кортексе М3. Но потом перешел к алгоритму Герциля, т.к он даёт результат только для нескольких спектральных отсчётов, соответственно он не так ресурсоёмок.
стьюдент писал(а):....мне важно именно понимание алгоритма и математики....
А что вы знаете о Рядах Фурье? Каким физическим смыслом наделено разложение в ряд Фурье?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение ibiza11 »

+1 Shapa!
Нужно матчасть читать прежде чем что-то пытаться понять в программе. Это вам не светодиодики зажигать.
Ставим плюсы: )
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение Gudd-Head »

Замутил нечто похожее:
http://www.simple-devices.ru/forum/Прог ... ье-для-AVR
Там же и чуток теории написал.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
стьюдент
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт мар 20, 2012 07:16:43

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение стьюдент »

Shapa писал(а): А что вы знаете о Рядах Фурье? Каким физическим смыслом наделено разложение в ряд Фурье?
"В обработке сигналов и связанных областях преобразование Фурье обычно рассматривается как декомпозиция сигнала на частоты и амплитуды, то есть обратимый переход от временно́го пространства (time domain) в частотное пространство (frequency domain)."

Это всего лишь сухая теория, какую пользу она несет?! Если у меня на форуме ник стьюдент, то это не значит, что я типичный студент который ищет халявы и не в состоянии предварительно поискать информацию сам :shock:

Gudd-Head, нашел вашу статью еще вчера. Насколько я понял у вас не дискретное преобразование фурье? Особо интересует, как с помощью ДПФ выполнять фильтрацию (разделение по частотам) спектра сигнала (сигнал кстати записан в формате .wav).

Ser60, спасибо за ссылки, но к сожалению с английским очень туго, к тому же первоначально буду реализовывать на AVR, а ссылки ведут на dsp Pic и AVR32 :(
Реклама
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение Gudd-Head »

стьюдент писал(а):Gudd-Head, нашел вашу статью еще вчера.
Чертовски приятно.
стьюдент писал(а):Насколько я понял у вас не дискретное преобразование фурье?
Дискретное. Но не быстрое.
Суть БПФ в упрощении за счёт количества выборок 2^N. Тогда применяют двоичную перестановку и алгоритм "бабочка". Надеюсь, вы про это уже прочитали. Просто я не силён в СИ, а на АСМе с комплексными числами мне не очень хотелось заморачиваться.
стьюдент писал(а):Особо интересует, как с помощью ДПФ выполнять фильтрацию (разделение по частотам) спектра сигнала (сигнал кстати записан в формате .wav).
Вообще говоря, фильтрацию проще выполнять с помощью фильтров. Из результатов ПФ вы замучаетесь восстанавливать сигнал. А вот посмотреть спектр сигнала — запросто.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение Alexeyslav »

Собственно алгоритм БПФ хорошо расписан в виде формул на википедии, сложность в реализации на микроконтроллере заключается лишь в комплексной функции exp(x), которую как правило задают заранее просчитанным массивом. А так используется обычный цикл для обсчета интеграла численными методами, а для ускорения обсчета используются исключительно целые числа. Ну, это до тех пор пока объемы RAM в контроллере считаются килобайтами и отсутствует математический сопроцессор.

У самого стала такая проблема для отображения спектра сигнала в усилителе в поле 32 столбца на 16 уровней. Ведь в таком случае использование даже 16-битных вычислений кажется каким-то кощунством и переводняком ресурсов.
стьюдент
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт мар 20, 2012 07:16:43

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение стьюдент »

Gudd-Head писал(а): Дискретное. Но не быстрое.
Суть БПФ в упрощении за счёт количества выборок 2^N. Тогда применяют двоичную перестановку и алгоритм "бабочка". Надеюсь, вы про это уже прочитали. Просто я не силён в СИ, а на АСМе с комплексными числами мне не очень хотелось заморачиваться.
Вообще говоря, фильтрацию проще выполнять с помощью фильтров. Из результатов ПФ вы замучаетесь восстанавливать сигнал. А вот посмотреть спектр сигнала — запросто.
1) зачем восстанавливать сигнал?
2) меня интересует только спектр сигнала, т.е. мне нужна вещественная часть, а внимую можно отбросить???
3) аналоговые фильтры не подойдут. "Нет научной навизны..."
4) можно полные исходники вашей программы?
стьюдент
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт мар 20, 2012 07:16:43

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение стьюдент »

Alexeyslav писал(а):Собственно алгоритм БПФ хорошо расписан в виде формул на википедии, сложность в реализации на микроконтроллере заключается лишь в комплексной функции exp(x), которую как правило задают заранее просчитанным массивом.
.
.
.
У самого стала такая проблема для отображения спектра сигнала в усилителе в поле 32 столбца на 16 уровней. Ведь в таком случае использование даже 16-битных вычислений кажется каким-то кощунством и переводняком ресурсов.
Я не уверен, что можно алгоритм БПФ (перестановки "бабочка") реализовать на 8-ми битном AVR. Дискретное преобразование вроде бы проще, особенно для малого числа точек(кстати изходя из чего выбирается их число?).
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение ibiza11 »

Ставим плюсы: )
Аватара пользователя
Shapa
Встал на лапы
Сообщения: 127
Зарегистрирован: Пт июн 20, 2008 09:38:05
Откуда: Харьков
Контактная информация:

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение Shapa »

стьюдент писал(а): Это всего лишь сухая теория, какую пользу она несет?! Если у меня на форуме ник стьюдент, то это не значит, что я типичный студент который ищет халявы и не в состоянии предварительно поискать информацию сам :shock:
Я не правильно выразился. Правлиьно вопрос должен звучать "Что вы понимаете?". Именно это меня интересовало.
стьюдент писал(а): 2) меня интересует только спектр сигнала, т.е. мне нужна вещественная часть, а внимую можно отбросить???
Разложение в ряд Фурье есть разложение гармонического сигнла по его гармоникам. Т.е. в "идиотски упрощённом" виде это Fs = x1*F1 + x2*F2 + ... + xn*Fn, где n - номер спектрального отсчета, F(n) - частота спектрального отсчета, а Хn - амплитуда. Разложение в Ряд Фурье производится в комплексном пространстве и один из простых переводов из комплексного пространства в пространство вещественных чисел это вычсление длинны вектора ( Sqrt ( Re^2 + Im^2) )

ibiza11, хорошая статья, сам её когда-то был рад просмотреть
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение Gudd-Head »

стьюдент писал(а):1) зачем восстанавливать сигнал?
Ну это же ваши слова:
как с помощью ДПФ выполнять фильтрацию
А в моём понимании фильтр вносит линейные искажения в сигнал. После ДПФ сигнал оказывается в частотной области, так что его (после обработки) нужно будет вернуть во временную. Вот зачем.
стьюдент писал(а):2) меня интересует только спектр сигнала, т.е. мне нужна вещественная часть, а внимую можно отбросить???
Мнимую отбрасывать не надо, это та же вещественная, только сдвинута на 90°. Если вам нужна огибающая спектра, то мой алгоритм вам как раз подойдёт :)))
стьюдент писал(а):3) аналоговые фильтры не подойдут. "Нет научной навизны..."
Кто говорил про аналоговые фильтры? Я имел в виду цифровые. Но вам, видимо, нужна не фильтрация, а сам спектр.
стьюдент писал(а):4) можно полные исходники вашей программы?
Всё что есть я выложил на том форуме. Вроде бы.
стьюдент писал(а):Я не уверен, что можно алгоритм БПФ (перестановки "бабочка") реализовать на 8-ми битном AVR.
Почему же нельзя? Всё возможно. Весь вопрос в производительности.
стьюдент писал(а):Дискретное преобразование вроде бы проще, особенно для малого числа точек(кстати изходя из чего выбирается их число?).
Бабочка и есть БДПФ, просто это один из... способов, что ли. Число точек 2^N и зависит от точности которую вы хотите получить в частотной области.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
стьюдент
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт мар 20, 2012 07:16:43

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение стьюдент »

Gudd-Head, посмотрел ваши наработки, я так понял вы не пробовали запускать АЦП ? Ограничились анализом только готовых данных? Или я смотрю устаревшую часть программы? Сохранился ли алгоритм (в визио,..) или все делалось без предварительного алгоритма?(
Вложения
SCP.asm
(3.22 КБ) 767 скачиваний
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение Gudd-Head »

Не, проект был чисто теоретический — готовые данные в ОЗУ (?), никакого предварительного алгоритма в сторонней программе.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
стьюдент
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт мар 20, 2012 07:16:43

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение стьюдент »

Кто может объяснить в чём ошибка (использую комплексное ДПФ) ? Или использовать формулы ДПФ для действительных сигналов?
Вложения
дпф2.jpg
(37.06 КБ) 1070 скачиваний
дпф1.jpg
(40.64 КБ) 991 скачивание
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение Alexeyslav »

Амплитуды - действительная часть результата, мнимая часть - это фаза соответствующей составляющей сигнала. Тебе надо вывести на экран только действительную часть.
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение Meteor »

Надо период (от 0 до 2ПИ) разделить на 8 интервалов, а не на шесть. Получается что седьмая складывается с первой гармоникой и первая гармоника складывается с седьмой.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение Gudd-Head »

Alexeyslav писал(а):Амплитуды - действительная часть результата, мнимая часть - это фаза соответствующей составляющей сигнала.
Амплитуда — это длина комплексного вектора, фаза — угол между вещественной и мнимой частью.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
стьюдент
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт мар 20, 2012 07:16:43

Re: дискретное преобразование фурье на AVR\Pic24F

Сообщение стьюдент »

Meteor писал(а):Надо период (от 0 до 2ПИ) разделить на 8 интервалов, а не на шесть. Получается что седьмая складывается с первой гармоникой и первая гармоника складывается с седьмой.
Не понял как это реализовать. Увеличить число точек?
Ответить

Вернуться в «Разные вопросы по МК»