目录
- 一. 脚本功能
- 二. 使用效果
- 三. 代码分享
一. 脚本功能
- 根据采样点数,采样周期数等参数以及波形的数学表达式,生成任意波形
- 将波形数据转为指定位宽的二进制补码,然后存为txt
- 绘制原始波形和转换为二进制补码后的波形,验证转换是否正确
二. 使用效果
三. 代码分享
\'\'\'Author : Xu DakangEmail : XudaKang_up@qq.comDate : 2021-11-19 19:12:31LastEditors : Xu DakangLastEditTime : 2021-11-21 21:36:19Filename :Description :\'\'\'\'\'\'模块功能:1.根据采样点数,采样周期数等参数以及波形的数学表达式,生成任意波形2.将波形数据转为指定位宽的二进制补码,然后存为txt3.绘制原始波形和转换为二进制补码后的波形,验证转换是否正确\'\'\'import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.pylab import mplmpl.rcParams[\'font.sans-serif\'] = [\'SimHei\'] #显示中文mpl.rcParams[\'axes.unicode_minus\'] = False #显示负号import mplcursorsimport timenow_time = time.strftime(\"%Y%m%d-%H%M%S\", time.localtime(time.time()))# 我的自编模块import myBin2dec2hex#! 需要变更的参数file_name = \'waveform-\' + now_timeN = 250 # 一个周期的采样点数,采样频率Fs = 信号频率f * 采样点数NTNUM = 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()
到此这篇关于Python生成任意波形并存为txt的实现的文章就介绍到这了,更多相关Python生成任意波形内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- Python FFT合成波形的实例
- 使用python动态生成波形曲线的实现
- Python3.7 读取 mp3 音频文件生成波形图效果
- 使用python进行波形及频谱绘制的方法