资源简介
本算法采用C语言编写,可自定义抽样序列,实现了对初始序列进行快速傅里叶变换(FFT)和离散傅里叶变换(DFT),通过运行窗口将运行结果输出,并且输出FFT和DFT运行时间,方便读者分析这两个算法用时效率。
代码片段和文件信息
#include
#include
#include
#define N 4096 //设置抽样点数
#define PI 3.1514926535897932384626433832795028841971 //定义圆周率
typedef struct //定义复数结构体变量
{
double real;
double imag;
}complex;
void c_plus(complex complex complex *); //复数加运算
void c_sub(complex complex complex *); //复数减运算
void c_mul(complex complex complex *); //复数乘运算
void Wn_i(int int complex *); //FFT旋转因子
void Wn_ik(int int int complex *); //DFT旋转因子
int main()
{
complex f[N] A[N] a[N]; //f[N]为输出的快速傅里叶变换序列 A[N]为DFT变换输出序列 a[N]为初始序列
double x[N] = { 1 2 3 4 5 6 7 8 }; //x[N]为进行抽样运算的序列
int LH K J B L k N1 P M K1; //L表示第L级蝶形 p旋转因子指数 B两序列间隔点数k 第k个序列
double T;
clock_t begin end;
double cost1 cost2 persent; //定义时间
M = (int)(log2(N));
LH = N / 2;
J = LH;
N1 = N - 1;
for (int i = 0; i < N; i++) //为DFT运算提供初始序列
{
a[i].real = x[i];
a[i].imag = 0;
}
printf(“******************************* 级数为:%d *******************************\n“ M);
//.......................................................................................................................
for (int I = 1; I < N1; I++) //定义倒序序列函数
{
if (I < J)
{
T = x[I];
x[I] = x[J];
x[J] = T;
}
K = LH;
if (J >= K)
{
do
{
J = J - K;
K = K / 2;
} while (J >= K);
}
J = J + K;
}
//.......................................................................................................................
/* for (int i = 0; i < N; i++) //输出倒序后的序列
{
printf(“x[%d]为:%lf\n“ i x[i]);
}*/
//.......................................................................................................................
for (int i = 0; i < N; i++) //将序列赋给结构体函数进行运算
{
f[i].real = x[i];
f[i].imag = 0;
}
/* for (int i = 0; i < N; i++)
{
printf(“f[%d]为:%lf + j%lf\n“ i f[i].real f[i].imag);
}*/
//.......................................................................................................................
begin = clock(); //开始记录时间
for (L = 1; L <= M; L++) //FFT运算
{
B = (int)(pow(2 L - 1));
for (J = 0; J < B; J++)
{
P = (int)(J*pow(2 M - L));
for (k = J; k < N; k = (int)(k + pow(2 L)))
{
K1 = k + B;
complex wn t;
Wn_i(N P &wn);
c_mul(f[K1] wn &t); //。。。。。。。。。。。。
c_sub(f[k] t &(f[K1])); //蝶形运算
c_plus(f[k] t &(f[k])); //。。。。。。。。。。。。
}
}
}
end = clock(); //结束记录时间
cost1 = (double)(end - begin) / CLOCKS_PER_SEC;
//.......................................................................................................................
printf(“*****************************快速傅里叶变换输出*****************************\n“);
for (int i = 0; i < N; i++) //快速傅里叶变换输出
{
printf(“f[%d]为: %lf + j(%lf)\n“ i f[i].real f[i].imag);
}
//..............................................
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-12-07 22:19 ConsoleApplication5\
目录 0 2018-12-07 22:19 ConsoleApplication5\ConsoleApplication5\
文件 4094 2018-11-23 14:42 ConsoleApplication5\ConsoleApplication5\ConsoleApplication5.vcxproj
文件 943 2018-11-23 14:42 ConsoleApplication5\ConsoleApplication5\ConsoleApplication5.vcxproj.filters
目录 0 2018-12-07 22:19 ConsoleApplication5\ConsoleApplication5\Debug\
目录 0 2018-12-07 22:19 ConsoleApplication5\ConsoleApplication5\Debug\ConsoleA.E8BCFB34.tlog\
文件 1414 2018-11-30 21:48 ConsoleApplication5\ConsoleApplication5\Debug\ConsoleA.E8BCFB34.tlog\CL.read.1.tlog
文件 768 2018-11-30 21:48 ConsoleApplication5\ConsoleApplication5\Debug\ConsoleA.E8BCFB34.tlog\CL.write.1.tlog
文件 194 2018-11-30 21:48 ConsoleApplication5\ConsoleApplication5\Debug\ConsoleA.E8BCFB34.tlog\ConsoleApplication5.lastbuildstate
文件 788 2018-11-30 21:48 ConsoleApplication5\ConsoleApplication5\Debug\ConsoleA.E8BCFB34.tlog\cl.command.1.tlog
文件 1442 2018-11-30 21:48 ConsoleApplication5\ConsoleApplication5\Debug\ConsoleA.E8BCFB34.tlog\li
文件 2450 2018-11-30 21:48 ConsoleApplication5\ConsoleApplication5\Debug\ConsoleA.E8BCFB34.tlog\li
文件 750 2018-11-30 21:48 ConsoleApplication5\ConsoleApplication5\Debug\ConsoleA.E8BCFB34.tlog\li
文件 1593 2018-11-30 21:48 ConsoleApplication5\ConsoleApplication5\Debug\ConsoleApplication5.log
文件 17666 2018-11-30 21:48 ConsoleApplication5\ConsoleApplication5\Debug\time.obj
文件 27648 2018-11-30 21:48 ConsoleApplication5\ConsoleApplication5\Debug\vc120.idb
文件 77824 2018-11-30 21:48 ConsoleApplication5\ConsoleApplication5\Debug\vc120.pdb
文件 5121 2018-11-30 21:48 ConsoleApplication5\ConsoleApplication5\time.c
文件 2490368 2018-12-07 22:18 ConsoleApplication5\ConsoleApplication5.sdf
文件 1003 2018-11-23 14:27 ConsoleApplication5\ConsoleApplication5.sln
文件 16896 2018-12-07 22:18 ConsoleApplication5\ConsoleApplication5.v12.suo
目录 0 2018-12-07 22:19 ConsoleApplication5\Debug\
文件 36864 2018-11-30 21:48 ConsoleApplication5\Debug\ConsoleApplication5.exe
文件 268956 2018-11-30 21:48 ConsoleApplication5\Debug\ConsoleApplication5.ilk
文件 486400 2018-11-30 21:48 ConsoleApplication5\Debug\ConsoleApplication5.pdb
文件 4974 2018-11-30 10:47 time.txt
相关资源
- 基于STM32的音频信号采样与FFT分析
- libevent(timeout.cpp)
- 水晶报表Crystal Reports运行环境CRRunti
- 高效FFT的C/C++代码实现包括基2的DIF和
- FFT(快速傅里叶变换)C++源程序
- FFT算法c语言代码
- 信号FFT变换及绘图
- 利用FFT计算频谱图
- FFT的C语言实现
- FFTW3.0快速傅立叶变换库
- 利用c语言实现FFT运算
- 基于VC++的FFT频谱分析
- Microsoft Visual C++ 2010 x86 Runtime - 10.0.4
- Visual C++ 2008 x86 Runtime Setup
- Visual C++ Runtime 2013 x86
- Visual C++ Runtime 2012 x64
- Visual C++ Runtime 2008 x64
- Microsoft Visual C++ 2013 Runtime 64bit 工具
- OpenTSTOOL-1.2
- 图像FFT卷积
- C语言实现2的指数次点的FFT
- DSP 77个C语言程序 包括FFTFIR IIR等的D
- Microsoft Visual C++ Runtime 64 bits
- fftw-3.3.7快速傅里叶变换计算库
- Microsoft Visual C++ 2013 runtime 64/32 运行库
- VB.NET写的FFT算法
- 自制FFT频谱分析软件
- 快速傅里叶变换的详细源代码C++
- 利用FFT计算电压有效值的C语言例程
- c语言time()
评论
共有 条评论