Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
HarleyDav
#1

Быстрое преобразование Фурье - C++

09.01.2012, 09:00. Просмотров 1789. Ответов 0
Метки нет (Все метки)

Привет! Прошу вас помочь с переводом программы с языка C на C++. Заранее спасибо.
Код
/*Листинг программы БПФ:/
#include <stdio.h>
#include <math.h>
#include <time.h>
BPF(x,y,N,I) /*Процедура БПФ/
register float *x,*y; /*x,y-входные массивы данных/
register int N,I; /*размерностью I=1 7БПФ I=-1 7ОБПФ/
{
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=N71;
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;
}
}
sinsignal(P,F,A,N) */моделирование входного сигнала/*
*/в форме синусоиды/*
float *P,F,A; */P7массив сигнала размерности N/*
int N; */F7частота сигнала,/*
*/A7амплитуда сигнала/*
{
register int i;
register float r,re,re1,im,im1;
re=cos(2.*PI*F/(float)N);
im=sin(2.*PI*F/(float)N);
re1=A;im1=0.;
for(i=0;i< N;i++)
{
*(P+i)=re1;r=re1;
re1=r*re-im1*im;
im1=im1*re+r*im;
}
}
main()
{
int j,N;
float *x,*y,F,A,Re,Im;
printf("\t\t N :"); scanf("%d",&N);
printf("\t\t F(gc):"); scanf("%f",&F);
printf("\t\t A :"); scanf("%f",&A);
x=(float*)calloc(N,sizeof(float));
y=(float*)calloc(N,sizeof(float));
sinsignal(x,F,A,N);
for(j=0;j < N;j++) printf(" X[%d] - %.1f \n",j,*(x+j));
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;
printf(" X[%d] 7 %d \n",j,(int)A);
free(x); free(y);
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2012, 09:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Быстрое преобразование Фурье (C++):

Быстрое преобразование Фурье - C++
Помогите реализовать задачу. Дана волновая функция(6sin5pit), необходимо преобразовать её спектр с помощью быстрого преобразования Фурье....

Быстрое Преобразование Фурье - C++
В качестве библиотеки взял хваленую IPP, и тут возник рад вопросов, вот код: packageSize = 4096; ...

Быстрое преобразование Фурье - C++
Это пример на сайте wikipedia Быстрого Преобразование Фурье. Два вопроса. 1)Как получить массив анализируемых данных для wav файла....

Обратное быстрое преобразование Фурье - C++
Прямое преобразование работает корректно, а вот обратное возвращает странную дугу в независимсти от исходного сигнала. &quot;Не быстрый&quot;...

Быстрое преобразование фурье wave файла - C++
Всем доброго времени суток! Сейчас работаю над дипломом, в c++ как и в обработке звука пока новичок. На данном этапе мне необходимо...

Быстрое преобразование Фурье по составному основанию - C++
Написал быстрое преобразование Фурье по составному основанию. Не запускается, выдает ошибку: &quot;Debug Error! Run-Time Check Failure #2...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2012, 09:00
Привет! Вот еще темы с ответами:

Необходимо написать быстрое рекурсивное умножение многочленов (полиномов). Не преобразование Фурье - C++
Необходимо написать быстрое рекурсивное умножения многочленов (полиномов). Не преобразование Фурье. Многочлен разбивается на две части (от...

Быстрое преобразование числа - C++
Здравствуйте уважаемые программисты! Подскажите пожалуйста как быстрее всего получить из положительного числа единицу, а из отрицательного...

Преобразование Фурье. Фильтрация изображения - C++
Имеется программа, выполняющая фильтрацию видео с помощью фурье преобразования на с++ с использованием OpenCV/ Кто нибудь может помочь...

Дискретное преобразование Фурье округляет данные - C++
Делаю дискр преобраование Фурье синусоиды берем синусоиду на интервале от 0 до 2п и разбиваем ее на количество точек, которое вводим с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru