Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/67: Рейтинг темы: голосов - 67, средняя оценка - 4.85
HarleyDav
1

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

08.01.2012, 14:46. Показов 13222. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравстуйте!
Имеется программа, написанная на языке C. Просьба помочь в переводе на C++.
В данной программе реализовано быстрое преобразование Фурье и обратное. Заранее спасибо.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*Листинг программы БПФ:*/
#include <stdio.h>
#include <math.h>
#include <time.h>
BPF(x,y,N,I) /*Процедура БПФ*/
register float *x,*y; /*x,y7входные массивы данных*/
register int N,I; /*размерностью I=1 7БПФ I=71 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=(71)*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)7*(x+p);
t4=*(y+i)7*(y+p);
*(x+p)=t3*u17t4*u2;
*(y+p)=t4*u1+t3*u2;
*(x+i)=t1; *(y+i)=t2;
}
u3=u1*c7u2*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)
{
j7=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*re7im1*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] 7 %.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);
}

Тестовый пример
N = 1024
F = 100
A = 100
Входной массив :
X[0]= 100
X[1]= 8 1.8
X[2]= 3 3.7
X[3]= 7 26.7
X[4]= 7 77.7
X[5]= 7 99.7
...........................................
X[1018]= 7 85.8
X[1019]= 7 99.7
X[1020]= 7 77.3
X[1021]= 7 26.7
X[1022]= 3 3.7
X[1023]= 8 1.8
Выходной массив:
X[0]= 0
X[1]= 0
X[2]= 0
X[3]= 0
X[4]= 0
..........................................
X[100]= 100
.............................................
X[508]= 0
X[507]= 0
X[508]= 0
X[509]= 0
X[510]= 0
X[511]= 0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2012, 14:46
Ответы с готовыми решениями:

Быстрое преобразование Хартли
Need Help! Need to correct this super Program for Fast Hartley Transform! ...

Найти коэффиценты разложения в ряд Фурье, используя быстрое преобразование Фурье (БПФ)
Прошу помочь мне в нелеггкой задачке нужно для заданной на периоде 2∏ функции f(x) найти...

Быстрое преобразование Фурье
Доброго времени суток. Есть такая задача - даны два сигнала. Обычные сигналы синуса по времени....

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

1
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
30.04.2013, 11:15 2
C++ полностью поддерживает код языка Си
0
30.04.2013, 11:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2013, 11:15
Помогаю со студенческими работами здесь

Быстрое преобразование Фурье
Добрый вечер, друзья. Нужна ваша помощь. Есть задание: &quot;Построить спектр функции&quot; и приведен...

Быстрое преобразование Фурье
Это пример на сайте wikipedia Быстрого Преобразование Фурье. Два вопроса. 1)Как получить...

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

Быстрое преобразование Фурье
Доброго времени суток. Пытаюсь реализовать на С++ создание цифрового фильтра методом свертки, при...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru