Petrovich 0 15 апреля, 2009 Опубликовано 15 апреля, 2009 · Жалоба Подскажите кто знает. Делаю 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: Подскажите кто знает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad27 0 15 апреля, 2009 Опубликовано 15 апреля, 2009 · Жалоба Входной массив пустой? Может с АЦП не считываются входные данные? А в симуляторе как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petrovich 0 15 апреля, 2009 Опубликовано 15 апреля, 2009 · Жалоба Данные с с АЦП идут конечно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petrovich 0 16 апреля, 2009 Опубликовано 16 апреля, 2009 · Жалоба Эту проблему победил, но возник иной вопрос. Частота семплирования 8192Гц. На вход подаю 1кГц. Накапливаю 2048 выборок. После FFT просматриваю 1024 значения Input_Sygnal[].real. Наблюдаю две палки симмитричные относительно 512. первая стоит приблизительно на 125 месте. Почему так? Разрешение по частоте должно быть 4 Гц, палка должна быть на 250-м месте и ни какой второй быть не должно. Или я что то не понимаю?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petrovich 0 16 апреля, 2009 Опубликовано 16 апреля, 2009 · Жалоба Все заработало, вот здесь SquareMagnitudeCplx(2048, &Input_Sygnal[0], &Input_Sygnal[0].real); нельзя подставлять в качесве выходного входной массив. Хотя имеено так сделанно в микрочиповском примере. На самом деле надо делать так: SquareMagnitudeCplx(2048, &Input_Sygnal[0], &Out_FFT[0]); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться