3 / 3 / 4
Регистрация: 21.07.2015
Сообщений: 51
1

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

14.05.2017, 09:22. Показов 3212. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прямое преобразование работает корректно, а вот обратное возвращает странную дугу в независимсти от исходного сигнала.

"Не быстрый" алгоритм пребразования выдает корректный реультат в обоих направлениях, так что ошибка, думаю, как то связана с алгоритмом.

графики:
Кликните здесь для просмотра всего текста

исходный сигнал
Обратное быстрое преобразование Фурье


Спектр сигнала после прямого преобразования
Обратное быстрое преобразование Фурье


странная дуга после обратного преобразования
Обратное быстрое преобразование Фурье



код преобразования:
Кликните здесь для просмотра всего текста

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
//f-frame, s-frame size, d - direction
double** FFT(double** f, int s, bool d) {
    if (s == 1) return f;
    int sH = s / 2;
 
    double** fOdd = new double*[sH];
    double** fEven = new double*[sH];
    for (int i = 0; i < sH; i++) {
        int j = 2 * i;
        fOdd[i] = f[j];
        fEven[i] = f[j + 1];
    }
 
    double** sOdd = FFT2(fOdd, sH, d);
    double** sEven = FFT2(fEven, sH, d);
 
    double**spectr = new double*[s];
 
    double arg = d ? -DoublePI / s : DoublePI / s;
    double*oBase = new double[2]{ cos(arg),sin(arg) };
    double*o = new double[2]{ 1,0 };
 
 //Mul-произведение, Sum-сумма, Dif-разница
    for (int i = 0; i < sH; i++) {
        double* sO1 = Mul(o, sOdd[i]);
 
        spectr[i] = Sum(sEven[i], sO1);
        spectr[i + sH] = Dif(sEven[i], sO1);
 
        o = Mul(o, oBase);
    }
 
    return spectr;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2017, 09:22
Ответы с готовыми решениями:

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

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

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

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

2
3 / 3 / 4
Регистрация: 21.07.2015
Сообщений: 51
14.05.2017, 11:02  [ТС] 2
Обратное преобразование возвращает комплексные значения, хотя должно вовращать только действительные.
0
3 / 3 / 4
Регистрация: 21.07.2015
Сообщений: 51
21.05.2017, 18:47  [ТС] 3
Вобщем, решение было найдено.
Надеюсь кому-то еще поможет.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2017, 18:47
Помогаю со студенческими работами здесь

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

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

Обратное преобразование Лапласа
Доброго времени суток. Подскажите пожалуйста как запрограммировать обратное преобразование...

Прямое и обратное преобразование функции
Всем привет! Нужно написать программу прямого и обратного преобразования функции (скорее всего...


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

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

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