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文档,猛击这里 文件操作 操作文件时,一般需要经 ...
随机推荐
- HBase:Shell
HBase shell commands As told in HBase introduction, HBase provides Extensible jruby-based (JIRB) she ...
- C#:StreamReader读取.CSV文件(转换成DataTable)
using System.Data; using System.IO; /// <summary> /// Stream读取.csv文件 /// </summary> /// ...
- Structured Streaming从Kafka 0.8中读取数据的问题
众所周知,Structured Streaming默认支持Kafka 0.10,没有提供针对Kafka 0.8的Connector,但这对高手来说不是事儿,于是有个Hortonworks的邵大牛(前段 ...
- 《HelloGitHub》第 21 期
公告 元旦快乐! <HelloGitHub>第 21 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编 ...
- java前后端分离是否会成为趋势
现在项目当中使用的是springboot+springcloud,这套框架也用了半年了,springboot是spring4.0的升级版,简化了springmvc的xml配置,是spring家族中目前 ...
- 使用angularjs实现注册表单
本文是在学习angularjs过程中做的相应的练习 github地址 https://github.com/2016Messi/angularjs1.6-form 演示地址 https://2016m ...
- GitLab配置ssh key
一.背景 当前很多公司都选择git作为代码版本控制工具,然后自己公司搭建私有的gitlab来管理代码,我们在clone代码的时候可以选择http协议,当然我们亦可以选择ssh协议来拉取代码.但是网上很 ...
- SLAM入门之视觉里程计(2):两视图对极约束 基础矩阵
在上篇相机模型中介绍了图像的成像过程,场景中的三维点通过"小孔"映射到二维的图像平面,可以使用下面公式描述: \[ x = MX \]其中,\(c\)是图像中的像点,\(M\)是一 ...
- 606. Construct String from Binary Tree
You need to construct a string consists of parenthesis and integers from a binary tree with the preo ...
- ArcGIS 网络分析[8.4] 资料4 聚合——创建及打开网络数据集的类实现
这篇是对前三篇的总结,因为网络数据集涉及的"点"太多了,我只能挑重点来设置,大家明白框架后可以自行寻求帮助文档添加功能. 我以C#类的形式给出,这个类包含很多种方法,因为本人的C# ...