最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Python生成任意波形并存为txt实现代码
时间:2022-06-25 01:34:29 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下Python生成任意波形并存为txt实现代码,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
一. 脚本功能
根据采样点数,采样周期数等参数以及波形的数学表达式,生成任意波形
将波形数据转为指定位宽的二进制补码,然后存为txt
绘制原始波形和转换为二进制补码后的波形,验证转换是否正确
二. 使用效果
三. 代码分享
''' Author : Xu Dakang Email : [email protected] Date : 2021-11-19 19:12:31 LastEditors : Xu Dakang LastEditTime : 2021-11-21 21:36:19 Filename : Description : ''' ''' 模块功能: 1.根据采样点数,采样周期数等参数以及波形的数学表达式,生成任意波形 2.将波形数据转为指定位宽的二进制补码,然后存为txt 3.绘制原始波形和转换为二进制补码后的波形,验证转换是否正确 ''' import numpy as np import matplotlib.pyplot as plt from matplotlib.pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] #显示中文 mpl.rcParams['axes.unicode_minus'] = False #显示负号 import mplcursors import time now_time = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time())) # 我的自编模块 import myBin2dec2hex #! 需要变更的参数 file_name = 'waveform-' + now_time N = 250 # 一个周期的采样点数,采样频率Fs = 信号频率f * 采样点数N TNUM = 10 # 采样周期数 BIT_# 二进制补码位数 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()
相关文章
- 人们熟悉的寄居蟹属于以下哪种分类 神奇海洋11月21日答案 11-21
- 第五人格11.22共研服有什么更新 11月22日共研服更新内容介绍 11-21
- 原神恰斯卡怎么培养 11-21
- 无期迷途四星装束是谁 11-21
- 王者荣耀帝丹高中校服怎么获得 11-21
- 光遇姆明季后续版本怎么玩 11-21