离散傅里叶变换(DFT)

这篇具有很好参考价值的文章主要介绍了离散傅里叶变换(DFT)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

离散傅里叶变换(Discrete Fourier Transform)是信号分析中的一种基本方法,将离散时序信号从时间域变换到频率域,是傅里叶变换在时域和频域都呈离散的形式。

(1)基础知识

对于傅氏变换,其定义为:

离散傅里叶变换(DFT)

利用该公式,可以实现对一些符合条件的连续函数进行傅氏变换。然而,在很多时候,我们所获得的时序信号并不是连续的,而是离散的序列,如下图所示。

离散傅里叶变换(DFT)

对于离散的序列,它的长度是有限的,并且由于不连续,故无法积分计算。若用梯形面积求和近似替代积分,又会出现无法进行无穷积分的情况。

(2)初步实现方法

针对上述问题,我们可以初步采用以下方法:将该序列进行重复平移,形成周期序列,并用求梯形面积的方法近似替代求积分。

离散傅里叶变换(DFT)

利用欧拉公式对式子进行变换,计算正弦傅氏变换与余弦傅氏变换,分别得到正弦频域图与余弦频域图,频域信号由勾股定理对正余弦信号进行计算即可。

def dft1(s,t,repet,omega):
    '''s:时域离散信号
    t:对应时间
    reprt:计算傅里叶变换时信号向前与向后重复次数
    omega:频域信号频率范围与间隔'''
    dt=t[1]-t[0] #信号采样时间间隔
    n=len(t)
    l=t[-1]-t[0] #信号长度
    T=[]
    T.extend(t)
    S=[]
    for i in range(repet[0]+repet[1]+1):
        S.extend(s)
    for i in range(repet[1]):
        T.extend(np.array(t)+(i+1)*l)
    for i in range(repet[0]):
        for j in range(n):
            T.insert(0,t[-j]-(i+1)*l)
    dft_sin=[] #正弦傅里叶变换
    dft_cos=[] #余弦傅里叶变换
    dft=[]
    omega=np.arange(omega[0],omega[1],omega[2]) #离散频率
    for i in range(len(omega)):
        v1=0;v2=0;v3=0
        for j in range(len(T)-1):
            v1+=0.5*(S[j]+S[j+1])*dt*np.sin(-omega[i]*T[j])
            v2+=0.5*(S[j]+S[j+1])*dt*np.cos(-omega[i]*T[j])
            v3+=np.sqrt(v1**2+v2**2)
        dft_sin.append(v1)
        dft_cos.append(v2)
        dft.append(v3)
    return (dft,dft_sin,dft_cos)

以sin(5x)+sin(20x)+cos(10x)+cos(15x)信号为例。连续信号与采样离散信号如下所示。

离散傅里叶变换(DFT)

 

x=np.arange(0,10,0.01)
y=np.sin(5*x)+np.cos(15*x)+10*np.sin(20*x)+np.cos(10*x)
dft,dft_sin,dft_cos,omega=dft1(s=y,t=x,repet=[6,6],omega=[-25,25,0.1])

结果如下。

离散傅里叶变换(DFT)

 离散傅里叶变换(DFT)

我们发现最终的结果与事实较为符合,正弦频域在5、20处出现峰,余弦频域在10、15处出现峰。但是余弦频域中频率20出现峰是不太合理的。并且使用该方法计算速度较慢,准确度也比较低。

(3)DFT算法

DFT算法表达式如下:

其实x(n)为时序信号离散序列,X(ω)表示频域信号离散序列。并且与前面相同,利用欧拉公式可以得到正弦频域与余弦频域计算公式。兔兔在这里不在赘述。

def DFT(x,t,omega):
    n=len(x)
    X=[]
    omega=np.arange(omega[0],omega[1],omega[2])
    for i in range(len(omega)):
        s=0
        for j in range(n):
            s+=x[j]*np.exp(-1j*omega[i]*t[j])
        X.append(abs(s)) #求复数的模
    return (omega,X)

仍以前面的离散信号为例。

x=np.arange(0,10,0.01)
y=np.sin(5*x)+np.cos(15*x)+10*np.sin(20*x)+np.cos(10*x)
omega,X=DFT(x=y,t=x,omega=[-25,25,0.05])
plt.plot(omega,X,color='green')
plt.xticks(np.arange(-25,25,5))
plt.show()

结果如下所示

离散傅里叶变换(DFT)

 此时程序运行时间较短,并且准确率较高。

总结

针对离散时序序列的傅里叶变换,本文通过傅里叶的原始定义,初步设计一种能够进行离散数据傅里叶变换的方法,但由于其运算速度慢、准确率低,所以引入了DFT算法。DFT算法虽然效果较好,运算速度较快,但对于较长序列,计算仍是需要较多的时间。FFT算法的出现很好地解决该问题,它仍是以DFT算法为基础,对该算法进行一定的改进,并衍生多种FFT算法。所以如今FFT是计算离散傅里叶变换最常用的方法,而在numpy、scipy等模块中也都有实现FFT算法的方法,可以很方便地解决相关实际问题。文章来源地址https://www.toymoban.com/news/detail-500056.html

到了这里,关于离散傅里叶变换(DFT)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用MATLAB计算序列的离散傅里叶变换

    MATLAB提供了用快速算法计算离散傅里叶变换的函数fft,其调用格式为: 其中, 调用参数xn为时域序列向量 , N为离散傅里叶变换区间长度。 当N大于xn的长度时,fft函数自动在xn后面补零,返回xn的N点离散傅里叶变换结果向量Xk。 当N小于xn的长度时,fft函数计算xn的前N个点构成

    2023年04月16日
    浏览(29)
  • (数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换

    一维离散傅里叶变换(Discrete Fourier Transform,DFT) :是一种数学技术,用于将代表离散时间信号的N个复数序列从 时域转换到频域 。DFT被广泛用于许多应用,如音频和图像处理、通信和控制系统。DFT是傅里叶变换的离散版本,傅里叶变换是一种用于分析频域信号的连续数学技

    2023年04月13日
    浏览(76)
  • Matlab|数字图像处理02|图像的傅里叶变换(平移/旋转性质)及图像的离散余弦变换

    问题1:x,y方向同时平移后频谱有何变化? 答:经过平移后的傅里叶变换幅值图与原图像得到的傅里叶变换幅值图基本相同,平移不改变频谱的幅值。 代码运行结果: 代码: 问题2:编程验证一幅图旋转45度后,其傅里叶谱图也旋转了45度。 代码: 问题3:第8行10的数字大小对

    2024年02月08日
    浏览(32)
  • C++类:三角函数最小二乘拟合与离散傅里叶变换求解

            作为一个天文爱好者,在之前全手工制作了一个天文望远镜导星的系统,但是由于自制的赤道仪使用的是谐波减速器,赤经轴需要一直保持与地球运动同步,每隔一段时间就会有新的谐波齿轮参与啮合,因此造成了在赤经轴存在低频的传动周期误差,该系统利用图像

    2023年04月19日
    浏览(37)
  • 数字图像处理实验(二)|图像变换{离散傅里叶变换fft2,离散余弦变换dct2、频谱平移fftshift}(附实验代码和截图)

    1了解图像变换的原理; 2理解图像变换系数的特点; 3掌握图像变换的方法及应用; 4掌握图像的频谱分析方法; 5了解图像变换在图像数据压缩、图像滤波等方面的应用。 安装了MATLAB软件的台式或笔记本电脑 1.离散傅里叶变换 对于二维离散信号,Fourier正变换定义为: 二维离

    2024年02月06日
    浏览(36)
  • 压缩编码之变换的选择之离散余弦变换(DCT)和离散傅立叶变换(DFT)——数字图像处理

    变换的选择是一个关键的考量因素,它决定了数据是如何被压缩的。选择变换时考虑以下几个重要原则: 数据去关联性 :变换的目的之一是减少数据中的相关性。例如,在图像压缩中,像素间往往高度相关。通过适当的变换,如离散余弦变换(DCT),可以将这些相关性转化

    2024年02月02日
    浏览(29)
  • 傅里叶级数和傅里叶变换之间的关系推理及应用

    傅里叶级数和傅立叶变换是傅里叶分析的两个主要工具,它们之间有密切的关系。 傅里叶级数是将一个周期函数分解为一系列正弦和余弦函数的和。它适用于周期性信号,可以将周期函数表示为一组振幅和相位不同的谐波分量的和。傅里叶级数展示了一个周期函数在不同频率

    2024年02月07日
    浏览(43)
  • 图傅里叶变换

    目录 什么是图信号? 如何理解图信号的”谱“? 图傅里叶变换是什么? 图傅里叶变换中特征值和图信号的总变差有什么关系? 让我们先总结一下,我们想要把图信号  正交分解到一组基  上; 那么怎么得到?可以通过对图的拉普拉斯矩阵 做特征分解得到,即. 于是   

    2024年02月06日
    浏览(31)
  • 傅里叶变换

    在计算机视觉中,有一个经典的变换被广泛使用——傅里叶变换。傅里叶变换是将时间域上的信号转变为频率域上的信号,进而进行图像去噪、图像增强等处理。 什么是时域(Time domain)?从我们出生,我们看到的世界都以时间贯穿,股票的走势、人的身高、汽车的轨迹都会

    2024年02月03日
    浏览(34)
  • 【scipy 基础】--傅里叶变换

    傅里叶变换 是一种数学变换,它可以将一个函数或信号转换为另一个函数或信号,它可以将时域信号转换为频域信号,也可以将频域信号转换为时域信号。 在很多的领域都有广泛的应用,例如信号处理、通信、图像处理、计算机科学、物理学、生物学等。 它最大的功能是能

    2024年02月06日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包