0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 73
1

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

11.12.2015, 01:33. Показов 810. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал быстрое преобразование Фурье по составному основанию. Не запускается, выдает ошибку:

"Debug Error!
Run-Time Check Failure #2 - S."

Во время компиляции ничего не беспокоит...

Вот код:

Кликните здесь для просмотра всего текста
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include<iostream> 
#include<cmath> 
#include<stdlib.h> 
#include<complex> 
 
//template< class T > class complex; 
//template<> class complex<double>; 
 
using namespace std; 
 
#define Ngarm 30 
#define PI 3.14159265 
#define Freq 1000 
#define Amp 1 
#define Fd (2*Freq) 
#define p1 2 
#define p2 3 
#define p3 5 
 
 
 
const complex<long double> J (0, 1); 
 
complex<long double> Wnk(int M, int p, int q) 
{ 
return(exp(-J * (long double)(2 * PI / Ngarm * M * p * q))); 
} 
 
int main(void) 
{ 
int a = 0; 
 
long double Sig[p1][p2*p3]; //Выделение памяти под массив значений сигнала 
//complex<double> FFT1[]; 
for (int y = 0; y < p1; y++) //фиксируем строку 
{ 
for (int x = 0; x < p2*p3; x++) //заполнение по столбцам 
{ 
Sig[y][x] = Amp * sin(2 * a * PI*Freq / Fd); 
a++; 
//cout « Sig[i][k] « '/t'; 
} 
//cout « endl; 
} 
 
complex<long double> FFT2[p1][p2*p3]; //Выделяем память под массив двухточечных дпф всех стольцов 
 
for (int x = 0; x < p2*p3; x++) //фиксируем столбец 
{ 
for (int s = 0; s < p1; s++) //заносим значения в строчки FFT5 строка
{ 
for (int y = 0; y < p1; y++) //повторяем сумму 
{ 
FFT2[s][x] = FFT2[s][x] + Sig[x][y] * Wnk(p2*p3, s, y); 
} 
FFT2[s][x] = FFT2[s][x] * Wnk(1, s, x); //домножаем на поворачивающие множители 
} 
} 
 
complex<long double> FFTFull[p1][p2][p3]; //выделяем память под 3-массив,чтобы далее разложить ДПФ строки в матрицы по базису p2 и p3 
 
for (int y = 0; y < p1; y++) //поехали по строчкам 
{ 
for (int x = 0; x < p2; x++) //столбцы 
{ 
for (int z = 0; z < p3; z++) //в глубину 
{ 
int n = p3 * x + z; //номер элемента в матрице (ширина*глубина) по порядку строки FFT5 
FFTFull[y][x][z] = FFT2[y][n]; //заполнение 
} 
} 
} 
 
//complex<long double> FFT3[p1][p2][p3]; //выделяем память под ДПФ трёхточечных стобцов 
 
for (int y = 0; y < p1; y++) //по строкам срезали пласт рассматриваемой матрицы p2xp3 
{ 
for (int x = 0; x < p3; x++) //по столбцам p2xp3 
{ 
for (int s = 0; s < p2; s++) //Что будем заносить в FFT3 
{ 
for (int z = 0; z < p2; z++) //суммируем по строчкам p2xp3 
{ 
FFTFull[y][x][s] = FFTFull[y][x][s] + FFTFull[y][x][z] * Wnk(p3, s, z); 
} 
FFTFull[y][x][s] = FFTFull[y][x][s] * Wnk(1, x, s); //домножаем на поворачивающие множители 
} 
} 
} 
 
//complex<long double> FFT5[p1][p2][p3]; //выделяем память под пятиточечнуб ДПФ 
 
for (int y = 0; y < p1; y++) 
{ 
for (int z = 0; z < p2; z++) 
{ 
for (int s = 0; s < p3; s++) 
{ 
for (int x = 0; x < p3; x++) 
{ 
FFTFull[y][s][z] = FFTFull[y][s][z] + FFTFull[y][x][z] * Wnk(p2, s, x); 
} 
} 
} 
} 
 
return 0; 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2015, 01:33
Ответы с готовыми решениями:

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

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

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

Обратное быстрое преобразование Фурье
Прямое преобразование работает корректно, а вот обратное возвращает странную дугу в независимсти от...

2
1 / 1 / 0
Регистрация: 06.01.2015
Сообщений: 13
14.12.2015, 06:17 2
Привет, коллега по несчастью. Самому нужно сделать курсач "БПФ" до 15 или 16 декабря.
Запустил твой проект. ошибка следующая: Run-Time Check Failure #2 - Stack around the variable 'FFTFull' was corrupted.(Во время выполнения ошибка проверки #2 - Стек вокруг переменной 'FFTFull' был поврежден.)
0
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 73
14.12.2015, 08:02  [ТС] 3
Привет, вообще говоря, я уже разобрался и исправил. Работает раз через раз, но, вроде строит...
0
14.12.2015, 08:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2015, 08:02
Помогаю со студенческими работами здесь

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

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

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

Быстрое преобразование Фурье (БПФ)
Здравствуйте! Подскажите, пожалуйста, понятную реализацию БПФ. Их существует несколько, и, как...

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

Быстрое преобразование Фурье
Всем привет очень нужна помощь. Есть на выбор несколько сигналов (функций) нужно разложить одну на...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru