当前位置: 首页 > news >正文

语音识别相关概念

声音如何保存成数字信号?

声音是听觉对声波产生的感知,而声波是一种在时间和振幅上连续的模拟量,本质是介质的振动,,比如空气的振动。那么只需要把这个振动信号记录下来,并用一串数字来表达振动信号振动的快慢和振动的幅度,就可以实现声音的记录

以前的留声机就是通过唱片上凹槽的深浅、长短来表征声音的振幅和持续时间。


而通过麦克风来采集声音步骤如下:

  • 首先,声波通过空气传播到麦克风的振膜
  • 然后,振膜随空气抖动的振幅大小产生相应的电学信号。我们把这种带有声学表征的电学信号叫做模拟信号(Analog signal)。
  • 最后,通过A/DC(模数转换器)将模拟信号转换成数字信号(Digital signal)。即通过脉冲编码调制(Pulse Code Modulation,PCM)对连续变化的模拟信号进行抽样、量化和编码转换成离散的数字信号

PCM编码过程如下图所示:

PCM编码过程

(1) 采样
将时间连续的模拟信号按照采样率提取样值,变为时间轴上离散的抽样信号的过程

人耳可以听到的声波频率范围是 20Hz~22.05kHz,因此44.1kHz/16bit的音频数据被认为是无损音频

(2) 量化
抽样信号虽然是时间轴上离散的信号,但仍然是模拟信号,其样值在一定的取值范围内,可有无限多个值。显然,对无限个样值给出数字码组来对应是不可能的。为了实现以数字码表示样值,必须采用“四舍五入”的方法把样值分级“取整”,使一定取值范围内的样值由无限多个值变为有限个值。这一过程称为量化。

量化后的抽样信号与量化前的抽样信号相比较,当然有所失真,且不再是模拟信号。这种量化失真在接收端还原模拟信号时表现为噪声,并称为量化噪声。量化噪声的大小取决于把样值分级“取整”的方式,分的级数越多,即量化级差或间隔越小,量化噪声也越小。

(3) 编码
量化后的抽样信号就转化为按抽样时序排列的一串十进制数字码流,即十进制数字信号。简单高效的数据系统是二进制码系统,因此应将十进制数字代码变换成二进制编码。这种把量化的抽样信号变换成给定字长(采样位数)的二进制码流的过程称为编码

经过上面的PCM编码过程得到的数字信号就是PCM音频数据

PCM文件

PCM文件就是未经封装的音频原始文件或者叫做音频“裸数据”。涉及3个基本概念:采样位深、采样率和通道数。

采样位深
采样位深也就是每个采样点用多少bit来表示

从物理意义上来说,位深代表的是振动幅度的表达精确程度或者说粒度。

假设数字信号是一个1到-1的区间,如果位深为16bit,那么第1个bit表示正负号,并且剩下的15个bit可以表征0~32767个数,那么振幅就可以精确到1/32768的粒度了。

一般在网络电话中用的就是16bit的位深,这样不太会影响听感,并且存储和传输的耗费也不是很大。而在做音乐或者更高保真度要求的场景中则可以使用32bit甚至64bit的位深来减少失真(高采样位深可以减少失真)。

题外话:有的音乐就追求这种模糊感,所以“8bit”有的时候也代表一种听感朦胧的音乐艺术类型。

采样率
采样率就是1秒内采集到的采样点的个数(赫兹Hz)。常用为 16kHz和48kHz。

根据奈奎斯特采样定理在进行模拟/数字信号的转换过程中,当采样频率 f s f_s fs大于信号中最高频率 f m a x f_{max} fmax的2倍时采样之后的数字信号才可以完整地保留原始信号中的信息。也就是说采样率和保留的声音频率基本上是2倍的关系。

下图的频谱图对比16kHz采样率和48kHz采样率的音频:

16kHz采样率的音频在8kHz以上的频谱基本是没有能量的(黑色),也就是说这部分高频的信息由于采样率不够已经丢失了。从听感上来说人耳可以听到的频率范围大概是20~20kHz之间。如果采样率不够,那么和实际听感比起来声音就会显得“低沉”或者说“闷”

采样率的选择依据场景决定:

  • 如果只是为了听见人声、听懂对方在说什么,那么为了节省传输码率我们可以把采样率降到8kHz(比如打电话)。
  • 而在网络音视频会议场景需要平衡音质和传输带宽消耗,一般可以使用16kHz或者32kHz的采样率。
  • 如果是开线上音乐会或者音乐直播,我们通常会用较高的采样率来保证音质,比如44.1kHz或者48kHz。
  • 更极端一点,在音乐制作录音的时候,会采用96kHz甚至更高的采样率来方便后续的调音和制作。

通道数

在平时买音响的时候听过2.1声道或者5.1声道等名词,这些数字代表了有多少个播放单元。
比如,2.1声道中的2指的是左右两个音箱,1指的是中间一个低音音箱。每个音箱都会播放一个单独的音频,这时候就需要同时有3路音频信号同时播放,或者叫通道数为3。

由于编/解码器能力的限制(比如使用了单通道编/解码器),或者采集设备能力的限制(只能采集单通道的信号),音频信号通常为单声道的

听歌的时候,戴上耳机如果听到左右耳朵是不一样的,能够感觉到声音是从不同方向传过来的,那么就说明这个音频是双声道。我们通常也把这种双声道音频叫做立体声(stereo)。

除了播放需要多声道以外,采集也可能采集到多通道的数据。比如麦克风阵列采集到的原始信号,有多少个麦克风就会有多少个通道的音频信号。因此,这里通道数的物理含义其实就是同一时间采集或播放的音频信号的总数

假设有一个立体声的PCM音乐文件,它记录了1分40秒的采样率为48kHz的音频,如果这个文件的采样位深是16bit,那么这个立体声文件应该占用多大的存储空间呢?如果不经过压缩实时传输播放,又至少需要多少的带宽呢?
一个PCM音频文件的存储大小就是采样位深、采样率、通道数和持续时间的累乘

16 × 48000 × 2 × 100 = 1.53 ∗ 1 0 8 b i t = 18.31 M B 16\times 48000\times 2\times 100=1.53*10^{8}bit=18.31MB 16×48000×2×100=1.53108bit=18.31MB

实时传输所需的带宽就是它每秒所需的比特带宽

16 × 48000 × 2 = 1.53 ∗ 1 0 6 b p s 16\times 48000\times 2=1.53*10^{6}bps 16×48000×2=1.53106bps

PCM音频数据的存储方式

采集的PCM音频数据是需要保存到本地文件中,如果用单声道采集的,则按时间的先后顺序依次存入,如果是双声道的话则按时间先后顺序交叉地存入,如下图所示:

PCM音频数据一般无法通过播放器直接播放。可以使用 ffplay 或者 Audition 工具进行播放:
ffplay -f s16le -ar 44100 -ac 1 -i raw.pcm

  • f s16le:设置音频格式为有符号16位小端格式(signed 16 bits little endian),对应Android中的AudioFormat.ENCODING_PCM_16BIT
  • ar 44100:设置音频采样率(audio rate)为44100
  • ac 1:设置声道数(audio channels)1,单声道为1,双声道为2
  • i raw.pcm:设置输入的pcm音频文件

通常将PCM音频数据转化为WAVE文件就可以用播放器直接解析播放,WAVE是微软公司专门为Windows开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真。它符合资源互换文件格式(RIFF)规范。

音频的封装

平时经常看到的音频文件格式,比如MP3、FLAC和WAV等,它们有什么区别?它们所需的存储空间一样么?

有损和无损音频编码封装格式
有损的音频封装格式主要是通过压缩算法把文件大小尽量减少,但是在解压缩的时候却无法完美还原音频原来的数据(即有损)。比如MP3、AAC、AMR和WMA等编码封装格式。

有损音频格式比如MP3一般可以达到1:10的压缩比,即存储体积为未压缩音频的十分之一。但在听感上和无损格式比起来,如果不是专业人士很难听出区别。

无损音频封装则采用可完美还原的压缩算法,比如FLAC和APE等编码封装格式。FLAC与APE的压缩比基本相同,其中FLAC的压缩比为58.70%,而APE的压缩能力则要更高一些,压缩比为55.50%。它们都能压缩到接近源文件一半大小。无损封装甚至还可以不压缩编码,直接加个文件头作为封装,比如WAVE格式的封装。

WAVE文件的封装
WAVE文件作为多媒体中使用的声波文件格式之一,文件后缀名为.wav。它是以RIFF(Resource Interchange File Format)的缩写。因此,每个WAVE文件的头四个字节便是“RIFF”

WAVE文件由WAVE文件头部分和WAVE文件数据体部分组成,其中0~43字节存放采样率、通道数、数据部分的标识符等头信息,44字节以后的就是数据部分。简单地理解就是PCM文件加一个文件头描述文件的基本信息

什么是分贝?

分贝除了用于声学领域之外,在NVH测量领域,到处可见分贝。它不是一个单位,它是个无量纲。我们经常在声学、振动、电子学、电信、音频工程&设计等领域见到它。

分贝最初使用是在电信行业,是为了量化长导线传输电报和电话信号时的功率损失而开发出来的。是为了纪念美国电话发明家亚历山大·格雷厄姆·贝尔(Alexander Graham Bell),以他的名字命名的。分贝定义为1/10贝尔(Bel)。

1.分贝定义
分贝(dB)定义为两个数值的对数比率,这两个数值分别是测量值和参考值(也称为基准值)。存在两种定义情况。

一种为功率之比: 1 d B = 10 log ⁡ 10 ( W W 0 ) 1dB=10\log_{10}(\frac{W}{W_0}) 1dB=10log10(W0W)

一种为幅值之比: 1 d B = 10 log ⁡ 10 ( X X 0 ) 2 = 20 log ⁡ 10 ( X X 0 ) 1dB=10\log_{10}(\frac{X}{X_0})^2=20\log_{10}(\frac{X}{X_0}) 1dB=10log10(X0X)2=20log10(X0X)

下标为0的数值均为幅值和功率的参考值。


  • 功率量的例子:声功率(W),声强( W / m 2 W/m^2 W/m2),电功率,电强等。
  • 幅值量的例子如:声压(Pa),电压(V),加速度( m / t 2 m/t^2 m/t2),温度等。但有一点要注意对于场量的幅值应该是RMS值,如声压场。

注:没有特殊要求时,参考值通常为1。

因为分贝值完全依赖于测量值与参考值之比,因此,计算时选择合适的参考值尤为关键。常见信号的dB参考值如下表所示:

2. 声音大小
在声学领域,dB经常用作为表征声压级SPL(Sound Pressure Level)的大小。

声压的参考值是20μPa,这个值表示人耳在1000Hz处的平均可听阈值,或者是人耳在1000Hz处可被感知的平均最小声压波动值。

声音是叠加在大气压之上的声压波动,大气压为 1.01325 × 1 0 5 P a 1.01325×10^5Pa 1.01325×105Pa。相比于大气压,声压幅值波动非常小。人耳可听的声压幅值波动范围为 2 × 1 0 − 5 P a 2×10^{-5}Pa 2×105Pa ~ 20 P a 20Pa 20Pa

这个声压幅值波动区间很大,二者的比值达到了 1 0 6 10^6 106。从线性角度来说这个声压幅值的波动区间,很不方便。

使用dB表示的声压级的概念,可以方便的反映出这个波动的幅值。

人类耳朵对声音强度的反应是成对数形式的,大概意思就是当声音的强度增加到某一程度时,人的听觉会变的较不敏锐,刚好近似对数的单位刻度。

人耳可听的声压幅值波动范围为 2 × 1 0 − 5 P a 2×10^{-5}Pa 2×105Pa ~ 20 P a 20Pa 20Pa,用幅值dB表示对应的分贝数为0 ~ 120dB,因此,当用分贝表示声压级的大小时,表征起来更为方便。现实世界中各种常见情况中声音分贝大小如下图:

请添加图片描述

3. dB的性质
贝尔最初是用来表示电信功率讯号的增益和衰减的单位,1个贝尔的增益是以功率在放大后与放大前的比值。所以,电压增益的分贝表达式是从功率的角度来考虑的,即分贝应该理解为功率的增大或衰减情况。

用对数dB形式表达增益之所以在工程上得到了广泛的应用,是因为:

  1. 当用对数dB表达增益随频率变化的曲线时,可大大扩大线性增益变化的区间。人耳可听的声压幅值波动范围为 2 × 1 0 − 5 P a 2×10^-5Pa 2×105Pa ~ 20 P a 20Pa 20Pa,而用幅值dB表示时对应的dB数值仅仅为0 ~ 120dB。

  2. 计算多级放大的总增益时,可将乘法化为加法进行运算。

  3. dB值可正可负。正值表示增大,负值表示衰减。若 X / X 0 < 1 X/X_0<1 X/X0<1,则dB值为负值。也就是说测量值大于参考值的为正,小于参考值的为负。

  4. 幅值比互为倒数时,dB值互为正负。这是因为: 20 log ⁡ 10 ( X 0 X ) = 20 log ⁡ 10 ( 1 X / X 0 ) = − 20 log ⁡ 10 ( X X 0 ) 20\log_{10}(\frac{X_0}{X})=20\log_{10}(\frac{1}{X/X_0})=-20\log_{10}(\frac{X}{X_0}) 20log10(XX0)=20log10(X/X01)=20log10(X0X)

  5. dB值与线性幅值比的关系如下表所示:
    请添加图片描述

    表中红色字体表示的是几个比较重要的dB值。像dB增大6dB表示线性幅值增大一倍

4. -3dB
-3dB在NVH领域起着其他值不可比拟的作用。

通过上表,-3dB对应的幅值比为0.708,即 2 / 2 \sqrt2/2 2 /2倍。如果是按功率比来计算,则功率比为1/2,也就是原来功率的一半,因此,-3dB称为“半功率点”

抗混叠滤波器是按幅值衰减0.707或者功率衰减一半所对应的频率作为滤波截止频率的。其它类型的滤波器,如高通、低通、带通和带阻滤波器的截止频率也是-3dB点

5. dB叠加
以声压级的叠加来进行说明。声压级的合成运算不是简单的加减运算,声压级不能直接相加,必须以能量形式相加计算,因此,声压级的合成公式如下:

L p r e s u l t = 10 ⋅ log ⁡ 10 ( 1 0 L p 1 10 + 1 0 L p 2 10 + . . . + 1 0 L p n 10 ) L_{presult}=10·\log_{10}(10^{\frac{L_{p1}}{10}}+10^{\frac{L_{p2}}{10}}+...+10^{\frac{L_{pn}}{10}}) Lpresult=10log10(1010Lp1+1010Lp2+...+1010Lpn)

若两个声压级 SPL1=SPL2=60dB,但两个声源是相关、同相位的,则合成后的声压级SPL为66dB,因为60dB对应0.02Pa,两个相加为0.04Pa,对应66dB。(但是现实很少有相关同相位的两个声源)


若任意两个声压级SPL1=SPL2,则合成后的声压级为: S P L 1 + 2 = S P L 1 + 10 log ⁡ 10 ( 2 ) = S P L 1 + 3 d B SPL_{1+2}=SPL_1+10\log_{10}(2)=SPL_1+3dB SPL1+2=SPL1+10log10(2)=SPL1+3dB

也就是说两个声压级相同,则合成后的声压级比之前大3dB。

声压级的分解通常用于修正背景噪声的影响,如噪声测量值 L m e a s u r e d L_{measured} Lmeasured 修正背景噪音 L B G N LBGN LBGN 的影响,不是简简单单地 L s o u r c e = L m e a s u r e d − L B G N Lsource =Lmeasured-LBGN Lsource=LmeasuredLBGN, 而是 L p r e s u l t = 10 ⋅ log ⁡ 10 ( 1 0 L p t o t a l 10 − 1 0 L p b a c k g r o u n d 10 ) L_{presult}=10·\log_{10}(10^{\frac{L_{ptotal}}{10}}-10^{\frac{L_{pbackground}}{10}}) Lpresult=10log10(1010Lptotal1010Lpbackground)

国际规范中关于背景噪声的修正原则如下图表示。当背景噪音与声源的声压级差值小于6dB时,测量无效;当二者差值位于6~15dB之间时需要修正,修正按以上公式修正;当二者差值大于15dB时,可忽略背景噪声对测量结果的影响。

相关文章:

语音识别相关概念

声音如何保存成数字信号&#xff1f; 声音是听觉对声波产生的感知&#xff0c;而声波是一种在时间和振幅上连续的模拟量&#xff0c;本质是介质的振动&#xff0c;&#xff0c;比如空气的振动。那么只需要把这个振动信号记录下来&#xff0c;并用一串数字来表达振动信号振动的…...

Iceberg与SparkSQL查询操作整合

前言 spark操作iceberg之前先要配置spark catalogs,详情参考Iceberg与Spark整合环境配置。 Iceberg使用Apache Spark的DataSourceV2 API来实现数据源和catalog。 使用SQL查询 查询的时候表要按照:catalog.数据库.表名的格式 SELECT * FROM prod.db.table; -- catalog: p…...

Linux 上安装 PostgreSQL

Linux 上安装 PostgreSQL PostgreSQL 是一款功能强大的开源关系数据库管理系统,因其稳定性、可扩展性和先进的功能而广受欢迎。在 Linux 系统上安装 PostgreSQL 是一个相对直接的过程,但具体步骤可能会因您使用的 Linux 发行版而异。本文将介绍在几种流行的 Linux 发行版上安…...

WRF-LES与PALM微尺度气象大涡模拟、PALM静态数据预备、PALM驱动数据预报、PALM模拟

查看原文>>>WRF-LES与PALM微尺度气象大涡模拟及ChatGPT在大气科学领域应用 针对微尺度气象的复杂性&#xff0c;大涡模拟&#xff08;LES&#xff09;提供了一种无可比拟的解决方案。微尺度气象学涉及对小范围内的大气过程进行精确模拟&#xff0c;这些过程往往与天气…...

需求分析概述

为什么要进行需求分析呢&#xff1f; 笑话&#xff1a;富翁娶妻 某富翁想要娶老婆&#xff0c;有三个人选&#xff0c;富翁给了三个女孩各一千元&#xff0c;请 她们把房间装满。第一个女孩买了很多棉花&#xff0c;装满房间的1/2。第 二个女孩买了很多气球&#xff0c;装满…...

Java | Leetcode Java题解之第391题完美矩形

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isRectangleCover(int[][] rectangles) {long area 0;int minX rectangles[0][0], minY rectangles[0][1], maxX rectangles[0][2], maxY rectangles[0][3];Map<Point, Integer> cnt new HashM…...

java项目之基于web的人力资源管理系统的设计与实现(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于web的人力资源管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; …...

Linux 防火墙:iptables (二)

文章目录 SNAT 原理与应用SNAT 应用环境SNAT 原理SNAT 转换前提条件SNAT 格式SNAT 转换规则配置 DNAT 原理与应用DNAT 应用环境DNAT 原理DNAT 转换前提条件DNAT 格式DNAT 转换规则配置 iptables 规则的备份和还原导出&#xff08;备份&#xff09;所有表的规则导入&#xff08;…...

小目标检测顶会新思路!最新成果刷爆遥感SOTA,参数小了18倍

遥感领域的小目标检测一直是个具有挑战性和趣味性的研究方向&#xff0c;同时也是顶会顶刊的常客。但不得不说&#xff0c;今年关于遥感小目标检测的研究热情尤其高涨&#xff0c;已经出现了很多非常优秀的成果。 比如SuperYOLO方法&#xff0c;通过融合多模态数据并执行高分辨…...

【Ubuntu】虚拟机安装USB摄像头ROS驱动 usb_cam(最新方法)

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…...

免费的成绩查询微信小程序,让家长轻松掌握学生表现

传统的教学方式在不断地被革新。在成绩查询这一环节&#xff0c;老师们曾经面临着繁琐的手工操作和信息安全的风险。可现如今有一个让成绩查询变得轻松、高效且安全的新工具——易查分。 过去需要花费大量时间来整理成绩&#xff0c;然后通过短信或者打电话的方式告知给家长。以…...

[含视频和源码]CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(三)

关说不练假把式&#xff0c;在上一&#xff0c;二篇中介绍了我心目中的CRUD的样子 基于之前的理念&#xff0c;我开发了一个命名为PasteTemplate的项目&#xff0c;这个项目呢后续会转化成项目模板&#xff0c;转化成项目模板后&#xff0c;后续需要开发新的项目就可以基于这…...

如何把我另一个分支上的commit拿过来

在开源过程中&#xff0c;每一次PR都是要经过严格的review的&#xff0c;这期间可能会进行多次修改&#xff0c;补充提交&#xff0c;而且这一般来说不是一个很迅速的过程&#xff0c;此时我们可能会先往后进行开发。我一般会把项目分模块逐步建立分支&#xff0c;当前一个pr合…...

【rpg像素角色】俯视角-行走动画

制作像素角色的俯视角行走动画并不像看上去那么复杂&#xff0c;尤其是在你已经完成了角色的4个方向站立姿势之后&#xff08;其中左右方向可以通过水平翻转实现&#xff09;。接下来&#xff0c;我会一步步为你讲解如何制作行走动画。 1. 理解行走规律 在制作行走动画之前&am…...

Python时间序列分析新技能,轻松掌握时间索引

大家好&#xff0c;在数据分析领域&#xff0c;时间序列数据分析是一项非常重要的技能。Pandas作为Python中强大的数据处理库&#xff0c;在处理时间序列数据时提供了丰富的功能&#xff0c;其中时间索引的应用是时间序列分析中的关键。本文将介绍如何在Pandas中使用时间索引进…...

sklearn-逻辑回归-特征工程示例

sklearn-逻辑回归-特征工程示例 在实际应用场景中&#xff0c;有时候特征的数量会很多&#xff0c;我们出于业务考虑&#xff0c;也出于计算量的考虑&#xff0c;希望对逻辑回归进行特征选择来降维。比如在判断一个人是否会患乳腺癌的时候&#xff0c;医生如果看58个指标来确诊…...

RTMP播放器延迟最低可以做到多少?

技术背景 RTMP播放器的延迟可以受到多种因素的影响&#xff0c;包括网络状况、推流设置、播放器配置以及CDN分发等。因此&#xff0c;RTMP播放器的延迟并不是一个固定的数值&#xff0c;而是可以在一定范围内变化的。 正常情况下&#xff0c;网上大多看到的&#xff0c;针对R…...

细致刨析JDBC ① 基础篇

目录 一、JDBC概述 1.JDBC的概念 ​编辑2.JDBC的核心组成 ① 接口规范: ② 实现规范: 二、JDBC快速入门 1.JDBC搭建步骤 三、核心API理解 1.注册驱动 2.Connection 3.Statement 4.PreparedStatement 5.ResultSet 四、基于Preparedment实现CRUD 1.查询单行单列 2.查询单行…...

Reactive 编程-Loom 项目(虚拟线程)

Reactive 编程与 Loom 项目&#xff08;虚拟线程&#xff09; Java 项目 Loom 是 Oracle 在 JVM 上的一项重大变革&#xff0c;旨在引入 虚拟线程&#xff08;Virtual Threads&#xff09;&#xff0c;以简化并发编程。传统的 Java 线程是重量级的&#xff0c;由操作系统管理&…...

Windows下使用MinGW编译安装zmq的步骤

背景&#xff1a; 在开发过程中&#xff0c;需要使用zmq库进行数据交互&#xff0c;因此需要编译zmq库。 安装步骤 软件下载 https://github.com/zeromq/libzmq.git 下载&#xff0c;将代码切换到git checkout 4c6cff6391分支 软件编译 cd .\libzmq\ mkdir build cd .\bu…...

电商云账户分账系统:打造高效资金流转体系

在当今的电子商务时代&#xff0c;随着消费者购物习惯的转变和在线交易量的激增&#xff0c;电商平台的运营模式也日趋复杂。为了满足多商家共存、利益共享的需求&#xff0c;电商分账成为了一个至关重要的环节。 电商分账是指电商平台在销售商品或服务后&#xff0c;根据事先…...

设计模式 -- 单例设计模式

1.1 单例 创建一个单例对象 SingleModel , SingleModel 类有它的私有构造函数和本身的一个静态实例。 SingleModel 类提供了一个静态方法&#xff0c;供外界获取它的静态实例。 DesignTest 我们的演示类使用 SingleModel 类来获取 SingleModel 对象。 创建 Single…...

python fastapi 打包exe

创建虚拟环境 python -m venv 国内依赖仓库 # 换源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set install.trusted-host mirrors.aliyun.com 安装nuitka pip install nuitka 生成exe nuitka --mingw64 --show-progress --s…...

【测试开岗面试】知识点总结

1.知识点总结 Q:请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试 单元测试 (Unit Testing) 单元测试是对软件中最小可测试单元&#xff08;通常是函数或方法&#xff09;进行验证的过程。它的目的是确保每个单元在设计时的功能能够正常运行。单元测试通常由…...

【高级编程】synchronized 解决并发问题 类的线程安全类型

文章目录 并发问题同步方法同步代码块 线程安全类型ArrayListHashtableHashMapVector 多线程共享数据引发的问题 模拟 “A” “B” “C” 三人抢票&#xff0c;总票数10张&#xff0c;打印抢票情况以及剩余票数。 public class Site implements Runnable {int count 10; // …...

Speculative RAG:为知识密集型数据服务的RAG

论文链接 RAG的一个棘手问题是不知道该召回多少chunk&#xff0c;少了可能丢信息&#xff0c;多了会引入噪声信息。虽然有self-reasoning等自我反思的解决办法&#xff0c;但是整体链路太长&#xff0c;延迟高&#xff0c;不利于工业落地。 虽然无法面对整个服务场景&#xff…...

[Go]-抢购类业务方案

文章目录 要点&#xff1a;1. 抢购/秒杀业务的关键挑战2. 技术方案3.关键实现点4.性能优化建议5.其他考虑因素 细节拆分&#xff1a;1. **高并发处理**2.**限流与防护**3.**库存控制**4. **异步处理**5. **数据一致性**6. **常用架构设计**7. **代码示例**8. 进一步优化9. 注意…...

Android 源码多个Launcher设置默认Launcher

目录 第一部分、android10之前 一.多个launcher 启动设置默认launcher的核心类 二 在自定义服务里面设置默认Launcher 第二部分、android10之后 一、Launcher应用内置并设置为默认Launcher 1.通过ResolverActivity.java设置为默认Launcher 改法一&#xff1a; 改法二&am…...

计算机毕业设计 网上体育商城系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

深度学习中实验、观察与思考的方法与技巧

在深度学习中&#xff0c;实验、观察与思考是理解和改进模型性能的关键环节。以下是一些有效的方法与技巧&#xff0c;可以帮助你在深度学习实践中系统性地开展实验、分析结果并进行深入思考&#xff1a; 1. 明确实验目标 在开始实验前&#xff0c;确保对实验的目标有清晰的定…...