📄 fft.h
字号:
#pragma once
#include <math.h>
#ifdef PI
#undef PI
#endif
#define PI 3.1415926l
template <class T> class TCosFFT
{
public:
TCosFFT(int nAnalyzeSamples);
~TCosFFT(void);
void Compute(T* pDest, const T* pSrc);
private:
int m_nAnalyzeSamples;
double** m_ppCosTab;
};
template <class T> class TSinFFT
{
public:
TSinFFT(int nAnalyzeSamples);
~TSinFFT(void);
void Compute(T* pDest, const T* pSrc);
private:
int m_nAnalyzeSamples;
double** m_ppSinTab;
};
template <class T>
TCosFFT<T>::TCosFFT(int nAnalyzeSamples)
{
m_nAnalyzeSamples = nAnalyzeSamples;
m_ppCosTab = new double*[m_nAnalyzeSamples];
for (int i = 0; i < m_nAnalyzeSamples; ++i)
{
m_ppCosTab[i] = new double[m_nAnalyzeSamples];
for (int x = 0; x < m_nAnalyzeSamples; ++x)
m_ppCosTab[i][x] = cos((2 * x + 1) * i * PI / (2 * m_nAnalyzeSamples));
}
}
template <class T>
TCosFFT<T>::~TCosFFT(void)
{
for (int i = 0; i < m_nAnalyzeSamples; ++i)
delete[] m_ppCosTab[i];
delete[] m_ppCosTab;
}
template <class T>
TSinFFT<T>::TSinFFT(int nAnalyzeSamples)
{
m_nAnalyzeSamples = nAnalyzeSamples;
m_ppSinTab = new double*[m_nAnalyzeSamples];
for (int i = 0; i < m_nAnalyzeSamples; ++i)
{
m_ppSinTab[i] = new double*[m_nAnalyzeSamples];
for (int x = 0; x < m_nAnalyzeSamples; ++x)
m_ppSinTab[i][x] = sin((2 * x + 1) * i * PI / (2 * m_nAnalyzeSamples));
}
}
template <class T>
TSinFFT<T>::~TSinFFT(void)
{
for (int i = 0; i < m_nAnalyzeSamples; ++i)
delete[] m_ppSinTab[i];
delete[] m_ppSinTab;
}
template <class T>
void TSinFFT<T>::Compute(T* pDest, const T* pSrc)
{
for (int i = 0; i < m_nAnalyzeSamples; ++i)
{
double c = 0;
for (int x = 0; x < m_nAnalyzeSamples; ++x)
{
c += pSrc[x] * m_ppSinTab[i][x];
}
pDest[i] = (T)(2 * c / m_nAnalyzeSamples);
}
}
template <class T>
void TCosFFT<T>::Compute(T* pDest, const T* pSrc)
{
for (int i = 0; i < m_nAnalyzeSamples; ++i)
{
double c = 0;
for (int x = 0; x < m_nAnalyzeSamples; ++x)
{
c += pSrc[x] * m_ppCosTab[i][x];
}
pDest[i] = (T)(2 * c / m_nAnalyzeSamples);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -