音频处理基础-数值定点化

2024-05-03 18:58

本文主要是介绍音频处理基础-数值定点化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

定点化
由于成本,功耗等音素,一些DSP和MCU上并没有硬浮点支持,采用软浮点较为耗时,更有甚至不支持浮点计算。 在这些处理器上要实现相关算法,浮点的计算转换到定点域里计算必不可少。
Q格式的数据是名义上的定点数,它们的存储和计算均按照整数方式进行计算,这样的化就可以使用标准的整数ALU来实现浮点计算。而编程这必须确定整数和小数部分的位数以符合使用场景需要的动态范围和精度。
##浮点转成Q格式
从浮点转成Qm.n格式如下:
1.将浮点数乘以2^n
2.四舍五入到整数
##Q格式转成浮点

  1. 乘以2^{-n}
    ##线程编程
    本篇所述线程是指POSIX标准的线程,

pthread库不是Linux系统默认的库,链接程序时需要使用静态库libpthread.a,编译时可以加上-lpthread参数.

在算法工程化这一章节中就提到了并发程序设计思想,并发程序设计的核心思想是利用处理多核特性,让数据处理并发,并发可以使用多进程实现也可以用使用多线程方式实现,在同一个进程中的多个线程可以访问所属进程的资源,如文件描述符,内存等;在多个线程里共享资源时就需要关注资源的一致性(信号,锁,同步)问题.

考虑时下一个比较常见的应用场景,麦克风阵列在做AEC(自动回声消除时),每一路麦克风数据处理极其相似,一路一路处理这种串行处理方式是一种方式,另外还有一种方法是设置多个线程,将每一路的语音数据分配到一个核上,并发执行,这样在四核四路麦克的情况下,实际的处理时间就是一路处理时间,这样系统的实时性就会很好.

当然在单核的情况下更需要多线程设计,举个例子,一个进程执行了定期获取麦克风寻向结果,然后根据获取到的结果进行点灯刷新操作,如果是多线程设计,那么在等待获取寻向结果线程时,这个线程是可以进入休眠的,将cpu让出来给其它线程使用,尽量充分利用cpu资源.

###线程创建

#include <phtread.h>
int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void*), void *restrict arg);

这篇关于音频处理基础-数值定点化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957412

相关文章

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

Redis如何使用zset处理排行榜和计数问题

《Redis如何使用zset处理排行榜和计数问题》Redis的ZSET数据结构非常适合处理排行榜和计数问题,它可以在高并发的点赞业务中高效地管理点赞的排名,并且由于ZSET的排序特性,可以轻松实现根据... 目录Redis使用zset处理排行榜和计数业务逻辑ZSET 数据结构优化高并发的点赞操作ZSET 结

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ