-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFFT.h
More file actions
95 lines (81 loc) · 5.5 KB
/
Copy pathFFT.h
File metadata and controls
95 lines (81 loc) · 5.5 KB
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
//----------------------------------------------------------------------------//
// Файл FFT.h //
// //
// *** TFFT КЛАСС БЫСТРОГО ПРЕОБРАЗОВАНИЯ ФУРЬЕ *** //
// //
// В терминах обработки сигналов преобразование берёт представление функции //
// сигнала в виде временных рядов и отображает его в частотный спектр, //
// где omega — угловая частота. //
// Преобразование превращает функцию времени в функцию частоты. //
// Преобразование является разложением функции на гармонические составляющие //
// на различных частотах. //
// Когда функция f является функцией времени и представляет физический //
// сигнал, преобразование имеет стандартную интерпретацию как спектр сигнала. //
// Абсолютная величина получающейся в результате комплексной функции F //
// представляет амплитуды соответствующих частот (omega), в то время как //
// фазовые сдвиги получаются как аргумент этой комплексной функции. //
// //
// Автор ГЛУЩЕНКО Сергей //
// //
// Москва, 2022 год //
//----------------------------------------------------------------------------//
#ifndef FFTH
#define FFTH
#define _USE_MATH_DEFINES
#include <math.h>
#include <algorithm>
#include "Complex.h"
class TFFT
{
private:
//Тип описывает массив экспонент
struct EXP
{
EXP() : n(0) {}
int n;
std::vector<TComplex> data;
};
typedef std::vector<struct EXP> TEXP;
TEXP PlusEXP, MinusEXP; //Массивы экспонент
std::vector<unsigned int> NN; //Массив индексов
//Служебная рекурсивная функция, используемая при расчете прямого и обратного быстрого преобразования Фурье (БПФ).
// Длина входного массива сигнала должна быть кратна степеням двойки
// На вход подается:
// - массив сигнала во временной области;
// - знак преобразования (-1 для прямого БПФ, +1 для обратного БПФ).
// На выходе можно получить:
// - массив сигнала в частотной области
TArrComplex FFT(const TArrComplex &In, int Sign);
public:
TFFT(void);
virtual ~TFFT(void);
//Вычисляет размер массива сигнала кратный степеням двойки и больший (на одну степень двойки)
// либо равный длине входного массива сигнала
// На вход подается:
// - исходная длина массива сигнала.
// На выходе можно получить:
// - длина массива сигнала кратная степени двойки
unsigned int MultiplicityOfTwoBig(unsigned int Size);
//Предварительный расчет массивов экспонент
// Вызывать до DirectFFT и InverseFFT
// На вход подается:
// - размер массива сигнала кратный степени двойки (после коррекции методом MultiplicityOfTwoBig)
void PreCalcEXP(unsigned int N);
//Вычисляет прямое БПФ
// Вызывать после PreCalcEXP
// Длина входного массива сигнала должна быть кратна степеням двойки
// На вход подается:
// - массив сигнала во временной области.
// На выходе можно получить:
// - массив сигнала в частотной области
TArrComplex DirectFFT(const TArrComplex &In);
//Вычисляет обратное БПФ
// Вызывать после PreCalcEXP
// Длина входного массива сигнала должна быть кратна степеням двойки
// На вход подается:
// - массив сигнала в частотной области.
// На выходе можно получить:
// - массив сигнала во временной области
TArrComplex InverseFFT(const TArrComplex &In);
};
#endif