python绘制频谱图DTFT,DFT

《数字信号处理》——(一).DTFT、DFT(python实现)

python绘制频谱图:序列的傅里叶变换(DTFT),离散傅里叶变换(DFT)

《数字信号处理》、python学习记录

涉及知识

(之前用matlab来画图,深感matlab打开、运行较慢,就学习了一下python,初学者,错误之处欢迎指正)

  1. DTFT原理;
  2. DFT原理;
  3. python matplotlib库

DTFT、DFT原理

一.DTFT

X(ejω)=∑n=−∞∞x(n)e−jωnX\left(e^{j \omega}\right)=\sum_{n=-\infty}^{\infty} x(n) e^{-j \omega n}X(ejω)=∑n=−∞∞​x(n)e−jωn (式1-1)

x(n)=12π∫−ππX(ejω)ejωndωx(n)=\frac{1}{2 \pi} \int_{-\pi}^{\pi} X\left(e^{j \omega}\right) e^{j \omega n} d \omegax(n)=2π1​∫−ππ​X(ejω)ejωndω (式1-2)

二.DFT

X(k)=∑n=0N−1x(n)e−j2πNnkX(k)=\sum_{n=0}^{N-1} x(n) e^{-j \frac{2 \pi}{N} n k}X(k)=∑n=0N−1​x(n)e−jN2π​nk (式2-1)

x(n)=1N∑k=0N−1X(k)ej2πNnkx(n)=\frac{1}{N} \sum_{k=0}^{N-1} X(k) e^{j \frac{2 \pi}{N} n k}x(n)=N1​∑k=0N−1​X(k)ejN2π​nk (式2-2)

三.DFT与DTFT关系

X(k)=∑n=0N−1x(n)e−j2πNnkX(k)=\sum_{n=0}^{N-1} x(n) e^{-j \frac{2 \pi}{N} n k}X(k)=∑n=0N−1​x(n)e−jN2π​nk =X(ejω)∣ω=2πNk=\left.X\left(e^{j \omega}\right)\right|_{\omega=\frac{2 \pi}{N} k}=X(ejω)∣∣​ω=N2π​k​ (式3-1)

python代码实现

 实现类dtft、dft,由(式3-1)dft类可继承类dtft,简化程序(不太会用csdn编辑器,代码缩进使用时可能需要调整)

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))

举例绘制一个门函数频谱x(n)=R4(n)x(n)=R_{4}(n)x(n)=R4​(n)

一.DTFT

import matplotlib.pyplot as plt
import math
import numpy as np
from DTFT import dtft
#dtft数据产生
xvalues = list(range(0,4,1))
#画图
DTFT = dtft(xvalues)
W = np.arange(0,10,0.01)
DTFT.xjw(W)
xjw = []
for x in DTFT.yvalues:xjw.append(x)、plt.plot(W,xjw, linewidth = 5)
plt.title('DTFT',fontsize = 14)
plt.xlabel("w",fontsize = 14)
plt.ylabel("abs(dtft(xjw))",fontsize = 14)
plt.tick_params(axis = 'both',labelsize = 14)

二.DFT(32点)

import matplotlib.pyplot as plt
import math
import numpy as np
from DTFT import dtft
from DFT import dft#dtft数据产生
xvalues = list(range(0,4,1))
N1 = 32DFT1 = dft(N1,xvalues)X,Y,Z = plt.stem(DFT1.K,DFT1.xk,markerfmt = "o",linefmt = "-.",basefmt = "--")
plt.setp(X,color = 'k')
plt.setp(Y,color = 'r')
plt.setp(Z,color = 'b')
plt.title('DFT',fontsize = 14)
plt.xlabel("w",fontsize = 14)
plt.ylabel("abs(dft(xjw))",fontsize = 14)
plt.tick_params(axis = 'both',labelsize = 14,which = 'major')
plt.show()

总结

初学python,通过python这里的使用加深了对数字信号处理相关知识和python的认识,在复习dsp过程增添了些许乐趣。

《数字信号处理》——(一).DTFT、DFT(python实现)相关推荐

  1. 【数字信号处理】基于DFT的滤波系列3之插值滤波(含MATLAB代码)

    四.基于DFT的(理想)滤波 例2:一个"警告" "理想DFT滤波器"虽然简单.有效,但可能会导致意想不到的问题.在博客 [数字信号处理]基于DFT的滤波系列2 ...

  2. 数字信号处理(DTFT与DFT、DFS的详细讲解以及FFT算法)

    DTFT与DFT.DFS的详细讲解以及FFT算法 DTFT与DFT.DFS的区别在哪里呢? 离散傅里叶级数DFS 离散傅里叶变换DFT 有限长序列的线性卷积和循环卷积 利用DFT做连续信号的频谱分析 ...

  3. 【数字信号处理】基于DFT的滤波系列1

    一.引言 离散傅立叶变换(DFT)是很多数字信号处理(DSP)层面的核心,因此我们从这块开始. 我们首先快速回顾一下 DFT 的一些要点. 该模块这一部分的完整内容列表是: DFT 回顾 – 实数和复 ...

  4. 【数字信号处理】基于DFT的滤波系列2(含MATLAB代码)

    关注公号[逆向通信猿]更精彩!!! 三.时频域的"数" 在该节的大部分内容中,我们将使用无量纲数字序列的数据.然而,对于现实世界的数据,这些数字将具有基础单位.在本节中,将解释时域 ...

  5. DTFT、DFS、DFT和FFT的关系 离散数字信号处理 数字角频率和模拟角频率

    学信号最烦的便是数字信号处理,感觉很一大部分的人都在DTFT和DFT和FFT之间迷茫,下面我就大概谈一下我自己对它们的看法. 下面我就从第一步大概给大家介绍一下它们的变化过程. 首先是DTFT: (1 ...

  6. Matlab验证dtft共轭性质,数字信号处理实验4重点.docx

    深 圳 大 学 实 验 报 告 课程名称: 数字信号处理实验 实验项目名称: 实验4 学院: 信息工程学院 专业: 电子信息工程 指导教师: 陈佳义 报告人: 学号: 班级: 实验时间: 11.12 ...

  7. matlab验证dtft移位性质,数字信号处理教程:MATLAB释义与实现(第2版)

    第1章 信号和信号处理1.1信号的分类1.2信号处理51.2.1信号处理的举例51.2.2信号处理的一般任务61.2.3数字信号处理71.3信号采样和复原实例81.4本书概貌的说明10复习思考题12习 ...

  8. 数字信号处理——Python实现快速傅里叶变换FFT

    文章首发于我的个人博客 1.FFT背景 快速傅里叶变换(FFT)是离散傅里叶变换(DFT)的快速算法,它是根据离散傅里叶的奇.偶.虚.实等特性,在DFT的基础上进行改进获得的.它对傅里叶变换的理论没有 ...

  9. 数字信号处理②之从傅里叶系数到DFT

    数字信号处理系列博客: 数字信号处理之信号的合成.分解.相关性及傅里叶系数的计算 数字信号处理之从傅里叶系数到DFT 文章目录 一.前言 二.对合成信号进行各次谐波分析 (一)合成信号 (二)使用复指 ...

  10. matlab的dft谱分析,数字信号处理基于matlab(用DFT作谱分析,窗函数的设计)

    数字信号处理基于matlab(用DFT作谱分析,窗函数的设计) 1实验一用DFT作谱分析X11111X212344321N108X3COSN1PI/4N208X4SINN2PI/8FIGURESUBP ...

最新文章

  1. 【带你玩转主题模型Topic Model】—— 之 利用sklearn 实现Latetnt Dirichlet Allocation(LDA)主题模型
  2. python sys模块作用_浅谈Python中的模块
  3. 用算法代替生物大脑,90后博士造出活的微型机器人登上Science子刊
  4. 关于微信小程序的好奇和多事
  5. Cookie和Session-学习笔记03【Session快速入门、Session细节】
  6. 解决网站在负载均衡环境下SESSION丢失的问题
  7. Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)
  8. 使用 Linux 15 年后,我重新回到 Windows:感觉非常糟糕
  9. C# Excel导数据
  10. mysql计算两个月份之间的差值_MySQL如何获取两个年份月份信息中相差的月份(PERIOD_DIFF函数)呢?...
  11. 【附源码】计算机毕业设计SSM网上汽车租赁系统
  12. 解决VMware虚拟机桥接模式无法上网
  13. 初中计算机课件flash,初中数学flash课件(共100个)
  14. freeswitch系列三 SIP软电话xlite、linphonec接入kamailio+freeswitch
  15. java常用单词及解释_Java常用英语单词
  16. 拉钩网招聘信息爬虫项目
  17. 摄像头各参数的意义_监控摄像头各种基本参数名称说明
  18. android apk如何压缩包,Android 打包Apk太大 如何进行压缩APK文件
  19. 计算机专业期刊参考文献,优秀计算机期刊文章参考文献 优秀计算机专著类参考文献有哪些-免费论文范文...
  20. 华为防火墙NAT配置及简介

热门文章

  1. 单循环赛制php,告别东西部分组LPL实行常规赛单循环赛制
  2. kali免杀工具Veil Evasion
  3. Maven 中 com.adobe.blazeds 的配置失效解决方案
  4. 泛微e9隐藏明细表_泛微协同 泛微OA e-cology产品功能清单 模块列表
  5. 修改树莓派上Transmission设置提高同时下载任务数量
  6. Linux下 中日文输入法安装简介
  7. 为何使用百度输入法老是出现错别字?
  8. PostgreSQL客户端认证配置
  9. 修改 exchange服务器,修改或删除 Exchange 2010
  10. 网吧流媒体服务器系统,轻松搭建网吧影视服务器 让网速快起来