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

 
 
 
Reply to this topicStart new topic
> Библиотека БПФ для LPC21xx
LexRoss
сообщение Nov 11 2010, 14:10
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 31-01-09
Пользователь №: 44 202



Где найти быстрое преобразование Фурье для LPC21xx ?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 11 2010, 14:13
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Не бывает БПФ для чего-то там (если только не реализация на ассемблере для DSP).
Тему перенёс.
Модератор.
Go to the top of the page
 
+Quote Post
LexRoss
сообщение Nov 11 2010, 14:29
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 31-01-09
Пользователь №: 44 202



Почему не бывает? Если я возьму код отсюда например http://ru.wikipedia.org/wiki/%D0%91%D1%8B%...%80%D1%8C%D0%B5 он не будет работать для LPC21xx.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 11 2010, 14:38
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Ссылка, которую Вы привели указывает на алгоритм и его реализацию на C++.
БПФ это чистейшая математика, совершенно не зависимая от того, на чём она выполняется. Могут быть нюансы оптимальности, но это уже другой вопрос. Но работать так или иначе будет в любом случае.
Go to the top of the page
 
+Quote Post
LexRoss
сообщение Nov 11 2010, 14:42
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 31-01-09
Пользователь №: 44 202



Может, не так сформулировал вопрос. Мне нужен код, в который можно закинуть массив и на выходе получить преобразованный массив с коэффициентами. Где найти?
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Nov 11 2010, 16:01
Сообщение #6


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(LexRoss @ Nov 11 2010, 16:42) *
Может, не так сформулировал вопрос. Мне нужен код, в который можно закинуть массив и на выходе получить преобразованный массив с коэффициентами. Где найти?

...массив какой? Real? Коэффициенты чего? FFT или физического спектра с логарифмической шкалой?


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
LexRoss
сообщение Nov 11 2010, 16:28
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 31-01-09
Пользователь №: 44 202



Массив Int, на выходе должны получиться амплитуды частот.
Я так понимаю, если задать 512 входных значений получим 256 амплитуд частот?
Что такое
Цитата
физического спектра с логарифмической шкалой
?
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Nov 11 2010, 17:12
Сообщение #8


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(LexRoss @ Nov 11 2010, 18:28) *
Массив Int,

...я не о типе данных спрашивал, а комплексные входные данные или вещественные?

Цитата(LexRoss @ Nov 11 2010, 18:28) *
на выходе должны получиться амплитуды частот.

Частоты бывают разные. У "уоллша" тоже частоты...

Цитата(LexRoss @ Nov 11 2010, 18:28) *
Я так понимаю, если задать 512 входных значений получим 256 амплитуд частот?

Для Real входного массива впринципе верно. По всей видимости Вам нужен RealFFT. Гуглим по этому слову...

Цитата(LexRoss @ Nov 11 2010, 18:28) *
Что такое ?

рановато Вам браться за FFT. С такими познаниями Вы даже протестировать не сможете правильно у Вас все заработало или нет.


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
LexRoss
сообщение Nov 11 2010, 17:39
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 31-01-09
Пользователь №: 44 202



Цитата(DRUID3 @ Nov 11 2010, 20:12) *
рановато Вам браться за FFT. С такими познаниями Вы даже протестировать не сможете правильно у Вас все заработало или нет.

Посоветуйте что почитать, чтобы более-менее понятно было. Пробовал читать Гольденберг. ЦОС - слишком много математики, ничего не понятно.
Go to the top of the page
 
+Quote Post
shista
сообщение Nov 11 2010, 18:11
Сообщение #10





Группа: Участник
Сообщений: 12
Регистрация: 15-07-09
Пользователь №: 51 296



Почитайте Юкио Сато "Обработка сигналов". Написано так, что даже школьник разберётся.
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Nov 12 2010, 01:48
Сообщение #11


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(LexRoss @ Nov 11 2010, 19:39) *
Посоветуйте что почитать, чтобы более-менее понятно было. Пробовал читать Гольденберг. ЦОС - слишком много математики, ничего не понятно.

Ну я начинал вот с этой статьи(очень хороший материал!) и книги Тима Кинтцеля(ее нетрудно найти в сети). Но прочесть это одно, а понять это другое wink.gif ... Читайте, экспериментируйте спрашивайте...

Относительно именно RealFFT - вот недавно ссылались на этот материал. Хороший... На русском почти то же - Р.Лайонс ст.483.
Но для начала все-таки хватит первой ссылки, дабы не запудривать мозги...

Цитата(shista @ Nov 11 2010, 20:11) *
Почитайте Юкио Сато "Обработка сигналов". Написано так, что даже школьник разберётся.

У Сато просто потрясающе дан(введен) коэффициент корреляции - так наглядно и понятно даже школьнику, это нужно умет так подать, не всем дано... А а вот FFT там дан довольно классически, хотя тоже неплохо, но + то, что исходник там на basic, для практики начинать изучение с него я бы не советовал. А RealFFT там вообще не дан! Все таки цель его брошюрки научить понимать, а не перечислить все приемы ЦОС на сегодняшний день.


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
LexRoss
сообщение Nov 19 2010, 08:09
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 31-01-09
Пользователь №: 44 202



Код
#include <LPC21xx.H>    
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define PI 3.14159265358979323846
void BPF(float *x, float *y, int N, int I)
{

register float c,s,t1,t2,t3,t4,u1,u2,u3;
register int i,j,p,l,L,M,M1,K;
L=N;
M=N/2;
M1=N-1;
while(L>=2){

l=L/2; u1=1.; u2=0.; t1=PI/(float)l;
c=cos(t1); s=(-1)*I*sin(t1);
for(j=0; j<l;j++)
{
for(i=j;i<N;i+=L)
{

p=i+l;
t1=*(x+i)+*(x+p);
t2=*(y+i)+*(y+p);
t3=*(x+i)-*(x+p);
t4=*(y+i)-*(y+p);

*(x+p)=t3*u1-t4*u2;

*(y+p)=t4*u1+t3*u2;
*(x+i)=t1; *(y+i)=t2;

}

u3=u1*c-u2*s;
u2=u2*c+u1*s; u1=u3;
}

L/=2;
}
j=0;
for(i=0;i<M1;i++)
{
if(i>j)
{
t1=*(x+j); t2=*(y+j);
*(x+j)=*(x+i); *(y+j)=*(y+i);
*(x+i)=t1; *(y+i)=t2;
}
K=M;
while(j >=K)
{
j-=K;K/=2;
}
j+=K;
}
}



int main (void)  {

IODIR1 = 0x00FF0000;    

int j,N;
float *x,*y,A,Re,Im;
N=8;

x=(float*)calloc(N,sizeof(float));
y=(float*)calloc(N,sizeof(float));

/*x[0]=60;  // здесь зависает
x[1]=65;    
x[2]=21;
x[3]=-3;
x[4]=15;
x[5]=-45;
x[6]=-20;
x[7]=70; */
  
BPF(x,y,N,1);

for(j=0;j < N/2;j++)
{
Re=*(x+j);
Im=*(y+j);
A=2.*sqrt(Re*Re+Im*Im)/(float)N;



}

  while (1) {    
  }                      
}

Программа зависает при попытке записи в x[0]. Если закомментировать, останавливается на строке *(x+p)=t3*u1-t4*u2;
Мне кажется проблема в ф-ии calloc(). Или еще в чем-то? Помогите, пожалуйста.
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Nov 19 2010, 08:46
Сообщение #13


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



1) Попробуйте поставить десятичную точку после цифр. Но вообще зачем calloc? Объявите обычные массивы.
2) уберите float. ARM7 с ним еле работают. потери производительности в минимум в 100 раз...
3) директива register на данный момент уже не поддерживается, да и регистров Вам явно бы не хватило.
4) c=cos(t1); s=(-1)*I*sin(t1); - тоже не добавляет скорости. Нужно читать данные из таблицы, а если еще вспомнить что sin(x) и cos(x) похожи как 2-е капли воды, то... Хотя для первого теста - сойдет.

Кстати вот...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
LexRoss
сообщение Nov 23 2010, 11:27
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 31-01-09
Пользователь №: 44 202



Спасибо за помощь! Заработало.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:29
Рейтинг@Mail.ru


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