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

 
 
> FFT, Практическая реализация
lexl
сообщение Mar 22 2005, 15:48
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 21-03-05
Из: Гондурас
Пользователь №: 3 572



Кто-нибудь может указать перстом, где просто и доступно объясняется БПФ с примерами кода?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Moks
сообщение Oct 3 2006, 16:59
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 510



Извините, а полее подробно и понятно метод "бабочки" растолковать не может? Теория - это хорошо, но от неё мозги опухают. На Си кто-нибудь его делал сам, без использования чьих-то исходников, следуя только требованиям математики, переложенных на язык Си, например?
Помогите, пожалуйста. ссылки, указанные в теме, почитал, но ясности не так уж много стало ... help.gif
Go to the top of the page
 
+Quote Post
SasaTheProgramme...
сообщение Oct 4 2006, 00:12
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 129
Регистрация: 4-08-06
Пользователь №: 19 327



Цитата(Moks @ Oct 3 2006, 18:59) *
Извините, а полее подробно и понятно метод "бабочки" растолковать не может? Теория - это хорошо, но от неё мозги опухают. На Си кто-нибудь его делал сам, без использования чьих-то исходников, следуя только требованиям математики, переложенных на язык Си, например?
Помогите, пожалуйста. ссылки, указанные в теме, почитал, но ясности не так уж много стало ... help.gif

Так. Дискретное Преобразование Фурье (ДПФ) чисто арифметически является к умножением вектора на матрицу. Но эта матрица имеет настолько специфический вид, что её можно представить как произведение нескольких сильно разреженных матриц. С формальной точки зрения это ничего не даёт, но с вычислительной - можно поднапрячься и исключить операции с нулевыми значениями в этих матрицах. Это, собственно, суть БПФ - количество операций оказывается существенно меньше, чем при "честном" матричном умножении. Ещё раз - тут используются особенности данной матрицы, в общем случае такой трюк невозможен.
Далее начинается реализация. Вместо записи выражения в матричной форме, которая подразумевает полное формальное умножение, рисуют граф - кто с кем складывается и с каким коэффицинтом. Если пойти по шагам, то получится что-то вроде V*M1*M2*...Mn->V|G1|*M2*...Mn->...V|G1|G2|..|Gn|. На каждом шаге умножение на матрицу заменяют графом со стрелочками, показывающими какие конкретно элементы и как складываются. При этом оказывается, что элементы всех векторов-результатов - и промежуточных и окончательного - получаются суммой двух слагаемых, т.е. суммой двух значений из предыдущего вектора с коэффициентами. Более того, можно так переставить матрицы, что значения будут получаться "два из двух", т.е. два значения из предыдущего вектора определяют два значения последуюшего. Если выделить на графе этот момент, то четыре линии будут отдалённо напоминать бабочку (отсюда и название). Таким вот образом, ДПФ сводят к выполнению двух операций - бабочки и перестановки индексов, которая подставляет бабочке значения в нужном порядке.
P.S. Не поленись, проделай это на бумаге для матрицы преобразования 8*8 и всё сразу станет на свои места.
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Oct 4 2006, 05:08
Сообщение #4


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(SasaTheProgrammer @ Oct 4 2006, 03:12) *
Цитата(Moks @ Oct 3 2006, 18:59) *

Извините, а полее подробно и понятно метод "бабочки" растолковать не может? Теория - это хорошо, но от неё мозги опухают. На Си кто-нибудь его делал сам, без использования чьих-то исходников, следуя только требованиям математики, переложенных на язык Си, например?
Помогите, пожалуйста. ссылки, указанные в теме, почитал, но ясности не так уж много стало ... help.gif

Так. Дискретное Преобразование Фурье (ДПФ) чисто арифметически является к умножением вектора на матрицу. Но эта матрица имеет настолько специфический вид, что её можно представить как произведение нескольких сильно разреженных матриц. С формальной точки зрения это ничего не даёт, но с вычислительной - можно поднапрячься и исключить операции с нулевыми значениями в этих матрицах. Это, собственно, суть БПФ - количество операций оказывается существенно меньше, чем при "честном" матричном умножении. Ещё раз - тут используются особенности данной матрицы, в общем случае такой трюк невозможен.
Далее начинается реализация. Вместо записи выражения в матричной форме, которая подразумевает полное формальное умножение, рисуют граф - кто с кем складывается и с каким коэффицинтом. Если пойти по шагам, то получится что-то вроде V*M1*M2*...Mn->V|G1|*M2*...Mn->...V|G1|G2|..|Gn|. На каждом шаге умножение на матрицу заменяют графом со стрелочками, показывающими какие конкретно элементы и как складываются. При этом оказывается, что элементы всех векторов-результатов - и промежуточных и окончательного - получаются суммой двух слагаемых, т.е. суммой двух значений из предыдущего вектора с коэффициентами. Более того, можно так переставить матрицы, что значения будут получаться "два из двух", т.е. два значения из предыдущего вектора определяют два значения последуюшего. Если выделить на графе этот момент, то четыре линии будут отдалённо напоминать бабочку (отсюда и название). Таким вот образом, ДПФ сводят к выполнению двух операций - бабочки и перестановки индексов, которая подставляет бабочке значения в нужном порядке.
P.S. Не поленись, проделай это на бумаге для матрицы преобразования 8*8 и всё сразу станет на свои места.


Позвольте все же заметить, что

a) в общем случае никаких "0"-ых значений в матице преобразования не предполагается, и суть БПФ совсем не в них. Суть в повторяющихся коэффициентах (симметрия и периодичность) арифметические операции с которыми достаточно выполнить только однажды, вот эта избыточность и устраняется.
Кстати, надо заметить, именно поэтому БПФ нельзя делать для части (или одной) точек последовательности, алгоритм работает только со всей последовательностью. Если же надо выделить одну (или несколько в небольшом частотном интервале не начинающимся в "0" оси частот) то применять следует лишь ДПФ и будет это еще и быстрее чем БПФ с последующим отбросом ненужных спектральных компонент (причем основное время уйдет не на отброс smile.gif )

cool.gifЕсть множество алгоритмов обходящихся без перестановки индексов. Вобщем и целом алгоритм БПФ сводится к 2-х (или 4-х) точечному ДПФ и алгоритму переразбиения массива входных данных на эти ДПФ.


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- lexl   FFT   Mar 22 2005, 15:48
- - Jools   Хорошее описание здесь h-t-t-p://w-w-w.autex.spb....   Mar 22 2005, 17:50
|- - bve   В сети достаточно много материалов, посвященных вы...   Mar 23 2005, 15:03
|- - _VM   Приведу интересных сцылочек, а то многие не знают....   Mar 23 2005, 18:03
|- - nikkov   Есть еще "The FXT library" на http://www...   Mar 24 2005, 02:42
- - wallk   Если с примерами кода, то лучше всего брать описан...   Oct 20 2005, 21:50
- - evgeniy_s   Есть небольшой хороший пример на С: http://www.cod...   Dec 3 2005, 20:08
- - gertoth   Лучшая практика - хорошая теория: Рабинер и Голд. ...   Dec 4 2005, 00:36
- - AKazak   Классная книга по цифровой обработке сигналов: ht...   Mar 13 2006, 12:22
|- - DRUID3   Цитата(Moks @ Oct 3 2006, 19:59) Извините...   Oct 3 2006, 18:36
|- - st256   Цитата(DRUID3 @ Oct 4 2006, 14:08) Цитата...   Oct 4 2006, 05:42
- - Moks   А вот отсюда можно поподробней и внятней, а? DRUID...   Oct 4 2006, 20:19
|- - DRUID3   Цитата(Moks @ Oct 4 2006, 23:19) А вот от...   Oct 4 2006, 21:24
|- - st256   Цитата(Moks @ Oct 5 2006, 05:19) А вот от...   Oct 5 2006, 04:21
|- - SasaTheProgrammer   Цитата(Moks @ Oct 4 2006, 22:19) SasaTheP...   Oct 5 2006, 19:05
- - Alex B._   2Moks SasaTheProgrammer объяснил, по-моему лучше н...   Oct 4 2006, 23:24
- - Moks   st256: Спасибо за растолковывание одной из бабочек...   Oct 5 2006, 06:26
- - Alex B._   >> Alex B._: в адвокаты заделался. да не, пр...   Oct 5 2006, 08:10
- - Moks   Кстати, а кто доходчиво может граф посторить для N...   Oct 6 2006, 08:43
- - Moks   Цитата(Moks @ Oct 6 2006, 12:43) Кстати, ...   Oct 11 2006, 18:56
- - shasik   Цитата(Moks @ Oct 11 2006, 21:56) Люди, а...   Oct 21 2006, 00:20


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 22:29
Рейтинг@Mail.ru


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