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

 
 
> Порядок данных на выходе функции ifft(), Matlab
lexus.mephi
сообщение Feb 28 2013, 17:07
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 24-09-05
Пользователь №: 8 903



Сверяю данные на выходе блока IFFT на Verilog и matlab'овской моделью. Матлабовская модель эталонная, поэтому стараюсь полностью повторить ее поведение на Verilog.
С операцией fftshift кое-как разобрался, т.ч. данные вроде должны правильно подаваться. А вот с функцией ifft - беда. Не могу найти, в какой последовательности она выдает данные.
NFFT - размер IFFT (допустим, 1024). На остальные множители не обращайте внимание.
Код
    % FFT shift
    fftDI = fftshift(fftDI, 2);

    % IFFT
    DataOut{misoGroup} = 5/sqrt(27*C_PS)*NFFT*ifft(fftDI, NFFT, 2);


ifft(fftDI, 1024, 2) - в каком порядке пойдут данные после этого преобразования?

Спасибо!


--------------------
Мои сайты:www.systemverilog.ru
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
RobFPGA
сообщение Mar 1 2013, 07:04
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

На вход ifft нужно подавать данные в том же порядке как на выходе fft, то есть ifft(fft(sig))==sig;
По индексам частот вот так - 0, 1, 2,..., N/2-1, -N/2, -N/2-1 ,...,-1. где N длинна fft.

В Вашем случае нужно опять сделать fftshift - ifft(fftshift(fftDI), NFFT, 2);

Успехов! Rob.
Go to the top of the page
 
+Quote Post
lexus.mephi
сообщение Mar 4 2013, 08:04
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 24-09-05
Пользователь №: 8 903



Цитата(RobFPGA @ Mar 1 2013, 11:04) *
Приветствую!

На вход ifft нужно подавать данные в том же порядке как на выходе fft, то есть ifft(fft(sig))==sig;
По индексам частот вот так - 0, 1, 2,..., N/2-1, -N/2, -N/2-1 ,...,-1. где N длинна fft.

В Вашем случае нужно опять сделать fftshift - ifft(fftshift(fftDI), NFFT, 2);

Успехов! Rob.


Как подавать данные мне, к сожалению, выбирать нельзя - нужно четко делать, как в Matlab-модели.
1) У меня 853 несущие (для режима 1K).
2) Я дополняю их нулями слева и справа до 1024.
3) Дальше делаю fftshift(fftDI, 2) над данными, т.е. меняю половинки местами.
4) Подаю все это на ifft - DataOut{misoGroup} = 5/sqrt(27*C_PS)*NFFT*ifft(fftDI, NFFT, 2);

Пункты 1-4 заложены в матлабовской модели, а я их всего-лишь повторяю на RTL.

5) В какой последовательности данные будут на выходе?

P.S. На выходе ifft обратной операции fftshift не делается.


--------------------
Мои сайты:www.systemverilog.ru
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Mar 7 2013, 08:48
Сообщение #4


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(lexus.mephi @ Mar 4 2013, 10:04) *
P.S. На выходе ifft обратной операции fftshift не делается.


На выходе ifft операция fftshift не имеет смысла. Её нужно делать перед ifft, RobFPGA же написал
Код
ifft(fftshift(fftDI), NFFT, 2);
Go to the top of the page
 
+Quote Post
lexus.mephi
сообщение Mar 7 2013, 11:52
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 24-09-05
Пользователь №: 8 903



Цитата(_Anatoliy @ Mar 7 2013, 12:48) *
На выходе ifft операция fftshift не имеет смысла. Её нужно делать перед ifft, RobFPGA же написал
Код
ifft(fftshift(fftDI), NFFT, 2);


Не спорю. Это было лишнее предложение )

В итоге выяснилось - ifft выдает данные в natural order.

К сожалению, у меня на выходе RTL bit-reverse, поэтому теперь возникла необходимость в перегруппировки данных. Прошу прощения за оффтоп, но никто не реализовывал reorder buffer для ifft на Verilog?


--------------------
Мои сайты:www.systemverilog.ru
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Mar 7 2013, 15:58
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(lexus.mephi @ Mar 7 2013, 13:52) *
В итоге выяснилось - ifft выдает данные в natural order.

К сожалению, у меня на выходе RTL bit-reverse, поэтому теперь возникла необходимость в перегруппировки данных. Прошу прощения за оффтоп, но никто не реализовывал reorder buffer для ifft на Verilog?


А кто вам мешает сделать корку FFT с natural output?

Если же такой нет то сделать буфер несложно -

вариант для быстрых и богатых :
2х банковый буфер - пишем в bit-reverse, в конце переключаем банк и начинаем читать из записанного банка в normal или в другой удобной последовательности (например как после fftshift). Новые данные пишем во второй банк.

вариант для среднего класса:
1 буфер - пишем по очереди в bit-reverse/normal последовательности а читаем соответственно в normal/bit-reverse
Переключение вариантов записи и начало чтения происходит по окончанию записи.

ну и вариант для медленных и бедных:
1 буфер - пишем bit-reverse последовательности а читаем соответственно в normal.
Пока не вычитаем, новые данные записывать нельзя.

Нужный вариант выбираете в зависимости от толщины вашего коше... FPGA sm.gif

Успехов! Rob.
Go to the top of the page
 
+Quote Post
lexus.mephi
сообщение Mar 10 2013, 11:10
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 24-09-05
Пользователь №: 8 903



Цитата
А кто вам мешает сделать корку FFT с natural output?


Ну я пока пытаюсь обойтись без Altera FFT Megafunction. Смог реализовать алгоритм, где на выходе bit-reverse.

Цитата
Если же такой нет то сделать буфер несложно -

вариант для быстрых и богатых :
2х банковый буфер - пишем в bit-reverse, в конце переключаем банк и начинаем читать из записанного банка в normal или в другой удобной последовательности (например как после fftshift). Новые данные пишем во второй банк.

вариант для среднего класса:
1 буфер - пишем по очереди в bit-reverse/normal последовательности а читаем соответственно в normal/bit-reverse
Переключение вариантов записи и начало чтения происходит по окончанию записи.

ну и вариант для медленных и бедных:
1 буфер - пишем bit-reverse последовательности а читаем соответственно в normal.
Пока не вычитаем, новые данные записывать нельзя.


Вот тут или я где-то туплю, или действительно все так просто =)
Есть bit-reverse на выходе:
0 4 2 6 1 5 3 7

Мне нужен natural order:
0 1 2 3 4 5 6 7

Мне разве не нужна память с адресами, чтобы прочитать данные в natural order? Bit-reverse это же не просто Вам - 7 6 5 4 3 2 1 0 =)





--------------------
Мои сайты:www.systemverilog.ru
Go to the top of the page
 
+Quote Post

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

 


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


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