分贝和百分比之间的关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分贝和百分比之间的关系相关的知识,希望对你有一定的参考价值。
信号强度从百分比到分贝的转换Radio Frequency(RF)信号强度测量单位
有四种测量单位可以用来表示RG信号强度。分别为:nw(milliwatts),dBm(db-milliwatts),RSSI(Received Signal Strength Indicator,接收的信号强度指示)以及百分比。所以的测量单位都是两两相关的,而且可以相互转换(存在不同程度的精度)。
mw和dBm的测量单位
相信这个大家并不陌生。通常我们衡量RF能量大小都是以 mw 为单位的,但并不方便,着不仅是以为信号强度值不是呈线性衰减,而是符合平方反比定律(inverse square law)。即如果移动2倍的距离,对应的信号强度将衰减为原来的1/4。这也是为什么引入指数的测量方式的其中一个原因。分贝,就是对信号强度的对数测量方式。mw值将转换为以10为底的对数,而因为其值很小,所以把结果再乘以10。举例:

转换公式为:

RSSI(接收的信号强度指示)
IEEE标准定义了一种机制来衡量无线网卡接收到的RF能量值。其数值为0~255的整数,即我们所说的RSSI.当然没有厂商真把信号值分成256个不同等级,但是每个厂商都指明了自己NIC的最大RSSI值(RSSI_MAX),比如Symbol使用RSSI_MAX=31(Atheros的为60)。注意这里说的完全跟 mw和dBm没有关系。RSSI是定义在802.11标准的任意整数,供本地/内部(Internally)使用,比如用于设备驱动开发等。比如,当适配器要发送一个包,它必须检查当前信道是否可用(clear),如果RSSI值小于某个值,那么芯片就知道信号时可用的,这个值就成为"Clear Channel Threshold",并赋予某个具体RSSI值。同样还有"Roaming Threshold“,不同的厂商,这两个值是不同的,因为它们定义了不同的RSSI_MAX.所以RSSI值只能以一种相对方式使用,没有决定的精确值。 参考技术A 分贝单位的换算关系
1.4 电磁分贝单位的定义及换算关系
分贝(dB)表示两参量的倍率关系,通常用来表示变化范围很大的数值关系。两个功率比值的分贝定义为
[dB]=101g(P1/P2)
其中,P1为某一功率电平;
P2为比较的基准功率电平。
如果以P2=1W作为基准功率,式(1.1)的分贝值就表示P1功率相对于1W的倍率,用符号dBW表示,它可以用来作为功率的单位,称为瓦分贝。功率单位W和dBW的关系为
PdBW=101g(Pw/1)=101gPw
式中,PdBW为以dBW作单位的功率电平;
PW为以W作单位的功率电平。
如果式(1.1)中用P2=1mW作为功率基准,P1的分贝值就用符号dBm表示其单位,称为毫瓦分贝。dBm和W的关系为
PdBm=101g(Pw/10¯3)=101gPw+30dBm
如果式(1.1)中用P2=1uW作为参考基准功率,P1的分贝值单位就用dBuW表示,称为微瓦分贝。dBW,dBm, dBuW,与W的换算关系为
PdBW=101gPW(dBW)
PdBm=101gPW+30(dBm)
PdBuW=101gPW+60(dBuW)
表1-2列出了用dBm为单位和以W为单位的功率之间的换算关系。
表1-2 以dBm,为单位和以W为单位的功率值换算对照表
例如表1-2中10W对应的dBm单位功率为40 dBm,即10W=40 dBm,它们的换算关系为
PdBm=101g10+30=40(dBm)
在电磁兼容工程中除了功率习惯用分贝单位表示以外,电压、电流和场强也都常用分贝单位表示。
(1) 电压的分贝单位
电压的分贝单位表示为
[dB]=201g(V1/V2)
式中,V2为基准电压。分贝值表示V1相对于V2的比值的对数函数,反映V1和V2两个电压的倍率关系。 参考技术B 常常听见「这个噪音超过多少分贝」、「这个音量有多少分贝」等,来表示音量的大小声,在音响系统中的「分贝」什么不同呢?
由于人类对音量的听觉范围非常大,彼此之间能量相差可达数百万倍;再加上对于人类音量的感知会随着音量变大声而越来越不敏感。透过「分贝」的转换,可以将这样巨大的数字转换成数十至数百的数值,不仅方便呈现,而且对于音量的描述也更加直觉。
比值
分贝最基本的概念是比值,必须有一个数值作为参考值才能做比较。假设一个弹珠的高度 1 公分为参考值,小明的身高为 170 公分,比值就是 170;如果与高塔 ( 500 公尺 ) 相比,比值就是 50000。
分贝
透过分贝转换可以将很大的比值转化成较简单的数字。同样以弹珠 1 公分的高度为参考值,小明的身高是 +22.3 dB,高塔的高度就是 +46.9 dB。
数值与参考值相同,分贝值等于 0 。
数值比参考值小,分贝值小于 0 。
数值比参考值大,分贝值大于 0 。
这个声音多大声?- 声压级(SPL)
在我们日常生活中形容声音「多大声?」或是「这个声音多少分贝?」就是使用到「声压级」的标准。在声压级当中,将人类可以听见的「最小声压」为参考值(这个音量就是 0 分贝),所以其他声音的音量都是大于 0 的数值。因为我们人类无法听见比这个再更小的声音了。
音响系统使用的单位 – dBu
在专业音响系统当中,以讯号值 0.775V 作为参考值;如果声音讯号介于 0 ~ 0.775V 之间,分贝值就会「小于 0」,声音讯号大于 0.775V 以上分贝值就会「大于 0 」。一般音响系统的设计,最大音量分贝值大约在 +18 ~ +24dBu 左右,超过就会产生破音与失真的情况。
数字讯号的标准 – dBFS
在数字讯号中,只要音量超过数值可以记录的范围就一定会产生破音失真的情形,所以在数字讯号中,将「最大且没有失真的音量」作为参考值(也就是 0 dBFS),所有大于 0 dBFS 的声音一定是破音失真的声音,而没有失真的声音一定是小于参考值的,分贝值就会「小于 0」。
dBFS 与 dBu
在数字设备当中所使用的刻度为 dBFS表,是看不到 +4dBu 这样的数值的。由于每台设备设计的标准不相同,一般数字装置输出 +4dBu 的音量大约会在 -18 ~ -24dBFS 左右。
音量准位校正
当我们连接许多设备的时候,为了确保讯号音量的统一,我们会使用频率 1kHz 音量 +4dBu 的正弦波来校准设备间的音量准位,透过增益旋钮补偿导线连接造成的音量衰减,让每一个设备的音量范围设为一致,才不会造成有些设备已经接近破音音量了,声音还是加不上去的情况。 参考技术C hlh0800840201
03-21 22:44
等级
1次回复
音量百分比与分贝的关系
bool WINAPI SetVolume(long dev,long vol)//设置设备的音量
// dev =0,1,2 分别表示主音量,波形,MIDI ,LINE IN
// vol=0-100 表示音量的大小 , 设置与返回音量的值用的是百分比,即音量从0 - 100,而不是设备的绝对值
// retrun false 表示设置音量的大小的操作不成功
// retrun true 表示设置音量的大小的操作成功
语音和分贝数关系
语音和分贝有关系,分贝和傅里叶变换有关系,所以在语音拾取的时候降低语音的敏感度,可以通过过滤指定分贝数拾取语音,可以理解为过滤噪音
private bool IsUserfulVoice(byte[] data) { double[] wave = new double[data.Length / 2]; int h = 0; for (int i = 0; i < wave.Length; i += 2) { wave[h] = (double)BitConverter.ToInt16(data, i); //采样位数为16bit ++h; } double[] res = VoiceTransformer.FourierTransformer.FFTDb(wave); double kk = 0; foreach (double dd in res) { kk += dd; } if (kk < 0) { kk = 0; } if ((kk / res.Length) > 42.0) { return true; } return false; } public static class FourierTransformer { public static double[] FFTDb(double[] source) { int sourceLen = source.Length; int nu = (int)(Math.Log(sourceLen) / Math.Log(2)); int halfSourceLen = sourceLen / 2; int nu1 = nu - 1; double[] xre = new double[sourceLen]; double[] xim = new double[sourceLen]; double[] decibel = new double[halfSourceLen]; double tr, ti, p, arg, c, s; for (int i = 0; i < sourceLen; i++) { xre[i] = source[i]; xim[i] = 0.0f; } int k = 0; for (int l = 1; l <= nu; l++) { while (k < sourceLen) { for (int i = 1; i <= halfSourceLen; i++) { p = BitReverse(k >> nu1, nu); arg = 2 * (double)Math.PI * p / sourceLen; c = (double)Math.Cos(arg); s = (double)Math.Sin(arg); tr = xre[k + halfSourceLen] * c + xim[k + halfSourceLen] * s; ti = xim[k + halfSourceLen] * c - xre[k + halfSourceLen] * s; xre[k + halfSourceLen] = xre[k] - tr; xim[k + halfSourceLen] = xim[k] - ti; xre[k] += tr; xim[k] += ti; k++; } k += halfSourceLen; } k = 0; nu1--; halfSourceLen = halfSourceLen / 2; } k = 0; int r; while (k < sourceLen) { r = BitReverse(k, nu); if (r > k) { tr = xre[k]; ti = xim[k]; xre[k] = xre[r]; xim[k] = xim[r]; xre[r] = tr; xim[r] = ti; } k++; } for (int i = 0; i < sourceLen / 2; i++) { decibel[i] = 10.0 * Math.Log10((float)(Math.Sqrt((xre[i] * xre[i]) + (xim[i] * xim[i])))); } return decibel; } private static int BitReverse(int j, int nu) { int j2; int j1 = j; int k = 0; for (int i = 1; i <= nu; i++) { j2 = j1 / 2; k = 2 * k + j1 - 2 * j2; j1 = j2; } return k; } }
值得注意的是,拾取语音的Byte数组要为2的N次方长度,这个由快速FFT算法决定
引用自:http://www.cnblogs.com/zhuweisky/p/3269896.html
以上是关于分贝和百分比之间的关系的主要内容,如果未能解决你的问题,请参考以下文章
删除饼图图例中名称和百分比之间的空格 (amcharts4)
audition中表示声音大小的db是啥意思,为啥上下都用0表示?
pandas使用pct_change函数计算数据列的百分比变化:计算当前元素和前一个元素之间的百分比变化(包含NaN值的情况以及数据填充方法)