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

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

Войти
Регистрация
Восстановить пароль
 
Sarancha
0 / 0 / 0
Регистрация: 21.06.2016
Сообщений: 1
#1

Проверка работы кода по быстрому преобразованию Фурье - C++

21.06.2016, 11:13. Просмотров 140. Ответов 0
Метки нет (Все метки)

Здравствуйте)
Я пытаюсь разобраться с БФП (курсовая работа у меня по нему) и набрела на вот этот код на википедии:

Ниже приведен пример вычисления модуля спектра действительного массива чисел на основе реализации быстрого преобразования Фурье, написанный на 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
 
// AVal - массив анализируемых данных, Nvl - длина массива должна быть кратна степени 2. 
// FTvl - массив полученных значений, Nft - длина массива должна быть равна Nvl. 
 
const double TwoPi = 6.283185307179586; 
 
void FFTAnalysis(double *AVal, double *FTvl, int Nvl, int Nft) { 
int i, j, n, m, Mmax, Istp; 
double Tmpr, Tmpi, Wtmp, Theta; 
double Wpr, Wpi, Wr, Wi; 
double *Tmvl; 
 
n = Nvl * 2; Tmvl = new double[n]; 
 
for (i = 0; i < n; i+=2) { 
Tmvl[i] = 0; 
Tmvl[i+1] = AVal[i/2]; 
} 
 
i = 1; j = 1; 
while (i < n) { 
if (j > i) { 
Tmpr = Tmvl[i]; Tmvl[i] = Tmvl[j]; Tmvl[j] = Tmpr; 
Tmpr = Tmvl[i+1]; Tmvl[i+1] = Tmvl[j+1]; Tmvl[j+1] = Tmpr; 
} 
i = i + 2; m = Nvl; 
while ((m >= 2) && (j > m)) { 
j = j - m; m = m » 1; 
} 
j = j + m; 
} 
 
Mmax = 2; 
while (n > Mmax) { 
Theta = -TwoPi / Mmax; Wpi = sin(Theta); 
Wtmp = sin(Theta / 2); Wpr = Wtmp * Wtmp * 2; 
Istp = Mmax * 2; Wr = 1; Wi = 0; m = 1; 
 
while (m < Mmax) { 
i = m; m = m + 2; Tmpr = Wr; Tmpi = Wi; 
Wr = Wr - Tmpr * Wpr - Tmpi * Wpi; 
Wi = Wi + Tmpr * Wpi - Tmpi * Wpr; 
 
while (i < n) { 
j = i + Mmax; 
Tmpr = Wr * Tmvl[j] - Wi * Tmvl[j-1]; 
Tmpi = Wi * Tmvl[j] + Wr * Tmvl[j-1]; 
 
Tmvl[j] = Tmvl[i] - Tmpr; Tmvl[j-1] = Tmvl[i-1] - Tmpi; 
Tmvl[i] = Tmvl[i] + Tmpr; Tmvl[i-1] = Tmvl[i-1] + Tmpi; 
i = i + Istp; 
} 
} 
 
Mmax = Istp; 
} 
 
for (i = 0; i < Nft; i++) { 
j = i * 2; FTvl[i] = 2*sqrt(pow(Tmvl[j],2) + pow(Tmvl[j+1],2))/Nvl; 
} 
 
delete []Tmvl; 
}
Я уже всю голову себе сломала... Что за модуль спектра действительного массива чисел?
и как проверить правильность работы этой ф-ции? Есть ли подходящая для проверки ф-ла?
Или вообще как находится этот "спектр массива"?

Возможно стоит обратиться в другую ветку форума
Но если дадите ответ, буду премного благодарна!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2016, 11:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка работы кода по быстрому преобразованию Фурье (C++):

Подскажите, как сократить время работы кода? Проверка на простое число - C++
#include &lt;iostream&gt; using namespace std; int main() { int x, k = 0; cin &gt;&gt; x; for (int i = 1; i &lt;= x;...

Обнулить кусок памяти (выделенной под указатели) по быстрому - C++
Есть хеш-таблица и есть кусок памяти под неё, нужно занулить изначально весь кусок памяти, но как можно быстрее, те хорошо бы использовать...

Какой прогой можно по быстрому посмотреть таблицу, создаваемую SQL файлом? - C++
Тоесть как открыть sql файл и посмотреть таблицу? Варианты типа открыть ноутпадом не предлагать.

К преобразованию Фурье - Функциональный анализ
Известно, что в вещественном виде преобразование Фурье (ПФ) имеет вид: {A}_{n}= \frac{1}{\pi} \int_{-\pi }^{+\pi}u(t) cos(nt)dt и ...

Оконное преобразованию Фурье - Цифровая обработка сигналов
Здравствуйте! Решил перепроверить свои результаты &quot;классическим&quot; методом. Взял сигнал и стал следить за изменением частоты с помощью...

Литература по дискретному преобразованию Фурье - Алгоритмы
подскажите, пожалуйста, литературу, где рассматривается преобразование Фурье для изображений. Желательно, чтобы это было понятно...

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

Найти значение частоты по преобразованию Фурье сигнала из АЦП - Matlab
Добрый день! Имею сигнал АЦП (приложение в файле, массив 3083 значений), делаю преобразование фурье и не могу получить значение частоты....

Разъяснение работы кода для работы с документом Word - C#
Помогите пожалуйста разобраться с кодом построчно, не совсем понятен принцип действия var d = new...

Проверка пин кода и в соответствии с ним заполнить поля после ввода пин-кода на другой форме - C#
Здраствуйте!Люди проблема в следующем, есть задача где мне надо сделать проверку пин кода и в соответствии с ним чтобы автоматически из...

Преобразованию адреса - Delphi
var BaseAdr: ^DWord; begin ... BaseAdr := ptr(DWord(Form1.Edit1.Text)); ... end; в Edit1 хекс число 1234FFFF никак...


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

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

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