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

 
 
 
Reply to this topicStart new topic
> Как посчитать FFT используя Cooley-Tukey алгоритм ?
tocha
сообщение Aug 3 2009, 16:58
Сообщение #1


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

Группа: Свой
Сообщений: 92
Регистрация: 16-05-05
Из: Kiev
Пользователь №: 5 080



Хочу посчитать FFT используя Cooley-Tukey алгоритм.

Представляю отсчёты в виде квадратной матрицы, считаю дпф столбцов, умножаю на коэффициенты, потом дпф строк - получаю спектр.
Хочу поменять порядок расчёта (сначала дпф строк, потом столбцов) - не могу получить спектр.
Кто-то реализовывал расчёт иммено в таком порядке (сначала дпф строк, потом столбцов)?
Go to the top of the page
 
+Quote Post
Самурай
сообщение Aug 5 2009, 17:06
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066



Цитата(tocha @ Aug 3 2009, 20:58) *
Представляю отсчёты в виде квадратной матрицы, считаю дпф столбцов, умножаю на коэффициенты, потом дпф строк - получаю спектр.
Хочу поменять порядок расчёта (сначала дпф строк, потом столбцов) - не могу получить спектр.


Что значит «не можете получить спектр»? Поподробнее пожалуйста.
Ну и не забываем конечно об отличии между этими двумя способами: если в первом случае порядок выполнения: ДПФ столбцов - умножение на поворачивающие коэфф. - ДПФ строк, то во втором случае: умножение на поворачивающие коэфф. - ДПФ строк - ДПФ столбцов.
А вообще читайте Рабинера с Гоулдом, глава 6-я если точнее, там все очень хорошо расписано.
Go to the top of the page
 
+Quote Post
tocha
сообщение Aug 6 2009, 08:51
Сообщение #3


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

Группа: Свой
Сообщений: 92
Регистрация: 16-05-05
Из: Kiev
Пользователь №: 5 080



Цитата(Самурай @ Aug 5 2009, 20:06) *
Что значит «не можете получить спектр»? Поподробнее пожалуйста.
Ну и не забываем конечно об отличии между этими двумя способами: если в первом случае порядок выполнения: ДПФ столбцов - умножение на поворачивающие коэфф. - ДПФ строк, то во втором случае: умножение на поворачивающие коэфф. - ДПФ строк - ДПФ столбцов.
А вообще читайте Рабинера с Гоулдом, глава 6-я если точнее, там все очень хорошо расписано.

Главу 6 читал. Порядок перемножения соблюдаю. В таком порядке вычисленния "умножение на поворачивающие коэфф. - ДПФ строк - ДПФ столбцов" не могу получить результаты идентичные методу "ДПФ столбцов - умножение на поворачивающие коэфф. - ДПФ строк". Не могу понять кто виноват. Или так в принципе нельзя посчитать?
Go to the top of the page
 
+Quote Post
fontp
сообщение Aug 6 2009, 10:07
Сообщение #4


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Цитата(tocha @ Aug 6 2009, 12:51) *
Не могу понять кто виноват. Или так в принципе нельзя посчитать?


Как это нельзя? Математически это для ДПФ, очевидно, эквивалентно
Ищите непонятки в алгоритме. В коэффициентах вращения и порядке следования отсчётов

прорежение по времени/по частоте
Go to the top of the page
 
+Quote Post
_ea_
сообщение Aug 9 2009, 15:12
Сообщение #5





Группа: Участник
Сообщений: 4
Регистрация: 9-08-09
Пользователь №: 51 803



Цитата(tocha @ Aug 3 2009, 23:58) *
Хочу посчитать FFT используя Cooley-Tukey алгоритм.

Представляю отсчёты в виде квадратной матрицы, считаю дпф столбцов, умножаю на коэффициенты, потом дпф строк - получаю спектр.
Хочу поменять порядок расчёта (сначала дпф строк, потом столбцов) - не могу получить спектр.
Кто-то реализовывал расчёт иммено в таком порядке (сначала дпф строк, потом столбцов)?

В таком порядке БПФ не работает. В Рабинере-Голде в этом месте ошибка.
Go to the top of the page
 
+Quote Post
shasik
сообщение Aug 10 2009, 06:00
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



Цитата(_ea_ @ Aug 9 2009, 18:12) *
В таком порядке БПФ не работает

Это почему еще?
X*W1*W2=(X*W1)*W2=(X*W2)*W1 - знаете такое?
Go to the top of the page
 
+Quote Post
fontp
сообщение Aug 10 2009, 07:51
Сообщение #7


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Цитата(shasik @ Aug 10 2009, 10:00) *
Это почему еще?
X*W1*W2=(X*W1)*W2=(X*W2)*W1 - знаете такое?


Там, видимо, не двумерное преобразование, а вывод одномерного через двумерную факторизацию.
Типа того http://fpga.parallel.ru/fft/

Приколист говорит, что типа Рабинер дал маху и БПФ с прорежением по времени больше не работает rolleyes.gif
Отменяется. Только по частоте. Это будет посильней "неверной" теоремы Котельникова biggrin.gif
Go to the top of the page
 
+Quote Post
_ea_
сообщение Aug 10 2009, 13:43
Сообщение #8





Группа: Участник
Сообщений: 4
Регистрация: 9-08-09
Пользователь №: 51 803



Цитата(fontp @ Aug 10 2009, 14:51) *
Там, видимо, не двумерное преобразование, а вывод одномерного через двумерную факторизацию.
Типа того http://fpga.parallel.ru/fft/

Приколист говорит, что типа Рабинер дал маху и БПФ с прорежением по времени больше не работает rolleyes.gif
Отменяется. Только по частоте. Это будет посильней "неверной" теоремы Котельникова biggrin.gif


Прореживание по времени работает, что оно не работает никто не писал.
Не работает формула, по которой БПФ вычисляется как умножение на поворачивающие множители - ДПФ столбцов - ДПФ строк.
И она никакого отношения к прореживанию по времени не имеет.
А Рабинер действительно дал маху, сначала напутав с индексами при выводе формулы, а затем назвав это прореживанием по времени.

Прореживания по времени и по частоте отличаются тем, что вы разбиваете массив на 2 строки и n/2 столбцов в одном случае, и n/2 строк и 2 столбца в другом (см., например, книгу Блейхута).
Go to the top of the page
 
+Quote Post
fontp
сообщение Aug 10 2009, 14:00
Сообщение #9


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Цитата(_ea_ @ Aug 10 2009, 17:43) *
Прореживание по времени работает, что оно не работает никто не писал.
Не работает формула, по которой БПФ вычисляется как умножение на поворачивающие множители - ДПФ столбцов - ДПФ строк.
И она никакого отношения к прореживанию по времени не имеет.
А Рабинер действительно дал маху, сначала напутав с индексами при выводе формулы, а затем назвав это прореживанием по времени.

Прореживания по времени и по частоте отличаются тем, что вы разбиваете массив на 2 строки и n/2 столбцов в одном случае, и n/2 строк и 2 столбца в другом (см., например, книгу Блейхута).



И что просчитав ДПФ по строкам, умножив на некую прорежённую матрицу и сделав ДПФ по столбцам нельзя получить результат?
По типу алгоритма Гуда-Томаса (для взаимно простых множителей декомпозиции, где вообще нет вращений и вычисления производятся в любом порядке), но с вращениями для Кули -Тьюки.
Не верю, хоть и не проверял )) Мне кажется этих алгоритмов факторизации было придумано на любой вкус миллион.

Что в формулах возможны ошибки - это не вопрос. Они во всех книгах есть
Go to the top of the page
 
+Quote Post
tocha
сообщение Aug 11 2009, 11:49
Сообщение #10


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

Группа: Свой
Сообщений: 92
Регистрация: 16-05-05
Из: Kiev
Пользователь №: 5 080



Вроде разобрались...

Цитата(fontp @ Aug 10 2009, 17:00) *
И что просчитав ДПФ по строкам, умножив на некую прорежённую матрицу и сделав ДПФ по столбцам нельзя получить результат?

Нельзя. Если данные расположены в виде:
x_0 x1 ... x_n-1
x_n x_n+1 ... x_2n-1
то вначале нужно делать ДПФ-столбцов, потом умножение на матрицу, потом ДПФ-строк.

Если в обратном порядке (ДПФ-строк, потом умножение на матрицу, потом ДПФ-столбцов),
то надо делать не одно умножение на матрицу (для вычисления каждого элемента вертикального ДПФ матрица разная), то есть два.
Шо и выходит из формулы в Рабинере и Голде. А формула, как это ни удивительно, правильная. Только объём вычислений возрастает, а они это не учитывают и ничего не говорят об этом. Так шо немного, но обманули. И к типам прореживания это не имеет отношения, и по-времени и по-частоте вначале считают ДПФ-столбцов, просто разбиение, как выше сказали, разное (2xN или Nx2)

Цитата
По типу алгоритма Гуда-Томаса (для взаимно простых множителей декомпозиции, где вообще нет вращений и вычисления производятся в любом
порядке), но с вращениями для Кули -Тьюки.

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



Смысл был в том, чтоб без переставления начать с ДПФ-последовательного блока данных(x0,x1,...,xN-1) как написано в книге, а нельзя. Вот так.
Go to the top of the page
 
+Quote Post
shasik
сообщение Aug 11 2009, 12:47
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



Исходники вашей телеги к БПФ в студию. Т.к. написали Вы уже много, но с увеличением количества букв смысл все дальше и дальше.

Лично я сначала алгоритмы проверяю в Matlabe, а затем уже пихаю в MC.
Так вот, не считая погрешности вычисления, то ДПФ=БПФ(строки-столбцы)=БПФ(столбцы-строки).

Значит, дело явно не в бобине.

Или я не понимаю, о чем Вы говорите. sad.gif
Go to the top of the page
 
+Quote Post
fontp
сообщение Aug 11 2009, 13:00
Сообщение #12


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Цитата(tocha @ Aug 11 2009, 15:49) *
Только объём вычислений возрастает, а они это не учитывают и ничего не говорят об этом. Так шо немного, но обманули.


Ну хорошо, что хоть немного. Факторизация-то есть.

Цитата(shasik @ Aug 11 2009, 16:47) *
Или я не понимаю, о чем Вы говорите. sad.gif


Они не делают двумерного FFT.
Они говорят о факторизации одномерного FFT длиной N через как-бы двумерное размерностью пусть sqrt(N) * sqrt(N)
Не совсем двумерное, там внутри ещё умножать на что-то надо, но типа - сначала sqrt(N) преобразований длиной sqrt(N)
по одному измерению, потом умножения на какие-то поворачисающие множители, потом sqrt(N) преобразований длиной sqrt(N) по другому. Как Кули-Тьюки выводится рекурсией по N

Неважно, забудьте. Рабинер частично реабилитирован biggrin.gif
Go to the top of the page
 
+Quote Post
tocha
сообщение Aug 11 2009, 13:21
Сообщение #13


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

Группа: Свой
Сообщений: 92
Регистрация: 16-05-05
Из: Kiev
Пользователь №: 5 080



Цитата(shasik @ Aug 11 2009, 15:47) *
Исходники вашей телеги к БПФ в студию. Т.к. написали Вы уже много, но с увеличением количества букв смысл все дальше и дальше.

Лично я сначала алгоритмы проверяю в Matlabe, а затем уже пихаю в MC.
Так вот, не считая погрешности вычисления, то ДПФ=БПФ(строки-столбцы)=БПФ(столбцы-строки).

Значит, дело явно не в бобине.

Или я не понимаю, о чем Вы говорите. sad.gif

Я говорю, что если у нас есть массив x0,x1,x2,x3 и мы хотим посчитать его ДПФ,
для этого представляем его в виде:
x0 x1
x2 x3,

то такая последовательность действий: ДПФ(x0,x1)+ДПФ(x2,x3)+умножение на матрицу поворачивающих коеффициентов+ДПФ(x0,x2)+ДПФ(x1,x3) правильного результата не даст. Исходников есстественно нет, т.к. не смог это сделать.

П.с. это не двумерное ДПФ, а вычисление одномерного большого ДПФ через комбинацию малых.

Цитата(fontp @ Aug 11 2009, 16:00) *
Неважно, забудьте. Рабинер частично реабилитирован biggrin.gif


Только частично. )
Go to the top of the page
 
+Quote Post
bahurin
сообщение Aug 15 2009, 11:39
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 20-09-08
Пользователь №: 40 347



Цитата(tocha @ Aug 3 2009, 20:58) *
Хочу посчитать FFT используя Cooley-Tukey алгоритм.

Представляю отсчёты в виде квадратной матрицы, считаю дпф столбцов, умножаю на коэффициенты, потом дпф строк - получаю спектр.
Хочу поменять порядок расчёта (сначала дпф строк, потом столбцов) - не могу получить спектр.
Кто-то реализовывал расчёт иммено в таком порядке (сначала дпф строк, потом столбцов)?

http://www.dspsystem.narod.ru/content/fft/...e/thintime.html написано что и как есть пример программной реализации. Там и про поворачивающие коэффициенты подробно расписано

Сообщение отредактировал bahurin - Aug 15 2009, 11:41
Go to the top of the page
 
+Quote Post
shasik
сообщение Aug 19 2009, 06:56
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



Цитата(tocha @ Aug 11 2009, 16:21) *
Я говорю, что если у нас есть массив x0,x1,x2,x3 и мы хотим посчитать его ДПФ,
для этого представляем его в виде:
x0 x1
x2 x3,

то такая последовательность действий: ДПФ(x0,x1)+ДПФ(x2,x3)+умножение на матрицу поворачивающих коеффициентов+ДПФ(x0,x2)+ДПФ(x1,x3) правильного результата не даст. Исходников есстественно нет, т.к. не смог это сделать.

Специально почитал соответствующий раздел Рабинера/Голда.
Алгоритм №1: БПФ столбцов+умножение на поворачивающие множители+БПФ строк - это работает. Об этом Вы уже писали.
Чтобы работал Алгоритм №2: БПФ строк+умножение на поворачивающие множители+БПФ столбцов - необходима другая сортировка массива.

Если для Алгоритма №1 данные записываются в массив по строкам, т.е. в Вашем примере
х0 х1
х2 х3
то для Алгоритма №2 необходимо записывать по столбцам:
х0 х2
х1 х3

Ответ почему теперь будет работать, очевиден, и, думаю, не требует доказательств
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 15th June 2025 - 17:33
Рейтинг@Mail.ru


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