分贝和百分比之间的关系

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

 

以上是关于分贝和百分比之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

详细介绍一下查准率与查全率的概念及之间的关系

磁盘 分区 lvm之间await util的统计关系

删除饼图图例中名称和百分比之间的空格 (amcharts4)

audition中表示声音大小的db是啥意思,为啥上下都用0表示?

透明度百分比和十六进制对应关系

pandas使用pct_change函数计算数据列的百分比变化:计算当前元素和前一个元素之间的百分比变化(包含NaN值的情况以及数据填充方法)