1. 采样频率如何降低
用一麦克风录制的PCM数据,为16bit、48KHz、单声道,而我希望得到的是16KHz采样率的PCM数据,那就通过降低采样率的方法,去实现48000HZ到16000HZ采样率的转换。
转换原理比较简单,48000HZ降到16000HZ,实际上降了3倍,同一时间的单位区间内,48000HZ采样了3个点,16000HZ则采样了1个点,即从48000HZ的文件中每读取3个数据,就要根据这3个数据去推算得到1个数据,而这个数据对应的就是16000HZ文件中的一个数据。
这里写图片描述
具体实现如下
C语言实现
#define OLD_FILE_PATH "file.pcm"
#define DOWN_FILE_PATH "downsample.pcm"
void pcm_downsample(void)
{
short sRead = 0;
short tempSum = 0;
int size = 0;
int flag = 0;
FILE *fp = fopen(OLD_FILE_PATH, "rb+");
FILE *fp_down = fopen(DOWN_FILE_PATH, "wb+");
while(!feof(fp))
{
size = fread(&sRead, 2, 1, fp); // 一次读两个字节,16bit
if(size>0)
{
tempSum = tempSum + sRead; // 求和
flag++;
if(flag == 3) // 如果取了三个点
{
flag = 0;
tempSum = tempSum/3; // 求平均值,你可以根据自己需要去修改,不一定要求平均值,可以直接取一个点
fwrite(&tempSum, 2, 1, fp_down);
tempSum = 0;
}
}
}
fclose(fp);
fclose(fp
这里我将3个点转换成1个点的算法,是求取平均值的算法,你可以利用其他算法去转换也可以,如果想降低成其他采样率的,只要按照对应的比例去采样,即可。
2. 如何理解 重要性采样
重要性采样算法就是在有限的采样次数内,尽量让采样点覆盖对积分贡献很大的点。
其目标是用一种受控的方式改变仿真,以便增加稀少事件的数目,同时还能正确地确定解调差错概率。常规重要性采样(CIS)是一种降方差的仿真方法,它通过提供有偏噪声来实现,等效于使系统工作在一个较低的信噪比环境下。
3. 百度识图的核心技术是什么
网络识图的核心技术原理:
对于这种网络,谷歌的图像搜索一般由算法实现,一般是三个步骤:
1. 将目标图片进行特征提取,描述图像的算法很多,用的比较多的是:SIFT描述子,指纹算法函数,bundling features算法,hash function(散列函数)等。也可以根据不同的图像,设计不同的算法,比如图像局部N阶矩的方法提取图像特征。
2. 将图像特征信息进行编码,并将海量图像编码做查找表。对于目标图像,可以对分辨率较大的图像进行降采样,减少运算量后在进行图像特征提取和编码处理。
3. 相似度匹配运算:利用目标图像的编码值,在图像搜索引擎中的图像数据库进行全局或是局部的相似度计算;根据所需要的鲁棒性,设定阈值,然后将相似度高的图片预保留下来;最后应该还有一步筛选最佳匹配图片,这个应该还是用到特征检测算法。
其中每个步骤都有很多算法研究,围绕数学,统计学,图像编码,信号处理等理论进行研究。
4. 压缩采样的算法是怎么描述的
ADPCM(Adaptive
Differential
Pulse
Code
Molation),是一种针对
16bits(
或8bits或者更高)
声音波形数据的一种有损压缩算法,它将声音流中每次采样的
16bit
数据以
4bit
存储,所以压缩比
1:4.
而且压缩/解压缩算法非常简单,所以是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件后缀名为
.AUD
的大多用ADPCM
压缩。
ADPCM
主要是针对连续的波形数据的,保存的是波形的变化情况,以达到描述整个波形的目的,由于它的编码和解码的过程却很简洁,列在后面,相信大家能够看懂。
8bits采样的声音人耳是可以勉强接受的,而
16bit
采样的声音可以算是高音质了。ADPCM
算法却可以将每次采样得到的
16bit
数据压缩到
4bit
。需要注意的是,如果要压缩/解压缩得是立体声信号,采样时,声音信号是放在一起的,需要将两个声道分别处理。
PCM是脉冲编码调制的意思。AD是自适应增量的意思。
严格说来,ADPCM不是压缩方法。他的主要思想是,用差值替代绝对值。举个例子,全班同学平均身高175CM:其中,我的身高170CM,这就是PCM方法;我的身高和平均值相比为-5cm,这就是DPCM,我的身高跟前一位同学相比为-10CM,前一位同学有多高我不知道他多高,你问他,这是ADPCM。比方不是太准确,大概就是这个意思。
在大多数情况下,数据值与平均值相差不大,所以用差值替代绝对值可以节省空间。
很高兴回答楼主的问题
如有错误请见谅
5. 百度图片搜索引擎原理是如何实现的
图片搜索的原理有三个步骤
1. 将目标图片进行特征提取,描述图像的算法很多,用的比较多的是:SIFT描述子,指纹算法函数,bundling features算法,hash function(散列函数)等。也可以根据不同的图像,设计不同的算法,比如图像局部N阶矩的方法提取图像特征。
2. 将图像特征信息进行编码,并将海量图像编码做查找表。对于目标图像,可以对分辨率较大的图像进行降采样,减少运算量后在进行图像特征提取和编码处理。
3. 相似度匹配运算:利用目标图像的编码值,在图像搜索引擎中的图像数据库进行全局或是局部的相似度计算;根据所需要的鲁棒性,设定阈值,然后将相似度高的图片预保留下来;最后应该还有一步筛选最佳匹配图片,这个应该还是用到特征检测算法。
其中每个步骤都有很多算法研究,围绕数学,统计学,图像编码,信号处理等理论进行研究。
根据Neal Krawetz博士的解释,原理非常简单易懂。我们可以用一个快速算法,就达到基本的效果。
这里的关键技术叫做"感知哈希算法"(Perceptual hash algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。下面是一个最简单的实现:
第一步,缩小尺寸。
将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。
第二步,简化色彩。
将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。
第三步,计算平均值。
计算所有64个像素的灰度平均值。
第四步,比较像素的灰度。
将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
第五步,计算哈希值。
将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。
得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。在理论上,这等同于计算"汉明距离"(Hammingdistance)。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。
具体的代码实现,可以参见Wote用python语言写的imgHash.py。代码很短,只有53行。使用的时候,第一个参数是基准图片,第二个参数是用来比较的其他图片所在的目录,返回结果是两张图片之间不相同的数据位数量(汉明距离)。
这种算法的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。如果在图片上加几个文字,它就认不出来了。所以,它的最佳用途是根据缩略图,找出原图。
实际应用中,往往采用更强大的pHash算法和SIFT算法,它们能够识别图片的变形。只要变形程度不超过25%,它们就能匹配原图。这些算法虽然更复杂,但是原理与上面的简便算法是一样的,就是先将图片转化成Hash字符串,然后再进行比较。
6. 数据挖掘不同领域中的采样方法有哪些
1,关联规则的采样
挖掘关联规则的任务通常与事务处理与关系数据库相关,该任务需要反复遍历数据库,因此在大数据集上将花费大量的时间。有很多的算法可以改进关联规则算法的效率与精度,但在精度保证的前提下,采样是最直接与最简单的改进效率的方法。
2.分类的采样
分类一般分为三种类型:决策树、神经网络及统计方法(如无偏差分析),在这些算法中均有使用采样的案例。分类的采样一般有四种,一种是随机采样,另外三种是非随机采样,分别是“压缩重复”、“窗口”及“分层”。
3.聚类的采样
在聚类中进行采样有若干的用途。有些聚类算法使用采样进行初始化工作,例如,利用采样得到的样本得到初始化的参数,然后再对大数据集进行聚类。当处理大数据集时,需要降低算法使用的空间。为了得到较好的聚类,根据数据的分布情况需要采用不同的采样方法。随机采样仍然是一种常规的方法,在随机采样忽略了小的聚类的情况下,一般采用非随机采样的方法。非随机采样的方法中最常用的是分层采样。例如,在密度差别很大的数据集中,根据密度的不同,采样的样本数量可以不同,在密度较高的区域采样的次数少一些,而在密度稀疏的区域,采样的次数多一些。
4.扩充(Scaling-Up)的数据挖掘算法的采样
扩充是指利用已有的数据挖掘算法能够高敛地处理大数据集。当数据挖掘的算法初期是处理小数据集的情况下,处理大数据集就会受到限制。在这种情况下,一般会采用分而抬之的方法:将大数据集分解成较小的互不重叠的数据集,利用己有算法进行处理,然后,将小数据集得出的结果合并成最终的结果。需要注意的是,这种方法等价于将困难转嫁到合并步骤,即需要复杂的处理才能得到正确的结果。因此,整体的复杂性没有降低。
7. 离散小波变换 数据量减半
"可以将其看出一个滤波器组后边带降采样滤波器啊"看个屁呀,在经典的参考书中从来没有将下采样当作滤波器操作看待(小波中叫抽样率转换器,分为抽取器和插值器),下箭头2就是一种抽取操作(可以叫做抽取器),就是保存数据中下标索引编号为偶数的元素,例如有7个数,保存其中第2,4,6个数。与滤波器半毛的关系都没有,不是任何的操作非要和滤波器扯上关系的,滤掉一半数据就算滤波器?抽样都算滤波器?很无语。
小波工具箱显示的结果是DWT重构后的信号,不是小波系数,小波系数的数据量是减半的,重构后各阶的结果都与原信号等长(主要是先补零插值再通过重构高,低频重构滤波器得到恢复补零后的波形,即去掉补零后引起的镜像谱)。DWT的一个优势就是可以进行小波重构(逆变换),把没有量纲的小波系数变成有实际量纲意义的信号,这是mallat算法带来的好处,不像CWT的逆变换难以计算或根本就没有逆变换,所以CWT没有重构函数。
你的提问越来越弱了,建议先找些靠谱的书看。还有最好直接向我求助提问,不然像这样有其他人回答后,我就再也刷不出你的提问了,看不到可能就错过了,你就永远白等下去了。
8. 求问游戏中的超级采样是什么意思
超级采样是一种技术,可以让你的游戏看起来更逼真,更具有画质感,而且不用更换你的显示器。
如果点进某个喜欢的游戏的设置菜单,会看到一个抗锯齿的选项叫做SSAA,其中SS的意思是超级采样。其实它的原理是这样的:
如果显卡被这样设置,使用比显示器更高的分辨率来渲染游戏,那么就会降采样以保证图形尺寸合适。在采样的过程中,显卡将会采集几个不同像素的色彩值,然后加以平均,最后生成单色赋予每个像素。这些像素随后被直接显示,这样一来显示器就可以直接显示,但是这种显示会显得非常不自然,有些人觉得很好。
相比显示器原生分辨率下渲染的单一色彩值,平均多个色彩这个过程,可以使图像看起来更加平滑。如果对比色彩突变还有物体边缘附近粗糙的锯齿这种情况,效果尤其明显。如果有兴趣试一试,你可以在其设置菜单里,允许在SSAA或者更高的分辨率之间做出选择。
(8)LTTB降采样算法扩展阅读:
超级采样需要有一张性能强劲的显卡:
因此,如果没有一块足够强大的显卡,超采样可能会让你游戏的帧率大幅度降低,这样反而会影响游戏体验,甚至游戏如幻灯片一样没办法玩。这就是为什么视觉效果较差但是处理负担更小的抗锯齿方法比如FXAA通常更受玩家欢迎。但是如果电脑有足够强的性能,可以试试超采样。
9. 图像金字塔除了sift算法之外还有什么应用
尺度空间的目的是‘见森林又能见树木’,墨迹一点的解释就是,在低尺度下可以看清楚很多细节,在高尺度下可以看到轮廓。
在目标检测领域,图像中的物体通常很可能是远近不一,大小不一的,可以利用金字塔来检测不同尺度下的物体。但同时你也可以使用不同大小的sliding window在原图上做检测。
在SIFT提取的时候,因为template上的局部特征跟目标图像上的实际特征可能存在尺度上的差异,使用尺度空间是为了达到‘尺度不变性’。我觉得前不久出来的DSP-SIFT其实也是进一步利用尺度空间来构造更强的descriptor的例子。
在一些边缘检测算法里面,为了忽略比较弱的边,也会利用尺度空间来进行降采样(对,高斯滤波大部分时候被理解成某种去噪/平滑操作,其实也是尺度空间思想)。
在一些基于特征的分类和识别问题里面,也有尺度空间的影子。比如基于高维LBP的人脸识别,其中LBP直方图的提取方式就蕴含有尺度空间的思想。
尺度空间的想法其实非常直观(当然证明它为什么那样构造可能会比较费事),但是因为尺度空间的构造和操作往往也是算法里面比较费时的地方,所以针对性的优化也应该说一下。
比如前面说的目标检测,有些情况下目标的变化尺度范围实际上是非常有限的,此时应该适当的设定尺度的数量,来减少不必要的计算量。比如你可以只降采样三次,你也可以降采样八次,去最上面的三个尺度。后者的好处是……快。
比如OpenCV里SIFT的实现默认是上采样一次,降采样至无法再缩小为止。很多时候你其实不需要这么精细的特征点或这么high level的特征点,也许稍微改一下参数就可以优化一些速度回来。这里也需要提一下SURF的反向模拟尺度空间的思路,跟上面提到的高维LBP的思路如出一辙。
在点特征里面,有时候你希望你的点在整个尺度空间里都是很强的,不是那种在最开始还是一个比较强的特征点,尺度高了之后这个特征点就消失了。你希望你只处理那些从始至终都比较坚挺的特征点,那你就可以在金字塔的顶层提取特征点,然后只是在下面的层进行局部搜索验证……这样你可以一边提取着非常鲁棒的descriptor,一边还快如闪电……
视觉里面很多看似直观且简单的东西往往有层出不穷用法,除了这金字塔,还有比如直方图,比如二值化,比如卷积,比如积分图,比如距离变换……等等等等。虽然都不是什么高级的东西,一但用到巧处,也耐人寻味啊。
10. 自动驾驶是怎样工作的SLAM介绍
SLAM是机器人或车辆建立当前环境的全局地图并使用该地图在任何时间点导航或推断其位置的过程。
SLAM常用于自主导航,特别是在GPS无信号或不熟悉的地区的导航。本文中我们将车辆或机器人称为“实体”。实体的传感器会实时获得周围环境的信息,并对信息进行分析然后做出决策。
SLAM是一种时间模型,它的目标是从复杂的信息中计算出一系列状态,包括预期环境,距离,以及根据之前的状态和信息得出的路径 。有许多种状态,例如,Rosales和Sclaroff(1999)使用状态作为行人边界框的3D位置来跟踪他们的移动。Davison 等人(2017)使用单目相机的相机位置,相机的4D方向,速度和角速度以及一组3D点作为导航状态。
SLAM一般包含两个步骤,预测和测量。为了准确表示导航系统,SLAM需要在状态之间以及状态和测量之间进行学习。SLAM最常用的学习方法称为 卡尔曼滤波 。
卡尔曼滤波是一种用于状态估计的贝叶斯滤波类型。它是一种递归算法,作为系统中不确定性的函数,使预测可以随着时间的推移进行校正。不确定性表示为当前状态估计和先前测量之间的权重,称为卡尔曼增益。该算法将实体先前的状态,观测和控制输入以及当前的观测和控制输入作为输入。过滤器包括两个步骤:预测和测量。预测过程使用运动模型,可以根据给定的先前位置和当前的输入估计当前位置。测量校正过程使用观察模型,该模型基于估计的状态,当前和历史观察以及不确定性来对当前状态进行最终估计。
第一步涉及了时间模型,该模型基于先前的状态和一些噪声生成预测。
公式1. 预测模型。μ表示状态的平均变化向量。ψ是状态数量的矩阵,将当前状态与先前的平均值相关联。ε是转换噪声,可以确定当前状态与前一个状态的紧密相关程度。
第二步是“校正”预测。传感器收集自主导航的测量值。有两类传感器:外传感器器和内传感器(proprioceptive)。外传感器从外部环境中收集信息,包括声纳,距离激光,相机和GPS。在SLAM中,这些是观察值。内传感器利用编码器,加速度计和陀螺仪等设备收集系统内部信息,如速度,位置,变化和加速度。在SLAM中,这些是单元控制,传感器结果输入到实体中进行计算。这些传感器各有利弊,但相互组合可以产生非常有效的反馈系统。
公式2. μₘ表示测量平均向量。Φ是状态数量的将测量的平均值与当前状态相关联。εₘ是测量噪声,通常以协方差Σₘ分布。
卡尔曼增益增强了测量的可信性。例如,如果相机失焦,我们就不会对拍摄内容的质量报太大期望。卡尔曼增益较小意味着测量对预测的贡献很小并且不可靠,而卡尔曼增益较大则正好相反。
公式 3.卡尔曼增益计算,Σ₊是预测的协方差。
更新过程如下:
公式4. 使用卡尔曼增益的卡尔曼滤波学习过程。图片来自Simon JD Prince(2012)。
虽然这种方法非常有用,但它还存在一些问题。卡尔曼滤波假定单模态分布可以用线性函数表示。解决线性问题的两种方法是扩展卡尔曼滤波器(EFK)和无迹卡尔曼滤波器(UFK)。EFK使用泰勒展开来逼近线性关系,而UFK使用一组质量点近似表示正态,这些质量点具有与原始分布相同的均值和协方差。一旦确定了质量点,算法就通过非线性函数传递质量点以创建一组新的样本,然后将预测分布设置为正态分布,均值和协方差等效于变换点。
由卡尔曼滤波强加的单模分布假设意味着不能表示其他状态假设。粒子滤波是解决这些问题的常用方法。
粒子滤波允许通过空间中的粒子来表示多个假设,高维度需要更多粒子。每个粒子都被赋予一个权重,该权重表示其所代表的状态假设中的置信度。预测从原始加权粒子的采样开始,并从该分布中采样预测状态。测量校正根据粒子与观测数据的一致程度(数据关联任务)来调整权重。最后一步是对结果权重进行归一化,使总和为1,因此它们是0到1的概率分布。
因为粒子的数量可以不断增多,因此对该算法的改进集中在如何降低采样的复杂性。重要性采样和Rao-Blackwellization分区是常用的两种方法。
下图来自Fuentes-Pacheco, J., Ruiz-Ascencio, J., & Rendón-Mancha, J. M. (2012)的论文“Visual simultaneous localization and mapping: a survey”,总结了到2010年的SLAM中的一些方法。他们的研究分为几个方面。核心方案是使用学习算法,其中一些在上文讨论过。地图的类型是捕获环境几何属性的度量图,或者是描述不同位置之间的连接的拓扑图。
在线跟踪中最常用的功能是显着特征和标记。标记是在环境中由3D位置和外观描述的区域(Frintrop和Jensfelt,2008)。显着特征是由2D位置和外观描述的图像区域。深度学习技术通常用于在每个时间点描述并检测这些显着特征,以向系统添加更多信息。检测是识别环境中的显着元素的过程,描述是将对象转换为特征向量的过程。
应用SLAM的方案有两种,一种是回环检测(loop closure),另一种是“机器人绑架(kidnapped robot)”。回环检测是识别已经访问过的任意长度的循环偏移,“机器人绑架”不使用先前的信息去映射环境。
SLAM是自主导航中常用的状态时间建模的框架。它主要基于概率原理,对状态和测量的后验和先验概率分布以及两者之间的关系进行推断。这种方法的主要挑战是计算复杂。状态越多,测量越多,计算量越大,在准确性和复杂性之间进行权衡。
[1] Fuentes-Pacheco, J., Ruiz-Ascencio, J., & Rendón-Mancha, J. M. (2012). Visual simultaneous localization and mapping: a survey. Artificial Intelligence Review, 43(1), 55–81. https://doi.org/10.1007/s10462-012-9365-8
[2] Durrant-Whyte, H., & Bailey, T. (2006). Simultaneous localization and mapping: Part I. IEEE Robotics and Automation Magazine, 13(2), 99–108. https://doi.org/10.1109/MRA.2006.1638022
[3] T. Bailey and H. Durrant-Whyte (2006). “Simultaneous localization and mapping (SLAM): part II,” in IEEE Robotics & Automation Magazine, vol. 13, no. 3, pp. 108–117. doi: 10.1109/MRA.2006.1678144
[4] Simon J. D. Prince (2012). Computer Vision: Models, Learning and Inference. Cambridge University Press.
[5] Murali, V., Chiu, H., & Jan, C. V. (2018). Utilizing Semantic Visual Landmarks for Precise Vehicle Navigation.
[6] Seymour, Z., Sikka, K., Chiu, H.-P., Samarasekera, S., & Kumar, R. (2019). Semantically-Aware Attentive Neural Embeddings for Long-Term 2D Visual Localization. (1).
[7] Fuentes-Pacheco, J., Ruiz-Ascencio, J., & Rendón-Mancha, J. M. (2012). Visual simultaneous localization and mapping: a survey. Artificial Intelligence Review, 43(1), 55–81. https://doi.org/10.1007/s10462-012-9365-8