博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于C++任意点数的FFT/IFFT(时域和频域)实现
阅读量:6252 次
发布时间:2019-06-22

本文共 2380 字,大约阅读时间需要 7 分钟。

    函数说明:更改主函数体中的N和length(=log2(N))既可以实现任意点数(2的幂次)的FFT/ IFFT的实现,fft函数中flag标志位控制是正变换还是逆变换。

1.复数操作类

     定义复数类,重载复数四则运算符号,重载输出运算符,重载赋值运算符。

/**********预编译文件头文件complex.h********/#include"iostream"using namespace std;class complex{	double real,image;public:	complex(){real=0;image=0;}	complex(float i,float j){real=i;image=j;}	double getr(){return real;}	double geti(){return image;}	void show()	{		if(image>=0)			cout<
<<"+"<
<<"j"<<" "; else cout<
<
<<"j"<<" "; } void setvalue(double i=0,double j=0) { real=abs(i)<0.0001?0:i; image=abs(j)<0.0001?0:j; } complex operator +(complex&); complex operator-(complex&); complex operator*(complex&); complex operator /(int n); void operator+=(complex&); void operator =(complex&); friend complex W(int m,int n, int flag);};complex complex::operator +(complex& c) { complex t; t.real=real+c.real; t.image=image+c.image; return t; }complex complex::operator*(complex& c) { complex t; t.real=real*c.real-image*c.image ; t.image=real*c.image+image*c.real; return t; }complex complex::operator/ (int n) { complex temp; temp.real=real/n; temp.image=image/n; return temp; }complex complex::operator -(complex& c) { complex t; t.real=real-c.real; t.image=image-c.image; return t; }void complex::operator+=(complex&c) { real=real+c.real; image=image+c.image; }void complex::operator =(complex&c) { real=abs(c.real)<0.00001?0:(c.real); image=abs(c.image)<0.00001?0:(c.image); }

2.主函数

/*******************主函数体***********************/#include "stdafx.h"#include"iostream"#include"cmath"#include"complex.h"#define pi 3.141592657#define N 16//需要运算的fft的点数#define length 4//存储需要的二进制位,即length=log2(N)using namespace std;/*********************重新排列输入序列函数****************************/void bit_reversal(complex a[],int n){	int bitdesicion(unsigned);//用来重现排序原来的输入信号序列应该对应变换的信号的序号	complex temp;	int j;	for(int i=0;i
void getW(complex w[],int len,int flag);//获得正变换(flag=1)或者逆变换系数(flag=0) void fft_temporal(complex input[],int len,int flag);//基时间的fft,flag控制为正变换或者逆变换 void fft_frequency(complex input[],int len,int flag);//基频率的fft/************************************************************/ complex input[N];
complex output[N];   for(int i=0;i
output[j]=input[j];   fft_temporal(output,N,0);//"0"控制为逆变换   cout<<"基2时域IFFT输出信号为:"<
 

转载于:https://www.cnblogs.com/engineerLF/p/5393172.html

你可能感兴趣的文章
php使用163使用465端口吗,在CentOS 7系统里使用465端口发送邮件
查看>>
java关联vss 80020009,80020009: Invalid password[src=SourceSafe,guid=null]
查看>>
java复制文件到指定文件夹下,java:把一个文件夹中的所有文件复制到指定文件夹下...
查看>>
matlab足球赛排名问题程序,足球队排名问题及解决方法.doc
查看>>
ubuntu php5-imap,在Ubuntu 11上安装具有IMAP / Kerberos支持的PHP的问题
查看>>
php圣经 源码,基于PHP的圣经读者用剑模块和diatheke
查看>>
php中的$this-%3efetch,Zend DB fetchAll(): where子句數組帶有IN操作符
查看>>
李思琼php,nginx单机1w并发优化
查看>>
怎么手动设置oracle,手把手设置win7系统手动启动Oracle服务的设置方法
查看>>
oracle fk作用,oracle pk&fk
查看>>
oracle裂块是什么意思,Oracle索引块分裂split信息汇总
查看>>
php构造函数创建对象,7.10 构造函数来创建对象
查看>>
oracle解密后台包,oracle9i加密解密包用法
查看>>
oracle数据库nmon日志在哪,oracle技术之nmon使用说明
查看>>
oracle10g实例修改表空间,oracle10g建表空间和修改oracle字符和删除表空间和用户(加 标注)...
查看>>
linux命令语法规则,Linux系统tar命令怎么使用语法规则
查看>>
linux查看服务器静态路由配置,配置Linux静态路由和配置IP
查看>>
linux应用程序使用时钟中断,Linux时钟中断(2.6.23)(三)
查看>>
win7读取linux硬盘序列号,Windows 下获取硬盘序列号
查看>>
linux音频设备接口,OSS--跨平台的音频接口简介
查看>>