|
|
  |
БПФ, Прошу пояснения |
|
|
|
Apr 21 2015, 07:06
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
Цитата А может для этого существует какая-то программка специализированная, которая умеет считать коэффициенты? Никто не знает? Matlab  Считаем по формуле: w_sin(k) = imag(exp(-1i*2*pi*k/N)), w_cos(k) = real(exp(-1i*2*pi*k/N)), k=0...N-1
|
|
|
|
|
Apr 21 2015, 07:06
|
Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 28-08-13
Из: SPb
Пользователь №: 78 086

|
Цитата(Dmitriyspb @ Apr 21 2015, 10:43)  Хорошо.  Напишите поподробнее пожалуйста как вы считаете коэффициенты? Wn = exp(-i*2*pi/n), n - размер фурье (число точек), i = [0 ..(n/2)-1] - номер коэффициента. А у Вас еще какой-то "k2" в формуле??????????Вы в #11 привели картинку. Там есть поворачивающие множители W. Их коэффициенты 0,1,2,3. Они рассчитываются у меня как W2, коэффициенты 0,1,2,3 записаны в k2. Получается вектор коэффициентов W с картинки из #11.
|
|
|
|
|
Apr 21 2015, 07:32
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498

|
Цитата(serjj @ Apr 21 2015, 10:06)  Matlab  Ах... простите=))) глупый вопрос Цитата(Kapsik @ Apr 21 2015, 10:06)  Вы в #11 привели картинку. Там есть поворачивающие множители W. Их коэффициенты 0,1,2,3. Они рассчитываются у меня как W2, коэффициенты 0,1,2,3 записаны в k2. Получается вектор коэффициентов W с картинки из #11. Тогда вроде все укладывается. Даже понятно. _________________________________________________ Тут другой вопросик. Если в бабочку грузить отсчеты по порядку 0,1,2,3... и.т.д. ны выходе получаем кашу. Для того, чтобы этой каши не было используют при загрузки бит-реверсивную перестановку отсчетов. Я правильно понял? Т.е. перемешиваем на входе и имеем по порядку на выходе ИЛИ имеем по порядку на входе, тогда перемешиваем на выходе, чтобы упорядочить? to KapsikЯ на verilog это все дело планирую транслировать. Вы в matlab будете коэффициенты считать?
Эскизы прикрепленных изображений
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Apr 21 2015, 07:37
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
Цитата Если в бабочку грузить отсчеты по порядку 0,1,2,3... и.т.д. ны выходе получаем кашу. Для того, чтобы этой каши не было используют при загрузки бит-реверсивную перестановку отсчетов. Я правильно понял? Т.е. перемешиваем на входе и имеем по порядку на выходе ИЛИ имеем по порядку на входе, тогда перемешиваем на выходе, чтобы упорядочить? Ну да. Прореживание по времени / прореживание по частоте. На dsplib эти техники как раз и разобраны.
|
|
|
|
|
Apr 21 2015, 08:03
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498

|
Цитата(serjj @ Apr 21 2015, 10:37)  Ну да. Прореживание по времени / прореживание по частоте. На dsplib эти техники как раз и разобраны. Хорошо. Т.е. 1. Я складываю N (2048) отсчетов от АЦП в память. 2. После заполнения памяти начинаю вычитывать эти значения, НО вычитываю не по порядку а использую бит-реверсивный преобразователь адреса для памяти. на этом этапе у меня есть корректные отсчеты в нужном порядке. 3. Теперь я прохожу необходимое кол-во ступеней преобразования отсчетов из временной области в частотную (БАБОЧКА) 3.1. Тут использую ROM с отсчетами Wk, которые использую при вычислениях. 4. Через постоянное времени моей цифровой системы начнут выскакивать отсчеты в правильном порядке. 5. Эти отсчеты уже можно перенести на плоскость с заданным шагом (Частота дискретизации/ число точек)?????
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Apr 21 2015, 08:11
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
Цитата 5. Эти отсчеты уже можно перенести на плоскость с заданным шагом (Частота дискретизации/ число точек)????? Если в вашем преобразовании есть восстановление порядка следования, то да. При этом смотрим например альтеровскую корку. Там есть опции прямого и обратного следования. В кастомизируемых корках еще может быть опция центрирования, когда 0 стоит не в начале выборки а в 1, что удобно в некоторых приложениях спектрального анализа. Подумайте сразу еще и о скалирование результатов умножения. Чтобы потом не было сюрпризов. Это нужно делать на каждом этапе при целочисленной реализации. Очень важный и тонкий момент реализации. При этом FFT может выступать в качестве некоторого АРУ. Исходный масштаб можно восстановить, если вы будете накапливать информацию о скалировании с каждого шага.
|
|
|
|
|
Apr 21 2015, 08:22
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498

|
Цитата(serjj @ Apr 21 2015, 11:11)  Если в вашем преобразовании есть восстановление порядка следования, то да. Если я их загружаю в БАБОЧКУ в бит-реверсивном порядке, тогда у меня на выходе все должно быть упорядочено. Верно понимаю? На счет скалирования (по просту говоря масштабирования) еще не думал. Ткните пожалуйста где почитать можно.
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Apr 21 2015, 08:37
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
Цитата Если я их загружаю в БАБОЧКУ в бит-реверсивном порядке, тогда у меня на выходе все должно быть упорядочено. Верно понимаю? Это от алгоритма будет зависить. Можно сделать 1001 способом. Логичнее все манипуляции с перестановками делать отдельно а бабочку отдельно и кормить ее всегда данными, вычитываемыми по порядку. На dsplib объясняются 2 самых основных подхода к мультиплексированию, но наверное есть еще всякие частные решения, заточенные под конкретное железо. Хы, какой я раритет нашёл, очень винтажно
kabalr1985.pdf ( 1.34 мегабайт )
Кол-во скачиваний: 194Хоть самому читай. Ну а вообще поиск по scaling during fft stages можно смотреть.
|
|
|
|
|
Apr 21 2015, 08:50
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498

|
А что по этому поводу думает уважаемый Kapsik? Как он все это дело планирует в verilog описывать. Можно функционально рассказать Цитата(serjj @ Apr 21 2015, 11:37)  Это от алгоритма будет зависить. Можно сделать 1001 способом. Логичнее все манипуляции с перестановками делать отдельно а бабочку отдельно и кормить ее всегда данными, вычитываемыми по порядку. На dsplib объясняются 2 самых основных подхода к мультиплексированию, но наверное есть еще всякие частные решения, заточенные под конкретное железо. Хы, какой я раритет нашёл, очень винтажно
kabalr1985.pdf ( 1.34 мегабайт )
Кол-во скачиваний: 194Хоть самому читай. Ну а вообще поиск по scaling during fft stages можно смотреть. спасибо
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Apr 21 2015, 09:13
|
Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 28-08-13
Из: SPb
Пользователь №: 78 086

|
Цитата(Dmitriyspb @ Apr 21 2015, 12:50)  А что по этому поводу думает уважаемый Kapsik? Хех, уважаемый, приятно, но боюсь пока не заслуженно ;-) Набросал вот такую блочную схему. Коротенько описание. ser2par сдвиговый регистр, в нем копятся 16 отсчетов. Lat_data защелкивает эти отсчеты одновременно совершая перестановку. Далее идет мультиплексор который коммутирует отсчеты по нужным бабочкам, на выходе бабочек умножение и все по новой. Интересно, что скажут остальные по поводу такой реализации .
|
|
|
|
|
Apr 21 2015, 10:02
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498

|
Цитата(Kapsik @ Apr 21 2015, 12:13)  Интересно, что скажут остальные по поводу такой реализации Остальные пока молчат. Вот моя версия. Думаю что-то очень похожее. А дальше что вы планируете с этими отсчетами делать?
Эскизы прикрепленных изображений
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Apr 21 2015, 10:43
|
Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 28-08-13
Из: SPb
Пользователь №: 78 086

|
Цитата(Dmitriyspb @ Apr 21 2015, 14:02)  Остальные пока молчат. Вот моя версия. Думаю что-то очень похожее.
А дальше что вы планируете с этими отсчетами делать? Вообще я делаю эквалайзер. Так что буду выводить на VGA моник.
|
|
|
|
|
Apr 21 2015, 10:49
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498

|
Цитата(Kapsik @ Apr 21 2015, 13:43)  Вообще я делаю эквалайзер. Так что буду выводить на VGA моник. вы в Matlab коэффициенты считать для ROM будите? или уже посчитали?
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Apr 21 2015, 10:59
|
Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 28-08-13
Из: SPb
Пользователь №: 78 086

|
Цитата(Dmitriyspb @ Apr 21 2015, 14:49)  вы в Matlab коэффициенты считать для ROM будите? или уже посчитали? Да, в матлабе посчитаю и в mif засуну.
|
|
|
|
|
Apr 22 2015, 10:25
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498

|
Товарищи, правильно ли я считаю коэффициент для своей бабочки???????????????????????????????? В коде приведено k=2, N=2048; Код >> k=2; >> N=2048; >> W2=exp(-j*2*pi*k/N)
W2 =
1.0000 - 0.0061i
>> W2= 1-0.0061
W2 =
0.9939
>> % Преобразовываю в 16-ти разрядную >> % целочисленную форму (1бит-знаковый + 15бит мантисса) >> L = (2^15)-1
L =
32767
>> F = W2*L
F =
3.2567e+004
>> round (F)
ans =
32567;
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|