DFT与IDFT

news/2024/11/8 7:35:38/

DFT与IDFT

一.方法简介

序列x(n)(n=0,1,…N-1)的DFT定义为
X ( k ) = ∑ n = 0 N − 1 x ( n ) e − j 2 π n k N X(k)=\sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi nk}{N}} Xk=n=0N1x(n)ejN2πnk

设 x ( n ) = a ( n ) + j b ( n ) , X ( k ) = A ( k ) + j B ( K ) , Q = 2 π / N 设x(n)=a(n)+jb(n),\quad X(k)=A(k)+jB(K),\quad Q=2\pi/N x(n)=a(n)+jb(n),X(k)=A(k)+jB(K),Q=2π/N

则上式变为:
A ( k ) + j B ( k ) = ∑ n = 0 N − 1 [ a ( n ) + j b ( n ) ] [ cos ⁡ ( Q n k ) − j sin ⁡ ( Q n k ) ] A(k)+jB(k)=\sum_{n=0}^{N-1}[a(n)+jb(n)][\cos(Qnk)-j\sin(Qnk)] Ak+jB(k)=n=0N1[a(n)+jb(n)][cos(Qnk)jsin(Qnk)]

A ( k ) = ∑ n = 0 N − 1 [ a ( n ) cos ⁡ ( Q n k ) + b ( n ) sin ⁡ ( Q n k ) ] A(k)=\sum_{n=0}^{N-1}[a(n)\cos(Qnk)+b(n)\sin(Qnk)] Ak=n=0N1[a(n)cos(Qnk)+b(n)sin(Qnk)]

B ( k ) = ∑ n = 0 N − 1 [ b ( n ) cos ⁡ ( Q n k ) − a ( n ) sin ⁡ ( Q n k ) ] B(k)=\sum_{n=0}^{N-1}[b(n)\cos(Qnk)-a(n)\sin(Qnk)] B(k)=n=0N1[b(n)cos(Qnk)a(n)sin(Qnk)]

序列X(k)的IDFT定义为:
x ( n ) = 1 N ∑ k = 0 N − 1 X ( k ) W N − n k , n = 0 , 1 , . . . N − 1 x(n)=\frac{1}{N}\sum_{k=0}^{N-1}X(k)W_{N}^{-nk},\quad n=0,1,...N-1 x(n)=N1k=0N1X(k)WNnk,n=0,1,...N1

它 与 D F T 的 区 别 在 于 将 W N 改 变 为 改 变 为 W N − 1 , 并 多 了 一 个 除 以 N 的 运 算 , 公 式 如 下 它与DFT的区别在于将W_{N}改变为改变为W_{N}^{-1},并多了一个除以N 的运算,公式如下 DFTWNWN1,N

a ( n ) = 1 N ∑ k = 0 N − 1 [ A ( k ) cos ⁡ ( Q n k ) − B ( k ) sin ⁡ ( Q n k ) ] a(n)=\frac{1}{N}\sum_{k=0}^{N-1}[A(k)\cos(Qnk)-B(k)\sin(Qnk)] a(n)=N1k=0N1[A(k)cos(Qnk)B(k)sin(Qnk)]

b ( n ) = 1 N ∑ k = 0 N − 1 [ B ( k ) cos ⁡ ( Q n k ) + A ( k ) sin ⁡ ( Q n k ] b(n)=\frac{1}{N}\sum_{k=0}^{N-1}[B(k)\cos(Qnk)+A(k)\sin(Qnk] b(n)=N1k=0N1[B(k)cos(Qnk)+A(k)sin(Qnk]

二.编程实现

考滤到DFT和IDFT算法过程中有部分相似,可以把它们合成到一个算法。

DFT.c

/*x-存放要变换数据的实部y-存放要变换数据的虚部a-存放变换结果的实部b-存放变换结果的虚部n-数据长度sign-为1时执行DFT,为-1时执行IDFT
*/
#include "math.h"
void dft(x,y,a,b,n,sign)
int n, sign;
double x[],y[],a[],b[];
{int i,k;double c,d,q,w,s;q = 6.28318530718/n;for (k=0;k<n;k++){w=k*q;a[k]=b[k]=0.0;for(i=0;i<n;i++){d=i*w;c=cos(d);s=sin(d)*sign;a[k]+=c*x[i] + s*y[i];b[k]+=c*y[i] - s*x[i];}}if(sign == -1){c=1.0/n;for (k=0;k<n;k++){a[k]=c*a[k];b[k]=c*b[k];}}
}

下面验证此算法,对X(n)=(0,1,2,3,4,5,6,7),做DFT和IDFT算法

dft_d.c

#include "stdio.h"
#include "math.h"
#include "dft.c"
#define N 4
static double  x[N],y[N],a[N],b[N],c[N];
main(){int k;int i=0;for(i=0; i<N; i++){x[i]=i;y[i]=0;}dft(x,y,a,b,N,1);	//DFT变换for(i=0; i<N; i++){c[i]=sqrt(a[i]*a[i]+b[i]*b[i]);	//算出模printf("%lf + j  %lf \n",a[i],b[i]);//输出变换后结果				printf("%lf \n",c[i]); //输出模值printf("\n");		}dft(a,b,x,y,N,-1); //IDFT变换for(i=0; i<N; i++){printf("%lf \n",x[i]); //输出x(n)的实部}}

运行结果:

在这里插入图片描述


http://www.ppmy.cn/news/806510.html

相关文章

DFT基础

离散傅立叶变换是个什么东西&#xff1f;一句话&#xff1a;就是离散周期信号的傅立叶级数展开。 我用的教材&#xff08;东南管致中编信号系统第五版&#xff09;里面绕了一个大圈&#xff0c;从拉普拉斯变换跑到z变换&#xff0c;再从z变换推到离散傅立叶变换。这实际上反而…

【DFT】DFT入门介绍

一、什么是DFT DFT全称可测试性技术&#xff08;DesignFor Test&#xff09;&#xff0c;是一种专为测试的集成电路设计。这里的测试一般指两部分&#xff1a;一是为筛出好芯片&#xff08;无物理缺陷&#xff09;出货而进行的量产测试&#xff1b;二是为芯片回来后的调试提供一…

DFT与DTFT的区别?

首先给出总结&#xff1a;DTFT是将原信号在时域进行离散化&#xff0c;而DFT则是将DTFT在频域进行离散化。这就相当于DFT将原信号在时域和频域上都进行了离散。 对于DFT而言&#xff0c;它是有限长信号的傅立叶表示&#xff1b;而DTFT则是无限长信号的傅立叶表示。DFT的定义为&…

求助,电脑关闭游戏后自动弹出dptf

如题&#xff0c;电脑在每次关闭游戏后都会弹出dptf_helper .exe和NVIDIA web helper.exe 各种方式都试过但是还是没有解决&#xff0c;问问大佬们这种情况应该怎么办

卸载/关闭/使无效intel dptf (Intel(R) Dynamic Platform and Thermal Framework Generic Participant)

场景&#xff1a; 不知道什么时候有的这个东西&#xff0c;反正它是我这个轻薄本偶尔打一打lol时最大的阻碍&#xff0c;只要他发挥作用了&#xff0c;lol一定掉帧&#xff0c;最严重的时候fps:01 一秒一阵是什么样不用我说了吧 后来知道是它的原因&#xff0c;每次打之前都会…

MySQL数据库——多表查询练习2

一、练习素材 创建表 --创建部门表dept create table dept ( dept1 int , dept_name varchar(11));--创建员工表emp create table emp ( sid int , name varchar(11), age int, worktime_start date, incoming int, dept2 int); 插入数据 --部门表插入数据 insert into dep…

配置域名,开启HTTPS

目录 一、购买域名 二、安装Nginx服务器 三、为云主机绑定域名 四、开启HTTPS协议 五、执行备案 一、购买域名 微信平台有规定&#xff0c;小程序上线之后&#xff0c;只能通过域名访问后端的Java项目&#xff0c;所以我们要为云主机购买一个域名。 大家请注意&#xff0c…

绝地求生国服服务器维护中是什么意思,绝地求生服务器维护了 绝地求生服务器维护...

9月27日绝地求生服务器维护吗 方法1&#xff1a;打开360安全卫士&#xff0c;工具里&#xff0c;打开修复lsp&#xff0c;然后立即修复。 系统保留网速设置&#xff0c;运行的对话框&#xff0c;在输入文字的位置&#xff0c;输入命令gpedit.msc&#xff0c;调出组策略进行设置…