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文档,猛击这里 文件操作 操作文件时,一般需要经 ...
随机推荐
- css自动添加浏览器兼容前缀 autoprefixer设置
Autoprefixer设置: preferences>key Bindings-Users {"keys":["ctrl+alt+x"],"c ...
- 【功能代码】---3 JS判断字符串是否包含某个字符串
JS判断字符串是否包含某个字符串 var str ="abc"; if(str.indexOf("bc")>-1){ alert('str中包含bc字符串 ...
- Xamarin使用ListView开启分组视图Cell数据展示bug处理
问题描述 Xamarin使用IsGroupingEnabled="true"之后再Cell操作就会出现数据展示bug,数据不刷新的问题,如下图所示: 点击取消的是其他钢厂,但Vie ...
- MySQL MVCC机制
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/68 行结构 每一行额外包含三个隐藏字段: DB_TRX_ID:事 ...
- redis实现分布式可重入锁
利用redis可以实现分布式锁,demo如下: /** * 保存每个线程独有的token */ private static ThreadLocal<String> tokenMap = ...
- Android studio Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to
http://blog.csdn.net/FlyRabbit_1/article/details/74536317 Error:org.gradle.api.internal.tasks.Defaul ...
- PCA主成份分析
1 背景介绍 真实的训练数据总是存在各种各样的问题: 1. 比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余. 2. ...
- Head First设计模式之桥接模式
一.定义 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. 主要解决:在多维可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活. 何时使 ...
- Nginx 学习笔记(七)如何解决nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
出现:nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) 错误,有以下两种情况 1.80端口被占用 2.ipv4端 ...
- [C#]如何访问及调用类中私有成员及方法
本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 开发工具:VS2017 语言:C# DotNet版本:.Net FrameWork 4.0及以 ...