最近学校又抽风把我自动化系的苦逼童鞋留下做课设,简直无聊到爆的-->用VB实现函数发生器,(语言不限制)

大伙不知从哪搞来的MATLAB版本,于是几十个人就在这基础上修修改改蒙混过关了,可我实在不想用MATLAB

写(要是被抓了,几十个人0分,那场面->。->),用VB? 又要学一门语言。。况且我不太习惯她的编码方式,于是

乎想起了我一直在玩的python,

# ------------------------先上代码---(由于只是应付课设,在编码规范和代码逻辑上没有做优化,只是实现功能)---------

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.animation as animation

import tkinter

from tkinter import messagebox

freq = 1

margin = 1

deviation = 0

wave = 0

ss = []

fig = plt.figure()

axes1 = fig.add_subplot(111)

line, = axes1.plot(np.linspace(-10,10,3000))

def fangbo(data):

lis = []

for i in list(data):

if i//5%2 == 1:

lis.append(1)

else:

lis.append(-1)

return np.array(lis)

def juchi(data):

lis = []

for i in list(data):

lis.append(i%5/2.5)

return np.array(lis)-1

def sanjiao(data):

lis = []

for i in list(data):

if i//5%2 == 1:

lis.append(i%5/2.5)

else:

lis.append((5-i%5)/2.5)

return np.array(lis)-1

def update(data):

line.set_ydata(data)

return line,

def data_gen():

i = 50

res = [0*i for i in range(3000)]

while True:

global freq, margin, deviation, wave, ss

if wave == 0:

lis = list(margin*np.sin(freq*3.1415926/5*np.linspace(1,100,3000))+deviation)

elif wave == 1:

lis = list(margin*juchi(freq*np.linspace(1,100,3000))+deviation)

elif wave == 2:

lis = list(margin*sanjiao(freq*np.linspace(1,100,3000))+deviation)

elif wave == 3:

lis = list(margin*fangbo(freq*np.linspace(1,100,3000))+deviation)

ss = ss+lis[i-50:i]

yield ss+res[len(ss):]

i = i+50

if len(ss) >= 3000:

ss = ss[50:]

if i > 3050:

i = 50

def ssin():

global wave

wave = 0

def jjc():

global wave

wave = 1

def ssj():

global wave

wave = 2

def ffb():

global wave

wave = 3

def simu():

global freq, margin, deviation

try:

fe1 = float(fe.get('0.0','end'))

me1 = float(me.get('0.0','end'))

de1 = float(de.get('0.0','end'))

xe1 = float(xe.get('0.0','end'))

except:

messagebox.showinfo(title='错误',message='属性值必须为浮点数')

else:

freq = fe1

margin = me1

deviation = de1

if __name__ == '__main__':

root = tkinter.Tk()

root.title('波形发生器')

root.maxsize(320,140)

root.minsize(320,140)

lb = tkinter.Label(root,text='波形选择')

lb.pack()

fbt = tkinter.Button(root,text='正弦波',command=ssin)

fbt.place(x=20,y=20)

sbt = tkinter.Button(root,text='三角波',command=ssj)

sbt.place(x=100,y=20)

jbt = tkinter.Button(root,text='锯齿波',command=jjc)

jbt.place(x=180,y=20)

jbt = tkinter.Button(root,text='方波',command=ffb)

jbt.place(x=260,y=20)

ib = tkinter.Label(root,text='属性控制')

ib.place(x=130,y=50)

fl = tkinter.Label(root,text='频率')

fl.place(x=10,y=70)

fe = tkinter.Text(root,width=3,height=1)

fe.insert('end','1')

fe.place(x=50,y=70)

ml = tkinter.Label(root,text='幅值')

ml.place(x=85,y=70)

me = tkinter.Text(root,width=3,height=1)

me.insert('end','1')

me.place(x=125,y=70)

dl = tkinter.Label(root,text='偏移')

dl.place(x=160,y=70)

de = tkinter.Text(root,width=3,height=1)

de.insert('end','0')

de.place(x=200,y=70)

xl = tkinter.Label(root,text='相位')

xl.place(x=235,y=70)

xe = tkinter.Text(root,width=3,height=1)

xe.insert('end','0')

xe.place(x=275,y=70)

mb = tkinter.Button(root,text='仿真',command=simu)

mb.place(x=130,y=95)

ani = animation.FuncAnimation(fig, update, data_gen, interval=10)

plt.show()

root.mainloop()

# -------------------------------结果如下--------------------------------------------------------------

python实现简单函数发生器的更多相关文章

  1. Python之简单函数练习(Day30)

    1.写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作 def modify_file(filename,old,new): import os with open(filen ...

  2. Python学习教程(learning Python)--2 Python简单函数设计

    本节讨论Python程序设计时为何引入函数? 为何大家都反对用一堆堆的单个函数语句完成一项程序的设计任务呢? 用一条条的语句去完成某项程序设计时,冗长.不宜理解,不宜复用,而采用按功能模块划分成函数, ...

  3. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  4. Python 静态方法、类方法

    今天我们来讨论一下Python类中所存在的特殊方法--静态方法.类方法. 一.定义 静态方法: 一种简单函数,符合以下要求: 1.嵌套在类中. 2.没有self参数. 特点: 1.类调用.实例调用,静 ...

  5. python基础知识(四)

    摘要:主要涉及lambda表达式.python内置函数(open文件重点).冒泡排序 一.lambda表达式 适用于创建简单函数,也叫匿名函数, 函数名 = lambda 参数 : 返回值 funct ...

  6. python中的反射

    在绝大多数语言中,都有反射机制的存在.从作用上来讲,反射是为了增加程序的动态描述能力.通俗一些,就是可以让用户参与代码执行的决定权.在程序编写的时候,我们会写很多类,类中又有自己的函数,对象等等.这些 ...

  7. python 初级1

    List:Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来, ...

  8. python之路3:

    class set(object): """ set() -> new empty set object set(iterable) -> new set o ...

  9. python基础之内置函数

    该博客内容参考http://www.cnblogs.com/wupeiqi/articles/4943406.html 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经 ...

随机推荐

  1. 5.python函数

    一.递归函数 如果一个函数在内部调用自身,那么这个函数就叫做递归函数. 1. 必须有一个明确的结束条件: 2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少: 3.递归效率不高,递归层次过 ...

  2. 4. sudo,PATH环境变量,修改字符集,ntpserver,加大文件描述符,隐藏内核版本,锁定关键系统文件

    1   命令:  visudo              98gg      98行             yy           复制当前行             p              ...

  3. node.js之用ajax获取数据和ejs获取数据

    摘要:学了node之后有时候分不清前台和后台,今天用ajax和ejs来从后台获取数据,没有数据库,用json数据来进行模拟数据库:来区分前台和后台需要干什么? 一.用ejs获取数据 1.文件目录 2. ...

  4. requireJS基础使用

    index.html <body class="requireBODY" id="body"><div id="vuebox&quo ...

  5. bootstrap html页面禁止放大缩小

    用bootstrap写的html页面,在手机端中禁止放大缩小: 亲测有效: <meta name="viewport" content="width=device- ...

  6. ArcGIS 网络分析[8.2] 资料2 使用IDatasetContainer2接口的CreateDataset方法创建网络数据集

    上节提及如何使用IDatasetContainer2接口访问到网络数据集,上例可以封装为一个方法. 这节就使用IDatasetContainer2接口(Geodatabase类库)的CreateDat ...

  7. 前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器

    一.条件渲染 1.1.v-if 在字符串模板中,如 Handlebars ,我们得像这样写一个条件块: <!-- Handlebars 模板 --> {{#if ok}} <h1&g ...

  8. Thinkphp开启调试模式

    3.0版本的调试模式开启,必须在项目入口文件中添加常量APP_DEBUG定义,如下: define('APP_DEBUG',True); // 开启调试模式 开启调试模式后,你可能感觉不到什么变化,不 ...

  9. php-删除非空目录

    function deldir($path){ if(!is_dir($path)){ return false; } $dh = opendir($path); while(($file = rea ...

  10. 详解PHP反射API

    PHP中的反射API就像Java中的java.lang.reflect包一样.它由一系列可以分析属性.方法和类的内置类组成.它在某些方面和对象函数相似,比如get_class_vars(),但是更加灵 ...