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文档,猛击这里 文件操作 操作文件时,一般需要经 ...
随机推荐
- maven project module 依赖项目创建 ---转
一.创建Maven Project 1.右击 --> New --> Other,--> Maven --> Maven Project --> Next 2.如下图,选 ...
- MVC+EF 入门教程(一)
一.前言 本人小白,写这篇博客是为了记录今天一天所学的知识,可能表达不是那么的准确和清楚,欢迎在留言区写下您的建议,欢迎纠错.希望这篇文章对你有所帮助学习 .Net MVC有所帮助.废话不多说了,我们 ...
- 《程序设计方法》【PDF】下载
内容简介 <程序设计方法>主要以方法为主导,结合C语言,把程序设计方法学研究中若干成熟的理论和方法用通俗易懂的语言描述出来.<程序设计方法>还选取趣味性强.技巧性高.能够启发学 ...
- Django的设计模式
MVC模式 MVC将应用程序分解为三个组成部分:mode(模型).view(视图).control(控制器),其中: M 管理应用程序的状态(通常存储到数据库中),并榆树改变状态的行为(或者叫&quo ...
- Java 哲学家进餐
某次操作系统实验存档.V 这个哲学家除了吃就知道睡.( ╯□╰ ) 哲学家.java: package operating.entity.philosophyeating; import operat ...
- [置顶]
Xamarin android中使用signalr实现即时通讯
前面几天也写了一些signalr的例子,不过都是在Web端,今天我就来实践一下如何在xamarin android中使用signalr,刚好工作中也用到了这个,也算是总结一下学到的东西吧,希望能帮助你 ...
- Nodejs进阶:crypto模块中你需要掌握的安全基础
本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址. 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速度增长.同时,各类网络安全问题层出不穷.在信 ...
- 正则验证,match()与test()函数的区别?
test是RegExp的方法,参数是字符串,返回值是boolean类型.match是String的方法,参数是正则表达式,返回值是数组. 案例: //判断日期类型是否为YYYY-MM-DD格式的类型 ...
- Python核心编程--浅拷贝与深拷贝
一.问题引出浅拷贝 首先看下面代码的执行情况: a = [1, 2, 3] print('a = %s' % a) # a = [1, 2, 3] b = a print('b = %s' % b) ...
- PHP array_map()
PHP array_map() 函数 将函数作用到数组中的每个值上,每个值都乘以本身,并返回带有新值的数组: <?php function myfunction($v) { return($v* ...