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文档,猛击这里 文件操作 操作文件时,一般需要经 ...
随机推荐
- CRL快速开发框架升级到4.52,谈谈开发过程中的优化
CRL4.5版本已经稳定使用于目前的几个中型项目中,在实际使用中,也发现了不少问题,这些问题都在4.52中提交 CRL具体功能和使用请浏览 CRL快速开发框架系列教程 由于现在项目是一套业务系统,查询 ...
- 晒下我在2017年所阅读的JavaScript书单
前言 学习是一个持续不断的过程,在互联网技术里畅游的程序猿们,对学习的渴望更是难以穷尽.2017即将逝去,2018已经漏出曙光,回顾这一年,在学习的路上收获还是颇丰的,下面就晒一晒2017年我所学习的 ...
- iOS知识点、面试题 之二
最近面试,与大家分享一下,分三文给大家: 当然Xcode新版本区别,以及iOS新特性 Xcode8 和iOS 10 在之前文章有发过,感兴趣的可以查阅: http://www.cnblogs.com/ ...
- 关于spring mybateis 定义resultType="java.util.HashMap"
关于spring mybateis 定义resultType="java.util.HashMap" List<HashMap<String, Object>& ...
- su和sudo命令的区别
一. 使用 su 命令临时切换用户身份 参考 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,bein ...
- C# Split用法
1.用字符串分隔: using System.Text.RegularExpressions;string str="aaajsbbbjsccc";string[] sArray= ...
- python 爬去拉钩测试招聘信息
代码如下: #coding:utf-8 import time import urllib.request from bs4 import BeautifulSoup file=open(r'meit ...
- C# DataGridView 列的显示顺序
this.dataGridView1.Columns["列名"].DisplayIndex=Convert.ToInt32("你要放置的位置")
- Sql Server 里的向上取整、向下取整、四舍五入取整的实例!
http://blog.csdn.net/dxnn520/article/details/8454132 =============================================== ...
- 深入了解CSS字体度量,行高和vertical-align
line-height和vertical-align在CSS中是两个简单的属性.如此简单,大多数人都相信自己已经完全理解它们是如何工作的以及如何使用它们.但事实上并不如此.他们其实很复杂,也是CSS中 ...