【python数字信号处理】——DFT、DTFT(频谱图、幅度图、相位图)

目录

一、离散时间傅里叶变换DTFT

二、离散傅里叶变换DFT

三、DFT与DTFT的关系

​ 


参考:

《数字信号处理》——(一).DTFT、DFT(python实现)_远行者223的博客-CSDN博客python绘制频谱图DTFT,DFTpython绘制频谱图:序列的傅里叶变换(DTFT),离散傅里叶变换(DFT)《数字信号处理》、python学习记录涉及知识(之前用matlab来画图,深感matlab打开、运行较慢,就学习了一下python,初学者,错误之处欢迎指正)DTFT原理;DFT原理;python matplotlib库DTFT、DFT原理一.DTFTX(ejω)=∑n=−∞∞x(n)e−jωnX\left(e^{j \omega}\right)=\sum_{n=-\https://blog.csdn.net/weixin_42193451/article/details/122384485

一、离散时间傅里叶变换DTFT

 

 时间序列变量范围(-∞,+∞)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/3/20 17:56
# @Author  : @linlianqin
# @Site    : 
# @File    : DTFT.py
# @Software: PyCharm
# @description:https://blog.csdn.net/weixin_42193451/article/details/122384485import math
import numpy as np# 三角函数sin(nπ)的DTFTclass dtft():def __init__(self,xvalues:list):''':param xvalues: 时域自变量t序列'''self.yvalues = []self.xvalues = xvaluesdef xjw(self,fre:list):''':param fre: 频率自变量fre序列:return:'''# 实现yvalues为X(jw)频谱值## 遍历频率自变量for f in fre:p = 0# 遍历时间序列,得到累加和for x in self.xvalues:p = math.sin(x*np.pi)*math.e**(-1j*f*x) + pself.yvalues.append(p) # 对应每一个自变量频率的因变量值if __name__ == '__main__':import numpy as npfrom matplotlib import pyplot as pltxvalues = np.arange(-2,2,0.1)y1 = [np.sin(i*np.pi) for i in xvalues]# 原信号sin(nπ)plt.subplot(221)plt.plot(xvalues,y1)# 频谱DTFT = dtft(xvalues)freOmega = np.arange(0,20,0.01)DTFT.xjw(freOmega)plt.subplot(222)plt.plot(freOmega,DTFT.yvalues)# 幅度谱plt.subplot(223)plt.plot(freOmega,np.abs(DTFT.yvalues))# 相位谱plt.subplot(224)angle_ = np.angle(DTFT.yvalues)/np.piplt.plot(freOmega,180*angle_)plt.show()

 二、离散傅里叶变换DFT

 时间序列变量n为离散取值(0,N),即0,1,2,3...,N

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/3/20 17:57
# @Author  : @linlianqin
# @Site    : 
# @File    : DFT.py
# @Software: PyCharm
# @description:https://blog.csdn.net/weixin_42193451/article/details/122384485import math
import numpy as npclass dft():def __init__(self,Num):''':param Num: dft点数,即离散取样点数'''super().__init__()self.Num = Numself.xk = [] # 存放dft计算结果self.K = list(range(0,self.Num,1)) # 时域序列横坐标,采样def Xk(self):# 计算频域中的频率自变量值W = []for x in self.K:W.append(x*2*math.pi/len(self.K))## 遍历频率自变量for f in W:p = 0# 遍历时间序列,得到累加和for k in self.K:p = math.sin(k*np.pi)*math.e**(-1j*f*k) + pself.xk.append(p) # 对应每一个自变量频率的因变量值if __name__ == '__main__':import numpy as npfrom matplotlib import pyplot as pltxvalues = np.arange(-2,2,0.1)y1 = [np.sin(i*np.pi) for i in xvalues]# 原信号sin(nπ)plt.subplot(221)plt.plot(xvalues,y1)# 频谱N = 16 # 采样点数DFT = dft(N)DFT.Xk()plt.subplot(222)plt.plot(DFT.K,DFT.xk)# 幅度谱plt.subplot(223)plt.stem(DFT.K,np.abs(DFT.xk))# 相位谱plt.subplot(224)angle_ = np.angle(DFT.xk)plt.stem(DFT.K,180*angle_/np.pi)plt.show()

三、DFT与DTFT的关系

 

 DTFT.py

import math
import numpy as npclass dtft():
#xvalues:输入序列def __init__(self,xvalues=[]):self.yvalues = []self.xvalues = xvalues
#fre:频率坐标def xjw(self,fre = []):
#(式1-1)实现yvalues为X(jw)频谱值for f in fre:p = 0;for x in self.xvalues:p = math.e**(-1j*f*x) + pself.yvalues.append(p)

DFT.py

from DTFT import dtft
import mathclass dft(dtft):
#Num:dft点数,self.Num序列值,self.K 序列横坐标,self.xk:存放dft计算结果,
#self.Xk():式(3-1)计算dftdef __init__(self,Num,xvalues):super().__init__(xvalues)self.Num = Numself.xk = []self.K = list(range(0,self.Num,1))self.Xk()def Xk(self):           W = []for x in self.K:W.append(x*2*math.pi/len(self.K))self.xjw(W)for x in self.yvalues:self.xk.append(abs(x))

使用方法和一、二一样,只是这里的DFT算法的编写是继承了DTFT类,便于理解二者的关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ERROR:Tried to register widget id ==basemapGalleryDiv but that id is already registered解决办法

在ArcGIS Server开发中,遇到DIV已经被注册的情况,不能对原DIV内容进行更新。这里需要调用Dojo的destroyRecursive()方法,逐个销毁该Widget下的子元素及其后代元素。然后就可以在原DIV上注册新的小部件。 示例代码&…

图像金字塔

图像金字塔被广泛用于各种视觉应用中。图像金字塔是一个图像集合,集合中所有的图像都源于同一个原始图像,而且是通过对原始图像连续降采样活得,直到达到某个中止条件才停止降采样。(当然,降为一个像素肯定是中止条件。…

【python数字信号处理】——Z变换

目录 一、公式 二、代码 三、结果 一、公式 频域变量:z 时域变量:n 常见序列的Z变换:信号与系统复习归纳(十一):Z变换例题_百把人的博客-CSDN博客_z变换例题基于东南大学陈从颜译《信号、系统和变换》和…

九宫格拼图 支持44 55等

代码下载转载于:https://www.cnblogs.com/ygcool/p/5395343.html

一体化点焊机将要取代分体式焊钳在汽车制造生产线上的使用

目前大多数汽车制造厂及相关配套钣金件厂家选用的是悬挂式点焊机及分体式焊钳,从焊接变压器的功率参数看,约70 % 为160KVA 的,约30 % 为200 kVA 的。原因主要有两方面,一是新材料如镀锌钢板、高强度钢板、铝合金板的应用&#xff…

【python数字信号处理】——线性卷积

目录 一、公式概念 二、代码 1、numpy库 2、自定义打印出每一步结果 三、结果 一、公式概念 线性卷积_百度百科线性卷积(linear convolution) 在时域描述线性系统输入和输出之间关系的一种运算。这种运算在线性系统分析和信号处理中应用很多,通常简称卷积。中文…

第五章 - 图像形态学 - 基于图像金字塔的图像分割(cvPyrSegmentation)

本例程涉及到几个数据结构及方法,CvMemStorage、cvPyrSegmentation()、CvConnectedComp、cvGetSeqElem(). CvMemStorage CvMemStorage Growing memory storage typedef struct CvMemStorage { struct CvMemBlock* bottom;/* first allocated block */ struct CvM…

【调试】Linux下超强内存检测工具Valgrind

【调试】Linux下超强内存检测工具Valgrind 内容简介 Valgrind是什么?Valgrind的使用Valgrind详细教程1. Valgrind是什么? Valgrind是一套Linux下,开放源代码(GPLV2)的仿真调试工具的集合。Valgrind由内核(c…

机器学习实战(python)-Ch02KNN-Notes

Chapter2 KNN 1.numpy.tile函数 格式:tile(A,reps) * A:array_like * 输入的array * reps:array_like * A沿各个维度重复的次数 举例:A[1,2] 1. tile(A,2) 结果:[1,2,1,2] 2. tile(A,(2,3)) 结果…

猜1-10的数字python脚本

#!/usr/bin/python#coding:utf-8import randomnumrandom.randint(1,10)while True:caiint(raw_input(请输入随机数字:))if cai num:print 猜对了exit()elif cai > num:print 猜大了else:print 猜小了非交互式的cp脚本#!/usr/bin/python#coding:utf-8import sysfile1sys.arg…

【pyqt5学习】——滑动条的使用slider

1、获取滑动条当前值: 滑动条名称.value() self.threshold1 self.horizontalSlider.value() self.threahold2 self.horizontalSlider_2.value() 2、滑动条值改变信号绑定槽函数 滑动条名称.valueChanged.connect(槽函数) # 滑条值变化 self.horizontalSlider.valu…

hibernate多对一单向外键

hibernate多对一单向外键: 描述: 转载于:https://www.cnblogs.com/blogofwyl/p/5402197.html

【PyQt5学习】——颜色面板使用(QcolorDialog)

from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * BB = QDialogButtonBox# 颜色窗口 class ColorDialog(QColorDialog):def __init__(self, parent=None):super(ColorDialog, self).__init__(parent)self.setOption(QColorDialog.ShowAlph…

算法练习5---快速排序Java版

基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序…

PostCSS自学笔记(二)【番外篇二】

图解PostCSS的插件执行顺序 文章其实是一系列的早就写完了. 才发现忘了发在SegmentFault上面, 最早发布于https://gitee.com/janking/Inf... 这次我继续研究PostCSS的插件的执行顺序。 之前有研究过做过假设,在插件列表中,PostCSS的插件执行顺序自上而下…

linux命令详解——iostat

简介 iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。 安装 yum install -y sysstat 语法 i…

highgui基础 OpenCV trackbar

在调试程序或者程序执行时需要调整某个变量的值亦或是参数的值,我们需要一个简单方便的操作,滚动条就是一个非常使用的工具。通过鼠标点击对滚动条进行拖动操作以期实现调整某个参数的值。下面例程参见Opencv 安装目录 samples tutorial_code文件夹。 #i…

chrome浏览器开发模式实现跨域

2019独角兽企业重金招聘Python工程师标准>>> 增加如下参数, --disable-web-security --user-data-dir 启动项变为: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir 转载于…

C#替换字符串起始/结尾指定的字符串

#region 替换字符串起始位置(开头)中指定的字符串/// <summary> /// 替换字符串起始位置(开头)中指定的字符串 /// </summary> /// <param name"s">源串</param> /// <param name"searchStr">查找的串</param> /…

腐蚀函数cvErode 和 膨胀函数cvDilate

Erode腐蚀&#xff0c; Dilate膨胀&#xff0c;这两个形态学函数总是成对出现&#xff0c;前者可以消除较小的点如噪音&#xff0c;后者可以使不连通的图像合并成块。 void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* elementNULL, int iterations1 ); void cvDi…