python实现简单函数发生器
最近学校又抽风把我自动化系的苦逼童鞋留下做课设,简直无聊到爆的-->用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实现简单函数发生器的更多相关文章
- Python之简单函数练习(Day30)
1.写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作 def modify_file(filename,old,new): import os with open(filen ...
- Python学习教程(learning Python)--2 Python简单函数设计
本节讨论Python程序设计时为何引入函数? 为何大家都反对用一堆堆的单个函数语句完成一项程序的设计任务呢? 用一条条的语句去完成某项程序设计时,冗长.不宜理解,不宜复用,而采用按功能模块划分成函数, ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- Python 静态方法、类方法
今天我们来讨论一下Python类中所存在的特殊方法--静态方法.类方法. 一.定义 静态方法: 一种简单函数,符合以下要求: 1.嵌套在类中. 2.没有self参数. 特点: 1.类调用.实例调用,静 ...
- python基础知识(四)
摘要:主要涉及lambda表达式.python内置函数(open文件重点).冒泡排序 一.lambda表达式 适用于创建简单函数,也叫匿名函数, 函数名 = lambda 参数 : 返回值 funct ...
- python中的反射
在绝大多数语言中,都有反射机制的存在.从作用上来讲,反射是为了增加程序的动态描述能力.通俗一些,就是可以让用户参与代码执行的决定权.在程序编写的时候,我们会写很多类,类中又有自己的函数,对象等等.这些 ...
- python 初级1
List:Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来, ...
- python之路3:
class set(object): """ set() -> new empty set object set(iterable) -> new set o ...
- python基础之内置函数
该博客内容参考http://www.cnblogs.com/wupeiqi/articles/4943406.html 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经 ...
随机推荐
- Hibernate--使用xml配置映射关系
写在前面: 配置实体类与数据库的映射关系,有两种方式: 1.使用*.hbm.xml 2.使用@注解 二:xml的配置方式: eg:员工的xml配置文件: <?xml version=" ...
- C# 杂活
1 下拉框 List<Model.Sys.AccountModel> AcModel = BLL.Sys.AccountBLL.Instance.GetModelList("Ro ...
- layui动态设置下拉框数据,根据后台数据设置选中
追加下拉框数据: 设置默认选中: 正常的判断这种情况是不行的,因为追加出的数据,在前台显示的并不是同一个下拉框,原来的下拉框被隐藏了 因此需要:根据原来的位置,寻找下一个节点,寻找子节点的方式找到相应 ...
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)
##机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)---#####注:机器学习资料[篇目一](https://github.co ...
- 什么是副作用(Side Effect)
副作用(Side Effect)是指函数或者表达式的行为依赖于外部世界.具体可参照Wiki上的定义,副作用是指 1)函数或者表达式修改了它的SCOPE之外的状态 2)函数或者表达式除了返回语句外还与外 ...
- 微信扫码支付功能详细教程————Java
前言 首先声明 我并非原创 原创是 http://blog.csdn.net/wangqiuyun/article/details/51241064 我只是在前辈的基础 加以解释说明 还有自己的一些 ...
- Codebase Refactoring (with help from Go)
Codebase Refactoring (with help from Go) 代码库重构(借助于Go) 1.摘要 Go应该添加为类型创建替代等效名称的能力,以便在代码库重构期间渐进代码修复.本文解 ...
- Spring基础篇——Spring容器和应用上下文理解
上文说到,有了Spring之后,通过依赖注入的方式,我们的业务代码不用自己管理关联对象的生命周期.业务代码只需要按照业务本身的流程,走啊走啊,走到哪里,需要另外的对象来协助了,就给Spring说,我想 ...
- Java基础之引用(String,char[],Integer)总结
1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer ...
- 在linux环境下编译运行OpenCV程序的两种方法
原来以为在Ubuntu下安装好了OpenCV之后,自己写个简单的程序应该很容易吧,但是呢,就是为了编译一个简单的显示图片的程序我都快被弄崩溃了. 在谷歌和上StackOverFlow查看相关问题解答之 ...