使用Python生产正弦码表(整型数和浮点数)
我们经常要使用单片机的DAC功能来实现正弦波的输出,最佳的方式就是将正弦码表复制到程序中,通过查表的方式输出。下面给出Python和Matlab生产正弦码表的程序,动动小手点赞!
Python生产正弦码表(浮点数和16进制整型)
python生成码表的特点
- 需要在python中按照matplotlib包,详细方法百度。
- 生成的数据为16进制大写数据,带尾缀H,带前缀0,格式:“0ADH,0FFH”
- 最后在对话框中打印出对应的数据,16列。
# -*- coding: utf-8 -*-
# @Time : 2021/12/6 22:39
# @Author : Yang
# @File : sin_conducter.py
# @Software: PyCharm
import math
import matplotlib.pyplot as plt
widths = 8 #正弦数据位数
lengths =256 #采样点数
floatnum = 4 #浮点数保留位数
sin_intdata = [] #输出16进制整形
sin_floatdata = [] #输出浮点型
for x in range(lengths):
data = str(hex(round((2**(widths-1)-1)*math.sin( (2*math.pi/lengths)*x )+(2**(widths-1)))))+'H'
i = data[2:]
sin_intdata.append(i.upper())
data = round((2 ** (widths - 1) - 1) * math.sin((2 * math.pi / lengths) * x) + (2 ** (widths - 1)),floatnum)
sin_floatdata.append(data)
kk = 0
for data in sin_floatdata:
kk = kk+1
print(data,end=", ")
if kk%16 == 0 :
print("\n")
kk = 0
for data in sin_intdata:
kk = kk+1
print('0'+data+',',end="")
if kk%16 == 0 :
print("\n")
plt.plot(sin_floatdata)
plt.show()
Matlab输出正弦波码表
matlab生产码表的特点
- 生成10进制整型和浮点型码表
- 在matlab项目文件夹下生产两个txt文件
- 16列,根据数组大小生产对应行数
depth =256; %存储器的单元数
widths = 8; %数据宽 N bit
floatnum = 4 ; %浮点数小数位数
sin_intdata= zeros(1,depth);
sin_floatdata = zeros(1,depth);
for x = 1 : depth
data_hex = round((2^widths/2)*sin(2*pi*(x-1)/(depth))+(2^widths/2)) ;
sin_intdata(x) = data_hex ;
data_float =round( ((2^widths/2-1)*sin(2*pi*(x-1)/(depth))+(2^widths/2)) , floatnum) ;
sin_floatdata(x) = data_float ;
end
% 重构矩阵 16列 ,方便显示
sin_int = reshape (sin_intdata ,[depth/16,16]);
sin_float = reshape (sin_floatdata ,[depth/16,16]);
% 输出数据写入txt文件中
writematrix(sin_int,'int.txt','Delimiter',',')
type 'int.txt'
writematrix(sin_float,'float.txt','Delimiter',',')
type 'float.txt'