MATLAB 离散傅里叶变换(DFT)、逆离散傅里叶变换(IDFT)、快速傅里叶变换(FFT)的实现

article/2025/9/26 19:49:10

离散傅里叶变换(DFT)、逆离散傅里叶变换(IDFT)的实现

代码如下,其中xn为时序序列

clc;clear;
xn=[7,6,5,4,3,2];
Xk=dft(xn,6);
x=idft(Xk,6);subplot(2,2,1);stem(0:5,abs(Xk),'filled');
axis([0,5,0,1.1*max(abs(Xk))]);
title('x[n]经DFT后的幅度');xlabel('频率w');ylabel('幅度');subplot(2,2,2);stem(0:5,angle(Xk),'filled');
axis([0,5,1.1*min(angle(Xk)),1.1*max(angle(Xk))]);
title('x[n]经DFT后的相角');xlabel('频率w');ylabel('相角');subplot(2,2,3);stem(0:5,xn,'filled');
axis([0,5,0,1.1*max(xn)]);
title('原信号x[n]');xlabel('时间n');ylabel('幅度');subplot(2,2,4);stem(0:5,abs(x),'filled');
axis([0,5,0,1.1*max(abs(x))]);
title('原信号x[n]经DFT与IDFT的信号');xlabel('时间n');ylabel('幅度');function [Xk]=dft(xn,N)
n=0:N-1;
k=0:N-1;
Xk=xn*exp(-j*2*pi/N).^(n'*k);%n'为n的转置function [xn]=idft(Xk,N)
n=0:N-1;
k=0:N-1;
xn=(Xk*exp(j*2*pi/N).^(n'*k))/N;

快速傅里叶变换(FFT)

可直接使用fft函数,但若需要获取信号的幅值频谱和相位频谱,则需要进行修正,参见代码中的注释:

clear;Fs=256; %采样频率(Hz)
N=256;  %FFT采样点数,为了方便进行FFT运算,通常N取2的整数次方
n=256; %数据点数
t=[0:1/Fs:n/Fs]; %采样时刻范围,共N个点%信号:频率(Hz)分别为50、75;幅度分别为3、1.5,相位(度)分别为-30、90;直流分量幅度为2
S=2+3*cos(2*pi*50*t+pi*(-30)/180)+1.5*cos(2*pi*75*t+pi*90/180);
subplot(2,2,1);
plot(S);title('原始信号');subplot(2,2,2);
Y=fft(S,N); %做FFT变换(N位)
Ayy=(abs(Y)); %取模
% plot(Ayy(1:N)); %显示原始的FFT模值结果
plot(abs(Y));
title('FFT 模值');
text(1,550,'设原始信号的峰值为A(2(0)、3(50)、1.5(75)),那么FFT的结果的每个点(除了第一个点直流分量之外)');
text(1,500,'的模值就是A的N/2(128)倍。而第一个点就是直流分量,它的模值就是直流分量的N(256)倍');
text(1,450,'由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果');%注:当FFT采样点数N和数据点数n不同时,还需除N/n才能得到真实的幅度
subplot(2,2,3);
Ayy=Ayy/(N/2);   %换算成实际的幅度
Ayy(1)=Ayy(1)/2;
F=([1:N]-1)*Fs/N; %换算成实际的频率值
plot(F(1:N/2),Ayy(1:N/2));   %显示换算后的FFT模值结果
title('幅度-频率曲线图');subplot(2,2,4);
Pyy=[1:N/2];
for i=1:N/2Pyy(i)=phase(Y(i)); %计算相位%Pyy(i)=angle(Y(i)); %计算相位Pyy(i)=Pyy(i)*180/pi; %换算为角度制
end;
plot(F(1:N/2),Pyy(1:N/2));   %显示相位图
title('相位-频率曲线图');

注1:某点n所表示的频率为:Fn=(n-1)*Fs/N,Fn所能分辨到的最小频率间隔为Fs/N

注2:进行FFT的信号为S,如需用于处理其它信号,直接替换该变量即可

附运行结果,可对照代码理解:

 

转载注明出处:https://blog.csdn.net/csyzcyj/


http://chatgpt.dhexx.cn/article/IJTTjkiJ.shtml

相关文章

图像处理基础(三)DFT与IDFT变换

傅里叶变换(DFT) 首先来看看傅里叶(DFT)变换的公式 (1) FP\frac {1}{N}\sum_{x0}^{N-1}\sum_{y0}^{N-1}P_{x,y}\exp(-j(\frac{2 \pi}{N})(uxvy)) 幅度 (2) w\sqrt{u^2v^2} 其中 u,v代表空间频率,即灰度梯度,梯度由坐标与灰度值求导的向量 w代表 振幅…

第4章 Python 数字图像处理(DIP) - 频率域滤波7 - 二维DFT和IDFT的一些性质 - 傅里叶频谱和相角

目录 二维DFT和IDFT的一些性质傅里叶频谱和相角 二维DFT和IDFT的一些性质 傅里叶频谱和相角 F ( u , v ) R ( u , v ) j I ( u , v ) ∣ F ( u , v ) ∣ e j ϕ ( u , v ) (4.86) F(u, v) R(u, v) jI(u, v) |F(u, v)|e^{j\phi(u,v)} \tag{4.86} F(u,v)R(u,v)jI(u,v)∣F(…

实数序列频谱的共轭对称性(DFT与IDFT仿真实现)

一、基础知识 1、傅里叶变换:通俗来讲,是以时间为自变量的信号与以频率为自变量的“频谱函数”之间的某种转换关系。 DFT:即离散傅里叶变换,对离散序列进行傅里叶变换。设x(n)为长度为M的有限长序列,其N点DFT定义(公…

第4章 Python 数字图像处理(DIP) - 频率域滤波8 - 二维DFT和IDFT的一些性质 - 二维离散卷积定理

目录 二维DFT和IDFT的一些性质二维离散卷积定理二维离散傅里叶变换性质的小结 二维DFT和IDFT的一些性质 二维离散卷积定理 二维循环卷积表达式: ( f ⋆ h ) ( x , y ) ∑ m 0 M − 1 ∑ n 0 N − 1 f ( m , n ) h ( x − m , y − n ) (4.94) (f \star h)(x, …

FFT学习笔记(DFT,IDFT)

昨天参悟了一天FFT,总算是理解了,今天的莫比乌斯反演也不太懂,干脆弃疗,决定来认真水一发博客。 什么是FFT? FFT(Fast Fourier Transformation),即为快速傅氏变换,是离散傅氏变换&…

【OpenCV4】图像的傅里叶变换 cv::dft() 和逆变换 cv::idft() 解析(c++)

图像傅里叶变换的作用: 频谱分析,获取图像中高频低频的分布情况快速卷积,两个矩阵的傅里叶变换结果相乘 案例代码: cv::Mat TestOpencvDft() {cv::Mat lena cv::imread("lena.jpg", 0);cv::resize(lena, lena, cv::…

Matlab如何进行利用离散傅里叶逆变换iDFT 从频谱恢复时域信号

文章目录 1. 定义2. 变换和处理3. 函数4. 实例演示例1:单频正弦信号(整数周期采样)例2:含有直流分量的单频正弦信号例3:正弦复合信号例4:含有随机干扰的正弦信号例5:实际案例 5. 联系作者 1. 定…

离散傅里叶变换(DFT/IDFT、FFT/IFFT)运算量的讨论

前言:关于为什么要写这个博客 最近在重新看《合成孔径雷达成像 算法与实现》这本书,看到“离散傅里叶变换记其逆变换的运算量级为”这句话,就想起当初在学《数字信号处理》中FFT那章节时,书中有对比DFT和FFT的运算量的一些文字&am…

OpenCV-离散傅里叶变换cv::dftcv::idft

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 函数原型 void dft(InputArray src, OutputArray dst, int flags 0, int nonzeroRows 0); void idft(InputArray src, Output…

12点的idft c语言,【整理】用IDFT实现UF-OFDM和OFDM的模拟调制

cooperate with Liu Lei 用IDFT实现OFDM的代码如下: N32; xrandint(1,N,[0 3]); x1qammod(x,4); f1:N; t0:0.001:1-0.001; w2*pi*f.*t; % w12*pi*(f0.2).*t; y1x1*exp(j*w);%子载波调制 x2ifft(x1,N); %ifft figure(1); plot(t,abs(y1)); hold on; stem(0:1/N:1-1/N…

离散傅立叶变换推导(DF、IDFT)

mazonex离散傅立叶变换视频笔记 需要先了解傅里叶变换推导(FT、IFT) 本文仅作为笔记,推导思想和图片来自视频 周期为 2 π 2\pi 2π的函数的复数形式展开(傅里叶级数) 在上一篇文章中part4中提到周期 T 2 L T2L T2L函数的复数形式展开为: f ( t ) ∑…

浅谈傅里叶——8. 一维iDFT的实现

这是本系列的最后一章,原先计划是把这部分内容一并挪到上一章里的,不过喜欢凑一个整数,而且想骗一点流量,所以把它们拆成了两部分。我们在前面的内容中,通过使用不同的频率信号对原始信号进行采样,从而分析…

idft重建图像 matlab_1周学FFT——第2天 DFT和IDFT的MATLAB实现

根据定义式,可写出DFT的MATLAB代码如下[从玉良,2009,p72]: function [f, Xk] mydft(xn, fs, N) % DFT n [0:1:N-1]; k n; WN exp(-j*2*pi/N); nk n * k; % N^2 times multiply Xk xn(1:N) * WN.^nk; % N^3 times multiply f …

FT,DTFT,DFT,IDFT,FFT含义

1.傅立叶变换FT(Fourier Transform) 性质:时域连续,频域连续 周期信号只有傅立叶级数,严格意义上讲,没有傅立叶变换;但可以令周期信号的周期趋于无穷大,这样,将周期信号变为非周期信号&#x…

DFT与IDFT

DFT与IDFT 一.方法简介 序列x(n)(n0,1,…N-1)的DFT定义为 X ( k ) ∑ n 0 N − 1 x ( n ) e − j 2 π n k N X(k)\sum_{n0}^{N-1}x(n)e^{-j\frac{2\pi nk}{N}} X(k)n0∑N−1​x(n)e−jN2πnk​ 设 x …

IDFT的python实现

IDFT IDFT(Inverse Discrete Fourier Transform), 傅里叶逆变换,可以将频域信号转换到时域中, 它的公式非常简单: x [ n ] 1 N ∑ k 0 N − 1 X [ k ] e j 2 π k n / N x[n] \frac{1}{N} \sum_{k0}^{N-1} X[k] e^{j2\pi kn/N} x[n]N1​k0∑N−1​X…

一文搞懂:FT、DTFT、DFT、IDFT

一文搞懂:FT、DTFT、DFT、IDFT 写在前面一切为了计算机的处理推导步骤 总结 写在前面 近期重温了一下可爱的数字信号处理,又回想起当初被 FT、DTFT、DFT、IDFT 这几兄弟折腾的傻傻分不清的日子,今天特地在此对它们进行一个梳理。 珠玉在前&a…

LDUOJ spj 修改

特判使用教程 感谢涛巨 记录一下,省的以后忘记了。 /* Utility functions for writing output validators for the Kattis* problem format.** The primary functions and variables available are the following.* In many cases, the only functions needed are …

noip 2022 第二题 喵了个喵 meow 在 Lemon LemonLime 中 SPJ Special Judge 测评 配置 设置

noip 2022 第二题 喵了个喵 meow 在 Lemon LemonLime 中 SPJ Special Judge 测评配置设置 比赛目录如下&#xff1a; 用户程序(meow.cpp)如下&#xff1a; #include <bits/stdc.h> using namespace std;template<typename T> inline void read(T &x) {x 0; …

数据库例题(创建数据库SPJ包含S、P、J和SPJ表)

目录 运行说明 例题 例题解答 运行说明 1、运行环境&#xff1a;win10 2、所需步骤&#xff1a; &#xff08;1&#xff09; 通过PowerDesigner软件创建逻辑数据模型(CDM)&#xff0c;再将其转换为物理数据模型(PDM)&#xff0c;再导出为SQL语句。 &#xff08;2&#xff…