⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft.h

📁 Lakey这是一个免费的CW练习/收/发软件
💻 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 + -