最近学校又抽风把我自动化系的苦逼童鞋留下做课设,简直无聊到爆的-->用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. CRL快速开发框架升级到4.52,谈谈开发过程中的优化

    CRL4.5版本已经稳定使用于目前的几个中型项目中,在实际使用中,也发现了不少问题,这些问题都在4.52中提交 CRL具体功能和使用请浏览 CRL快速开发框架系列教程 由于现在项目是一套业务系统,查询 ...

  2. 3.更改ssh服务远程登录的配置

  3. if;脚本中退出语句:exit 数字,用$?查时为exit设置的数字,此数字为程序执行完后的返回数据,可以通过此方法自动设定

    if [ 条件 ];then 代码 fi if [ 条件 ] then 代码 fi [root@localhost ~]# df 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sda5 % ...

  4. htpasswd 命令详解

    htpasswd参数 -c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容. -n 不更新passwordfile,直接显示密码 -m 使用MD5加密(默 ...

  5. python各种类型的转换

    #进制转换 ord(x) #将一个字符转换为它的整数值 hex(x) #将一个整数转换为一个十六进制字符串 oct(x) #将一个整数转换为一个八进制字符串 #类型转换int(x [,base ]) ...

  6. ORACLE环境变量设置

    用oracle帐号登录,配置相关环境变量: vi .bash_profile export ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=/u01/app ...

  7. js功能代码大全

    1.日期格式化 //化为2017-08-14 function formatDate (date) { var y = date.getFullYear(); var m = date.getMont ...

  8. 随手记一下,VS2015卡顿问题解决。

    不知道什么开始,vs2015卡顿的很,启动时加载项目很慢,调试是启动慢,停止调试时直接卡死半分钟.其他都还能忍受,最不能忍受的是点击停止调试按钮后十几秒没反应! 网上有解决方案如下几个,我试了,都不行 ...

  9. ExpandableListView的完美实现,JSON数据源,右边自定义图片

    转载请标明出处: http://www.cnblogs.com/dingxiansen/p/8194669.html 本文出自:丁先森-博客园 最近在项目中要使用ExpandableListView来 ...

  10. Numpy

    一  : 安装ipython以及用到的包介绍 # 这里我们会用到ipython解释器,本文代码在ipython下运行 Pip3 install ipython Pip3 install jupyter ...