pyqt5:py处理C语言格式数组和有符号数的转换(备忘录)

news/2024/11/7 16:58:07/

文章目录

  • 1.问题:把下面的数组所表示的正弦波用曲线描绘出来。
    • 1.1 将C语言数组直接替换为py数组
    • 1.2 使用numpy读入数组
    • 1.3完整代码
  • 2.从正弦波数据生成C数组
    • 2.1 正弦波数据
    • 2.2 负数转成16位带符号整型公式
    • 2.3 负数转成16位带符号整型 完整代码
  • 3. 生成正弦波数据的代码

AB32VG1在音频口输出正弦波源码: sddac_test.c

1.问题:把下面的数组所表示的正弦波用曲线描绘出来。

AB32VG1是小端存储。

const unsigned char hexData[96] = {0x00, 0x00, 0xB5, 0x10, 0x21, 0x21, 0xFC, 0x30, 0x00, 0x40, 0xEC, 0x4D, 0x82, 0x5A, 0x8D, 0x65,0xDA, 0x6E, 0x42, 0x76, 0xA3, 0x7B, 0xE8, 0x7E, 0xFF, 0x7F, 0xE8, 0x7E, 0xA3, 0x7B, 0x42, 0x76,0xDA, 0x6E, 0x8D, 0x65, 0x82, 0x5A, 0xEC, 0x4D, 0x00, 0x40, 0xFC, 0x30, 0x21, 0x21, 0xB5, 0x10,0x00, 0x00, 0x4B, 0xEF, 0xDF, 0xDE, 0x04, 0xCF, 0x00, 0xC0, 0x14, 0xB2, 0x7E, 0xA5, 0x73, 0x9A,0x26, 0x91, 0xBE, 0x89, 0x5D, 0x84, 0x18, 0x81, 0x00, 0x80, 0x18, 0x81, 0x5D, 0x84, 0xBE, 0x89,0x26, 0x91, 0x73, 0x9A, 0x7E, 0xA5, 0x14, 0xB2, 0x00, 0xC0, 0x04, 0xCF, 0xDF, 0xDE, 0x4B, 0xEF 
};

转换后:
在这里插入图片描述

1.1 将C语言数组直接替换为py数组

python数组:

hexData= [0x00, 0x00, 0xB5, 0x10, 0x21, 0x21, 0xFC, 0x30, 0x00, 0x40, 0xEC, 0x4D, 0x82, 0x5A, 0x8D, 0x65,0xDA, 0x6E, 0x42, 0x76, 0xA3, 0x7B, 0xE8, 0x7E, 0xFF, 0x7F, 0xE8, 0x7E, 0xA3, 0x7B, 0x42, 0x76,0xDA, 0x6E, 0x8D, 0x65, 0x82, 0x5A, 0xEC, 0x4D, 0x00, 0x40, 0xFC, 0x30, 0x21, 0x21, 0xB5, 0x10,0x00, 0x00, 0x4B, 0xEF, 0xDF, 0xDE, 0x04, 0xCF, 0x00, 0xC0, 0x14, 0xB2, 0x7E, 0xA5, 0x73, 0x9A,0x26, 0x91, 0xBE, 0x89, 0x5D, 0x84, 0x18, 0x81, 0x00, 0x80, 0x18, 0x81, 0x5D, 0x84, 0xBE, 0x89,0x26, 0x91, 0x73, 0x9A, 0x7E, 0xA5, 0x14, 0xB2, 0x00, 0xC0, 0x04, 0xCF, 0xDF, 0xDE, 0x4B, 0xEF ]

1.2 使用numpy读入数组

AB32VG1是小端存储,即低字节存放于低地址。以最后一组数据 hexData[94,95]=0x4B, 0xEF 为例分析。
hexData[95]= 0xEF 是高字节,所以计算如下:
dat = 0xEF*256 + 0x4B = 0xEF4B 。此时打印出来为十进制 61259:

>>>print(dat)
61259

python没有16位带符号整型,要转换成对应的负数:

dat = dat -0x10000

再次打印:

>>>print(dat)
-4277

1.3完整代码

import matplotlib.pyplot as plt  #画图包
import numpy as np 
#   1.从C语言拷贝过来的数据
hexData= [0x00, 0x00, 0xB5, 0x10, 0x21, 0x21, 0xFC, 0x30, 0x00, 0x40, 0xEC, 0x4D, 0x82, 0x5A, 0x8D, 0x65,0xDA, 0x6E, 0x42, 0x76, 0xA3, 0x7B, 0xE8, 0x7E, 0xFF, 0x7F, 0xE8, 0x7E, 0xA3, 0x7B, 0x42, 0x76,0xDA, 0x6E, 0x8D, 0x65, 0x82, 0x5A, 0xEC, 0x4D, 0x00, 0x40, 0xFC, 0x30, 0x21, 0x21, 0xB5, 0x10,0x00, 0x00, 0x4B, 0xEF, 0xDF, 0xDE, 0x04, 0xCF, 0x00, 0xC0, 0x14, 0xB2, 0x7E, 0xA5, 0x73, 0x9A,0x26, 0x91, 0xBE, 0x89, 0x5D, 0x84, 0x18, 0x81, 0x00, 0x80, 0x18, 0x81, 0x5D, 0x84, 0xBE, 0x89,0x26, 0x91, 0x73, 0x9A, 0x7E, 0xA5, 0x14, 0xB2, 0x00, 0xC0, 0x04, 0xCF, 0xDF, 0xDE, 0x4B, 0xEF ]#	2.生成x轴数据
cnt = 48
x=np.linspace(1, cnt,cnt, dtype=int)#	3.生成y轴空数据
y=np.empty([48], dtype = int, order = 'C')
dat=0 
i=0
j=0
#   4.生成y轴数据
while i < len(hexData):dat=hexData[i+1]*256 + hexData[i]if dat > 0x7fff :y[j]=dat-0x10000else:y[j]=datprint(dat)i += 2j+=1
#   5.绘图    
plt.plot(x,y,'bp--') #绘制成图表    
plt.show()
#   6.写入文本存档
np.savetxt("pcm001-48.txt",(y),delimiter=',',fmt="%d",newline='\n')

2.从正弦波数据生成C数组

2.1 正弦波数据

上面的C数组对应数据如下:

0		,
4277    ,
8481    ,
12540   ,
16384   ,
19948   ,
23170   ,
25997   ,
28378   ,
30274   ,
31651   ,
32488   ,
32767   ,
32488   ,
31651   ,
30274   ,
28378   ,
25997   ,
23170   ,
19948   ,
16384   ,
12540   ,
8481    ,
4277    ,
0       ,
-4277   ,
-8481   ,
-12540  ,
-16384  ,
-19948  ,
-23170  ,
-25997  ,
-28378  ,
-30274  ,
-31651  ,
-32488  ,
-32768  ,
-32488  ,
-31651  ,
-30274  ,
-28378  ,
-25997  ,
-23170  ,
-19948  ,
-16384  ,
-12540  ,
-8481   ,
-4277

2.2 负数转成16位带符号整型公式

上面知道表示负数的16位带符号整型转成负数的公式如下:

if dat > 0x7fff:dat = dat -0x10000

这里是逆运算:

    if dat <0 :dat=dat+0x10000

2.3 负数转成16位带符号整型 完整代码

注意存储是小端模式。

import numpy as np 
#   1.正弦波数据
hexData= [0		,4277    ,8481    ,12540   ,16384   ,19948   ,23170   ,25997   ,28378   ,30274   ,31651   ,32488   ,32767   ,32488   ,31651   ,30274   ,28378   ,25997   ,23170   ,19948   ,16384   ,12540   ,8481    ,4277    ,0       ,-4277   ,-8481   ,-12540  ,-16384  ,-19948  ,-23170  ,-25997  ,-28378  ,-30274  ,-31651  ,-32488  ,-32768  ,-32488  ,-31651  ,-30274  ,-28378  ,-25997  ,-23170  ,-19948  ,-16384  ,-12540  ,-8481   ,-4277]
i=0
#	2.生成96个数据存储空间
y=np.empty([96], dtype = int, order = 'C')
dat=0 
j=0
while i < len(hexData):dat=hexData[i]if dat <0 :dat=dat+0x10000print(dat)y[j] = dat %  256j+=1y[j] = dat / 256j+=1i += 1
#   3. 保存到文本
np.savetxt("pcm001-96.txt",(y),delimiter=',',fmt="0x%02x",newline='\n')

3. 生成正弦波数据的代码

import matplotlib.pyplot as plt  #画图包
import numpy as np #   1.从0 - 2 pi 等长取48个点,作为 x 轴数据
x=np.linspace(0*np.pi,2*np.pi,12*4) #
#   2. 根据x轴生成y轴数据
y=32768*np.sin(x) #调整32768这个值可以调整波峰值
#   3.取整
y1=y.astype(int) #把y值转换成整数
#   4.绘制成图表
plt.plot(x,y1,'bp--') 
plt.show()#   5.正弦波数据存入txt文件
np.savetxt("pcm-48.txt",(y1),delimiter=',',fmt="%d",newline='\n')

在这里插入图片描述

生成的数据 《pcm-48.txt》 如下:

0
4367
8657
12792
16699
20307
23554
26380
28735
30578
31875
32603
32749
32311
31296
29723
27619
25023
21980
18544
14778
10748
6526
2188
-2188
-6526
-10748
-14778
-18544
-21980
-25023
-27619
-29723
-31296
-32311
-32749
-32603
-31875
-30578
-28735
-26380
-23554
-20307
-16699
-12792
-8657
-4367
0

http://www.ppmy.cn/news/74428.html

相关文章

LeetCode-0523

1047. 删除字符串中的所有相邻重复项(简单) class Solution {public String removeDuplicates(String s) {Stack<Character> sta new Stack<>();for(int i0;i<s.length();i){char tp s.charAt(i);if(!sta.isEmpty()&&tpsta.peek()){sta.pop();contin…

从裸机启动开始运行一个C++程序(三)

先序文章请看 从裸机启动开始运行一个C程序&#xff08;二&#xff09; 从裸机启动开始运行一个C程序&#xff08;一&#xff09; 编写MBR 上一章我们已经成功地在8086上运行了指令&#xff0c;同时也介绍了nasm汇编语言。那么接下来这一章&#xff0c;我们就来看看如何写BIO…

宜搭低代码开发师(高级)「FaaS连接器加解密系统」操作步骤(亲测OK)

目录 目标: 步骤: 一、FaaS连接器 二、页面步骤介绍 目标: 轻松搞定高级认证!!! 步骤: 提示&#

单循环比赛

固定轮转编排法 固定轮转法也叫常规轮转法&#xff0c;是我国传统的编排方法。它以左边第一号固定不动&#xff0c;逆时针转动&#xff0c;逐一排出。 public function fixedRotation(){$teamlist [1, 2, 3, 4, 5,6, 0];//参赛的各队$len count($teamlist);for ($i 1; $i &l…

weblogic CVE-2014-4210 SSRF漏洞

CVE-2014-4210 SSRF漏洞 Weblogic 中存在一个SSRF漏洞&#xff0c;利用该漏洞可以发送任意HTTP请求&#xff0c;进而可以攻击内网中Redis、Fastcgi等脆弱组件 该漏洞存在于/uddiexplorer/SearchPublicRegistries.jsp SSRF&#xff1a;服务端请求伪造&#xff0c;伪造存在该漏洞…

SpringBoot开发实用篇1

一、热部署 1.手工启动热部署 经过测试当前是没有启动热部署的&#xff1a; 再将sout的信息多复制几份&#xff0c;刷新功能&#xff0c;发现控制台还是只打印一行信息。说明当前热部署是没有生效的。 手动开启热部署&#xff1a; 在pom.xml文件中加入开发者工具配置热部署…

组合预测模型 | ARIMA-CNN-LSTM时间序列预测(Python)

组合预测模型 | ARIMA-CNN-LSTM时间序列预测&#xff08;Python&#xff09; 目录 组合预测模型 | ARIMA-CNN-LSTM时间序列预测&#xff08;Python&#xff09;预测结果基本介绍程序设计参考资料 预测结果 基本介绍 ARIMA-CNN-LSTM是一种结合了传统时间序列模型和深度学习模型的…

OPPO哲库事件 “ 始末 ” ! 集体打哑谜?

1►OPPO哲库解散 2019 年&#xff0c;美国商务部以“科技网络安全”为由&#xff0c;将华为公司及其70家附属公司列入出口管制“实体名单”。与此同时&#xff0c;OPPO 创始人兼 CEO陈明永对外宣布&#xff0c;公司将为未来三年内投入 500 亿元用于前沿技术和深水区技术的探索…