С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 27.06.2019
Сообщений: 8
1

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

17.11.2020, 21:21. Показов 3588. Ответов 0

Author24 — интернет-сервис помощи студентам
Добрый день! Сто лет не работала на С++, помогите, пожалуйста. Необходимо сделать быстрое преобразование Фурье, потом обратное. Нашла программу в интернете, их много на самом деле. Выбрала эту:
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
#include <complex>
#include <vector>
#include <algorithm>
#include <iostream>
#include <math.h>
 
#define M_PI 3.14159265358979323846
using namespace std;
typedef complex<double> w_type;
 
static vector<w_type> fft(const vector<w_type>& In)
{
    int i = 0, wi = 0;
    int n = In.size();
    vector<w_type> A(n / 2), B(n / 2), Out(n);
    if (n == 1) {
        return vector<w_type>(1, In[0]);
    }
    i = 0;
    copy_if(In.begin(), In.end(), A.begin(), [&i](w_type e) {
        return !(i++ % 2);
        });
    copy_if(In.begin(), In.end(), B.begin(), [&i](w_type e) {
        return (i++ % 2);
        });
 
    vector<w_type> At = fft(A);
    vector<w_type> Bt = fft(B);
 
    transform(At.begin(), At.end(), Bt.begin(), Out.begin(), [&wi, &n]
    (w_type& a, w_type& b) {
            return  a + b * exp(w_type(0, 2 * M_PI * wi++ / n));
        });
    transform(At.begin(), At.end(), Bt.begin(), Out.begin() + n / 2, [&wi, &n]
    (w_type& a, w_type& b) {
            return  a + b * exp(w_type(0, 2 * M_PI * wi++ / n));
        });
    return Out;
}
void main(int argc, char* argv[])
{
    int ln = (int)floor(log(argc - 1.0) / log(2.0));
    vector<w_type> In(1 << ln);
    std::transform(argv + 1, argv + argc, In.begin(), [&](const char* arg) {
        return w_type(atof(arg), 0);
        });
    vector<w_type> Out = fft(In);
    for (vector<w_type>::iterator itr = Out.begin(); itr != Out.end(); itr++) {
        cout << *itr << endl;
    }
}
Я понимаю, что In - вектор входных данных, Out - результат, но не знаю как задать свои значения, чтобы компилятор не ругался.
Скажите, пожалуйста, куда и в каком виде записать свой входной вектор?
И если у кого-то будет свободное время: как сделать обратное преобразование? Математику понимаю, просто надо перевернуть, но с кодами сложно.
Возможно есть ссылки на другие варианты, я не против, вопросы те же.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.11.2020, 21:21
Ответы с готовыми решениями:

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

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

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

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

0
17.11.2020, 21:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2020, 21:21
Помогаю со студенческими работами здесь

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

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

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

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

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

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


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

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