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

news2024/12/17 12:55:58

文章目录

  • 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-0x10000
    else:
        y[j]=dat
    print(dat)
    i += 2
    j+=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+0x10000
    
    print(dat)
    y[j] = dat %  256
    j+=1
    y[j] = dat / 256
    j+=1
    i += 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) #调整43这个值可以调整波峰值
#   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.coloradmin.cn/o/555055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASEMI代理英飞凌IPA65R650CE功率MOS管中文资料

编辑-Z IPA65R650CE是一款高性能功率晶体管&#xff0c;旨在满足现代电子应用日益增长的需求。这种先进的半导体器件提供了高效、低功耗和优异热性能的独特组合&#xff0c;使其成为广泛应用的理想选择&#xff0c;包括电源、电机驱动和可再生能源系统。 IPA65R650CE的主要功能…

失业五个月,终于有offer了!但这家公司的风评惨不忍睹,要接吗?

往年&#xff0c;程序员们找工作可以说是不怎么费力的&#xff0c;不少求职者还会比对几家offer&#xff0c;看薪酬、看加不加班、看通勤时间等等等等&#xff0c;最后选择自己最满意的那一家过去。 但是今年&#xff0c;情况确实完全不一样&#xff0c;用网友的话形容就是“往…

vs code ts运行、断点调试解决方案

序&#xff1a; 1、解决ts在vs code里直接运行&#xff0c;并在终端直接看结果 2、解决ts 断点调试问题&#xff08;博主这个调试算的上全网最简单的设置方法了&#xff09;。 3、ts-node : 无法加载文件 C:\Program Files\nodejs\ts-node.ps1,因为在此系统上禁去看这篇》ts-no…

Velocity模板与itextpdf联合生成pdf

pom <!-- velocity模板引擎 --><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency><!-- itext7html转pdf --><depende…

LeetCode刷题(ACM模式)-01数组

参考引用&#xff1a;代码随想录 注&#xff1a;每道 LeetCode 题目都使用 ACM 代码模式&#xff0c;可直接在本地运行&#xff0c;蓝色字体为题目超链接 0. 数组理论基础 数组&#xff08;array&#xff09;是存放在连续内存空间上的相同类型数据的集合&#xff0c;是一种复合…

【哪些人不适合学习云计算?看看有没有你!】

云计算作为是互联网技术革命的重要一员&#xff0c;也是区别于一般IT职业的。作为高级技工&#xff0c;不是谁都能学会&#xff0c;也不是谁都适合这个技术。优秀的云计算工程师能让技术成为炫耀的资本&#xff0c;玩得神乎其技&#xff0c;引得众人追捧。我想这也是大部分热爱…

Cam APP-HAL流程追踪之demo梳理

一、基础知识 1、Google官网的Cam流程如下图1 2、Cam的预览、拍照、录像是分开的 Cam的预览、拍照、录像是各自独立的-换句话说可以不开启预览拍照或者录像–后面代码会详细介绍&#xff1b;市场上的成品Cam应用&#xff0c;打开Cam后直接打开了预览&#xff0c;然后可以拍照…

【数据结构】线性表之栈、队列

前言 前面两篇文章讲述了关于线性表中的顺序表与链表&#xff0c;这篇文章继续讲述线性表中的栈和队列。 这里讲述的两种线性表与前面的线性表不同&#xff0c;只允许在一端入数据&#xff0c;一段出数据&#xff0c;详细内容请看下面的文章。 顺序表与链表两篇文章的链接&…

最新社区论坛小程序源码 含流量主功能+前后端+部署搭建教程

分享一个社区论坛小程序源码&#xff0c;含完整前后端代码包和详细的部署搭建教程&#xff0c;做地方运营很适合&#xff0c;集成了流量主功能&#xff0c;一键轻松开启。 系统功能一览&#xff1a; 广场管理&#xff1a;广场列表&#xff0c;圈子列表&#xff0c;圈子审核 帖…

CE作业(4)

一、准备前提 服务端 客户端 ; 关闭防火墙systemctl stop firewalld 关闭selinux setenforce 0 提供DNS服务的软件叫bind&#xff0c;服务名是named 一、正向解析&#xff1a; 1.装包 yum install bind -y 2.配置服务 vim /etc/named.conf #监听53号端口 #访问的是本…

​数据库原理及应用上机(实验三 SQL数据查询)

✨作者&#xff1a;命运之光 ✨专栏&#xff1a;数据库原理及应用上机实验 ​ 目录 ✨一、实验目的和要求 ✨二、实验内容及步骤 ✨三、实验结果 ✨四、附加练习 ✨五、实验总结 &#x1f353;&#x1f353;前言&#xff1a; 数据库原理及应用上机实验报告的一个简单整理…

用别人的钱创咖啡的业,戴威与陆正耀殊途同归?

文 | 新熔财经 作者 | 和花 近四年来&#xff0c;ofo退押一事没有出现任何明显的转机&#xff0c;但ofo创始人戴威却已经在海外大张旗鼓地开启了名为About Time Coffee的新创业项目。 当“ofo创始人戴威再次创业”的消息登上微博热搜&#xff0c;收获的几乎都是“还钱”的征…

字符串按规则生成字典

带数字的字符串以数字为key倒序生成字典&#xff0c;字符串列表按其元素索引为key倒序生成字典。 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简…

实验室云检验信息系统(云LIS源码)

一、区域云LIS系统概述&#xff1a; 区域云LIS平台源码&#xff0c;系统完全采用B/S架构模式&#xff0c;扩展性强。整个系统的运行基于WEB层面&#xff0c;只需要在对应的工作台安装一个浏览器软件有外网即可访问。 云LIS系统为实验室服务对象提供检验申请、采集标本、结果查…

【IDEA使用码云教程】

IDEA使用码云教程 一、下载、安装git二、配置Gitee插件三、克隆项目四、上传项目五、推送项目六、更新项目 一、下载、安装git 1.打开git官网&#xff0c;选择你的操作系统 官网下载地址&#xff1a;https://git-scm.com/downloads 2.根据你的系统位数选择相应的版本下载 系统…

frp+nginx+xposed搭建xp模块集群

frpcnginxxposed搭建xp模块集群 前言实现逻辑配置内网穿透实现负载均衡 前言 为了能够稳定的采集一些app的详情页数据&#xff0c;就得借助xposed&#xff0c;xposed跟NanoHTTPD配合使用就可以在手机端开启接口服务&#xff0c;直接调用手机端的接口就能获取我们想要的数据&am…

【机器学习】线性模型

文章目录 第三章&#xff1a;线性模型一、线性回归模型1.1、线性回归模型1.2、求解线性回归模型&#xff08;时刻要分清维度&#xff09;1.3、多输出线性回归模型 二、线性分类模型2.1、判别函数2.2、概率判别模型2.3、概率生成模型 第三章&#xff1a;线性模型 一、线性回归模…

怎么把视频压缩到500m以下?

如何把视频压缩到500m以下&#xff1f;视频文件通常是非常大的&#xff0c;特别是高清视频或超高清视频&#xff0c;因此压缩可以帮助将视频文件大小减小&#xff0c;在有限的存储空间中存储更多的视频文件。较大的视频文件在上传和下载时需要较长时间&#xff0c;而压缩视频文…

Flink学习——Flink中的时间语义和窗口

一、时间语义 1.1 为什么会出现时间语义&#xff1f; flink是一个大数据处理引擎&#xff0c;它的最大特点就是分布式。每一个机器都有自己的时间&#xff0c;那么集群当中的时间应该以什么为准呢&#xff1f; 比如&#xff1a;我们希望统计8-9点的数据时&#xff0c;对并行任…

使用RSD从DEM数据创建用户高程数据层

李国春 SRTM90和Aster DEM的V2/V3是比较常用的免费共享高程数据。用户下载好以后应用到自己的项目时&#xff0c;经常会需要进行拼接合成和投影重采样等。RSD提供了一种创建自己项目的高程数据的方法。 一. 高程图像生成方法 在自己的项目中&#xff0c;选择图1的菜单。 图1…