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

 
 
> FFT используя FFTComplexIP, Не желает воевать
Petrovich
сообщение Apr 15 2009, 11:44
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 2-06-05
Из: Днепропетровск
Пользователь №: 5 658



Подскажите кто знает. Делаю FFT для dsPIC33 используя библиотечную функцию FFTComplexIP.
Входной массив описан вот так:
fractcomplex Input_Sygnal[2048] __attribute__ ((space(ymemory), aligned (4096)));
twiddleFactors описан так:
const fractcomplex TwidFactors[1024] __attribute__ ((space(auto_psv), aligned (4096))
Входной массив заполняю так:
Input_Sygnal[Count_Samples].real = ADC;
Input_Sygnal[Count_Samples].imag = 0;

FFT делаю так:
FFTComplexIP(11, &Input_Sygnal[0], (fractcomplex *) __builtin_psvoffset(&TwidFactors[0]), (int) __builtin_psvpage(&TwidFactors[0]));
BitReverseComplex (11, &Input_Sygnal[0]);
SquareMagnitudeCplx(2048, &Input_Sygnal[0], &Input_Sygnal[0].real);

В результате все Input_Sygnal[].real всегда равны 0, при любом сигнале подаваемом на вход. Ни черта не могу понять, вроде все так как в ихних примерах, почему не работает? 07.gif Подскажите кто знает...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
Vlad27
сообщение Apr 15 2009, 13:14
Сообщение #2


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

Группа: Свой
Сообщений: 95
Регистрация: 31-07-05
Из: Полоцк Беларусь
Пользователь №: 7 227



Входной массив пустой? Может с АЦП не считываются входные данные? А в симуляторе как?
Go to the top of the page
 
+Quote Post
Petrovich
сообщение Apr 15 2009, 13:39
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 2-06-05
Из: Днепропетровск
Пользователь №: 5 658



Данные с с АЦП идут конечно.
Go to the top of the page
 
+Quote Post
Petrovich
сообщение Apr 16 2009, 06:32
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 2-06-05
Из: Днепропетровск
Пользователь №: 5 658



Эту проблему победил, но возник иной вопрос.
Частота семплирования 8192Гц. На вход подаю 1кГц. Накапливаю 2048 выборок. После FFT просматриваю 1024 значения Input_Sygnal[].real. Наблюдаю две палки симмитричные относительно 512. первая стоит приблизительно на 125 месте. Почему так? Разрешение по частоте должно быть 4 Гц, палка должна быть на 250-м месте и ни какой второй быть не должно. Или я что то не понимаю??
Go to the top of the page
 
+Quote Post
Petrovich
сообщение Apr 16 2009, 09:02
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 2-06-05
Из: Днепропетровск
Пользователь №: 5 658



Все заработало,
вот здесь SquareMagnitudeCplx(2048, &Input_Sygnal[0], &Input_Sygnal[0].real);
нельзя подставлять в качесве выходного входной массив. Хотя имеено так сделанно в микрочиповском примере. На самом деле надо делать так:
SquareMagnitudeCplx(2048, &Input_Sygnal[0], &Out_FFT[0]);
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 16:31
Рейтинг@Mail.ru


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