Отговори на тема  [ 7 мнения ] 
Някой правил ли е FFT с PIC18 :) 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Фев 27, 2007 10:57 am
Мнения: 3
Мнение Някой правил ли е FFT с PIC18 :)
Опитвам се да направя спектрален анализатор (с не много висока точност) и алгоритмите за FFT, които намерих из интернет като че ли не са много подходящи за целта и затова моля някой да сподели своят опит.
10х


Пет Мар 16, 2007 5:47 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
по-добре постни кода, та да може да се коментира, и кажи с какъв компилатор го компилираш...

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Пет Мар 16, 2007 6:43 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
не разбрах какво те тревожи. ако искаш да намериш алгоритъм за ФФТ в който няма обръщане на число, забрави. всъщност, алгоритъма за ФФТ е един, не виждам защо е множественото число.


Пет Мар 16, 2007 7:29 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Фев 27, 2007 10:57 am
Мнения: 3
Мнение 
zaphod написа:
не разбрах какво те тревожи. ако искаш да намериш алгоритъм за ФФТ в който няма обръщане на число, забрави. всъщност, алгоритъма за ФФТ е един, не виждам защо е множественото число.



Множественото число е, защото алгориъмът има няколко разновидности както и различни оптимизации.


Пет Мар 16, 2007 11:48 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Апр 03, 2006 9:00 am
Мнения: 39
Мнение 
Някяде из архивите application notes на Мicrochip имаше FFT за PIC17.


Пон Мар 19, 2007 12:59 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Юни 05, 2006 1:48 pm
Мнения: 4906
Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
Мнение 
emil_v_k,
трябва да почнеш с това:
1. какво точно искаш да правиш с бързо преобразувание на фурие
2. от кой ред
3. величината която ще анализираш колко бързо се изменя във времето
4. с каква честота дискретизираш

и тогава идват въпросите с оптимизация на кода :!:
щото както ти се каза алгоритъма е един, а вече как ще го напишеш си зависи от теб, ако ползваш готов код трябва да го разбереш :!:
а оптимизация се пише за конкретен процесор! и трябва да си готов за асемблерско писане

_________________
... ако трети ден не ти се работи... това означава, че е сряда !


Вто Мар 20, 2007 3:35 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Фев 27, 2007 10:57 am
Мнения: 3
Мнение :)
FFT-то го направих, но за съжаление за 128 точки ми отнема 80ms при положение, че работя с PIC18F452 на 40Mhz. Дайте идея как да го оптимизирам :). Ето го и кода:

inline sint16 fix_mpy(sint16 a, sint16 b)
{
sint32 c;

if(!a)
return 0;
if(!b)
return 0;
c = ((sint32) a * (sint32) b) >> 14;
b = c & 0x01;
a = (c >> 1) + b;
return (sint16) a;
}


void fix_fft(sint16 fr[], sint16 fi[], sint16 m)
{
uint16 i_counter, j_counter, mr, nn, l, k, istep, n;
sint16 qr, qi, tr, ti, wr, wi;

n = 1 << m;
mr = 0;
nn = n - 1;
for(m = 1; m <= nn; ++m) {
l = n;
do {
l >>= 1;
} while(mr + l > nn);
mr = (mr & (l-1)) + l;
if(mr <= m)
continue;
tr = fr[m];
fr[m] = fr[mr];
fr[mr] = tr;
}
l = 1;
k = LOG2_N_WAVE-1;
while(l < n) {
istep = l << 1;
for(m = 0; m < l; ++m) {
j_counter = m << k;
wr = signed_shift(Sinewave[j_counter + signed_shift(N_WAVE, 2)], 1);
wi = signed_shift(-Sinewave[j_counter], 1);
for(i_counter = m; i_counter < n; i_counter += istep) {
j_counter = i_counter + l;
tr = fix_mpy(wr, fr[j_counter]) - fix_mpy(wi, fi[j_counter]);
ti = fix_mpy(wr, fi[j_counter]) + fix_mpy(wi, fr[j_counter]);
qr = signed_shift(fr[i_counter], 1);
qi = signed_shift(fi[i_counter], 1);
fr[j_counter] = qr - tr;
fi[j_counter] = qi - ti;
fr[i_counter] = qr + tr;
fi[i_counter] = qi + ti;
}
}
--k;
l = istep;
}
}


Пон Апр 09, 2007 11:40 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 7 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни