我的Python脚本——生成任意波形并存为txt

一. 脚本功能

  1. 根据采样点数,采样周期数等参数以及波形的数学表达式,生成任意波形
  2. 将波形数据转为指定位宽的二进制补码,然后存为txt
  3. 绘制原始波形和转换为二进制补码后的波形,验证转换是否正确

二. 使用效果

三. 代码分享

'''
Author       : Xu Dakang
Email        : XudaKang_up@qq.com
Date         : 2021-11-19 19:12:31
LastEditors  : Xu Dakang
LastEditTime : 2021-11-22 15:15:08
Filename     :
Description  :
''''''
模块功能:
1.根据采样点数,采样周期数等参数以及波形的数学表达式,生成任意波形
2.将波形数据转为指定位宽的二进制补码,然后存为txt
3.绘制原始波形和转换为二进制补码后的波形,验证转换是否正确
'''import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pylab import mplmpl.rcParams['font.sans-serif'] = ['SimHei']  #显示中文
mpl.rcParams['axes.unicode_minus'] = False  #显示负号
import mplcursors
import timenow_time = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time()))# 我的自编模块
import myBin2dec2hex#! 需要变更的参数
file_name = 'waveform-' + now_timeN = 250  # 一个周期的采样点数,采样频率Fs = 信号频率f * 采样点数N
TNUM = 10  # 采样周期数
BIT_WIDTH = 24  # 二进制补码位数
f = 0.5  # 正弦信号的频率,可任意取值t0 = np.linspace(0, 1 / f, N)  # np.linspace(开始, 结束, 个数),注意开始点会被包含,结束点可能被包含(如果能整除的话)
pi = np.pi#! 更改y0的表达式以获得任意波形
# 正弦函数公式 y = sin(wt) = sin(2πft)
y0 = np.sin(2 * pi * f * t0) + np.sin(2 * pi * f * 2 * t0)
# y0 = np.sin(2 * pi * f * t0)#! 原始波形周期延拓,并绘制出延拓后的波形
x0_tnum = []
y0_tnum = []
y0_bit_tnum = []
for i in range(TNUM):for j in t0:x0_tnum.append(j + i * 1 / f)for k in y0:y0_tnum.append(k)
plt.figure(1)
plt.subplot(2, 1, 1)
plt.plot(x0_tnum, y0_tnum)
plt.grid()
plt.title('原始波形,最小频率 = ' + str(f) + '对应周期为' + str(1/f)+ ',周期数 = ' + str(TNUM) + ',采样频率 = ' + str(f * N))
mplcursors.cursor() # 使得可以在图像上取点#! 原始波形小数乘以二进制放大倍数再取整
y0_bit = np.int0((2**(BIT_WIDTH - 1) - 1) * y0 / max(abs(y0)))
y0_bit_tnum = []
for i in range(TNUM):for j in y0_bit:y0_bit_tnum.append(j)#! 将10进制转2进制补码,再存入txt文件中
fotxt = ''
fo = open(file_name + '.txt', 'w', encoding='utf8')
for dec_num in y0_bit_tnum:  # 不包括最后一个数fotxt += myBin2dec2hex.signed_dec2bin(dec_num, BIT_WIDTH)[2:] + '\n'
fo.write(fotxt[:-1])
print('生成' + file_name + '.txt文件成功!')
fo.close()#! 读取写入的txt文件,转为10进制并画出波形,以验证写入是否正确
fi = open(file_name + '.txt', 'r', encoding='utf8')y_out = []
for line in fi.readlines():y_out.append(myBin2dec2hex.signed_bin2dec(line))
fi.close()x_out = list(range(len(x0_tnum)))plt.figure(1)
plt.subplot(2, 1, 2)
plt.plot(x_out, y_out)
plt.grid()
plt.title('先转二进制补码再转10进制后波形, 相当于十进制值乘以2^' + str(BIT_WIDTH - 1) + ' - 1即'+ str('{:e}'.format(2**(BIT_WIDTH - 1) - 1)))
mplcursors.cursor()
plt.show()

四. 说明

代码中使用了自编模块myBin2dec2hex,请参考我的另一篇博客:

Python进制转换的完全实现——2/10/16进制原/补码互转_徐大康的博客-CSDN博客

其余import的都是第三方库,可通过pip install 库名来安装。

我的Python脚本——生成任意波形并存为txt相关推荐

  1. python批量生成图片_利用Python批量生成任意尺寸的图片

    实现效果 通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片. 效果如下: 目录结构 实现示例 # -*- coding: utf-8 -*- imp ...

  2. python批量生成图_利用Python批量生成任意尺寸的图片

    实现效果 通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片. 效果如下: 目录结构 实现示例 # -*- coding: utf-8 -*- imp ...

  3. python图标的演变_把Python脚本生成exe文件并添加版本信息和自定义图标

    pyinstaller和py2exe把Python脚本生成exe文件,并添加版本信息和自定义图标. 写了一个查找产品通道号的小程序,目前还没进行异常处理. 以下是程序源码. # -*- coding: ...

  4. Linux Caffe train.txt,python脚本生成caffe train_list.txt的方法

    首先给出代码: ? python下os模块的一下有用的用法: 0 重命名:文件和文件夹都是一个命令: os.rename(original_dir,new_dir) 1 文件操作: os.mknod( ...

  5. linux将py变成exe文件,使用py2exe将Python 脚本生成exe可执行文件

    使用Python的py2exe模块可以很容易地帮助我们将Python脚本生成可执行的exe程序.这样我们就可以让脚本脱离虚拟机的束缚,从而独立运行. 环境要求: python虚拟机,我使用的是pyth ...

  6. matlab生成任意波形发生器(AWG)所需波形文件程序

    matlab生成任意波形发生器(AWG)所需波形文件程序 环境 matlab2016a 简介 使用Matlab生成任意波形发生器(AWG)所需波形文件,使得任意波形发生器产生你所需波形,本文使用高斯脉 ...

  7. 用 Python脚本生成 Android SALT 扰码

    发布Android 有偿应用时需要随机生成 SALT 扰码夹在文件中,以下是 Python脚本(当然你选择 C/Java/SHELL/Perl 或别的都行) #!/usr/bin/python # F ...

  8. xp python转化为exe_使用Py2exe从python脚本生成的exe在xp上不起作用

    我有一个python脚本,在我的计算机上运行良好(安装了python2.732位).它有以下进口产品:import mechanize from bs4 import BeautifulSoup fr ...

  9. python脚本生成测试大批量的测试数据

    # -*- coding: utf-8 -*- # @Time : 2021/12/15 11:02 # @Author : gaomingjian # @Site : # @File : creat ...

最新文章

  1. ubuntu下使用Eclipse下搭建c开发环境
  2. 专访:经历了时间检验的不仅是论文,还有唐杰自己 | SIGKDD 2020时间检验奖
  3. 计算机c盘知识,为什么电脑系统盘叫C盘而不是A或B盘?
  4. 使用gradle-android搭建jenkins slave构建机器常见构建问题(二)
  5. C#设计模式之十五迭代器模式(Iterator Pattern)【行为型】
  6. appium GUI介绍
  7. 从setTimeout,onclick传参看js函数作为参数
  8. cass或cad里提取点坐标及高程的插件_一个坐标计算小程序 EXCEL 可以进行抵偿任意带高斯坐标转换...
  9. [Selenium] 操作新弹出窗口之验证标题和内容
  10. 医疗项目 开源_医疗保健受开源影响最大的行业之一
  11. [Tip]ActiveScaffold本地化
  12. Maven的parent pom的依赖
  13. linux上设置jar包加载顺序,SpringBoot配置加载顺序
  14. 淘宝类目列表1~2~3~4~5级。及根据淘宝商品ID查询基础信息,类目ID查类目信息API调用
  15. 无法卸载和重装photoshop CS3 的解决办法
  16. xml转json的两种方法
  17. 流媒体播放器EasyPlayer.js如何实现动态设置解码H.265音频?
  18. 爬虫_抓取猫眼电影TOP100
  19. 微信支付商户接入(一)
  20. uniapp开发微信小程序,开发者工具、真机预览都没问题,唯独预览、体验版在手机上列表顺序错乱,用的localeCompare做的中文排序,终于找到问题并解决掉了,记录一下子

热门文章

  1. 粒子群(PSO)算法简介
  2. 2022.3.27彩叶草
  3. hust1344(阶层问题+暴力)
  4. 安卓开发fragment报错_android开发 Fragment嵌套调用常见错误
  5. 删除你的所有计算机文件的英文,《电脑文件英文对照》.doc
  6. mvvm模式和mvc的区别_被误解的 MVC 和被神化的 MVVM,值得收藏!
  7. SpringBoot+gradle+idea实现热部署和热加载
  8. What's New In DevTools (Chrome 59)来看看最新Chrome 59的开发者工具又有哪些新功能
  9. 6.NFC之非NDEF格式
  10. 小米手机与魅族的PK战结果 说明了什么