信号处理

为信号,图像和视频处理领域的艺术和科学从业者提供的问答

4
较低的频率在FFT中更强?
我正在根据麦克风输入计算FFT。我注意到,低频似乎总是比高频具有更大的功率(更高的dB)。 我将数据切成24576字节(4096 * 6)的帧。 应用汉明窗: input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/fs)); 通过FFTW运行它Process1D()。 从复数转换: output[i] = 10.0 * Math.Log10((fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1])); 对6个值求平均值,以获得4096字节的完整FFT。 绘制漂亮的图片(颜色映射到调色板)。 进行平均(第5页)以降低FFT噪声。 如图所示,声音和麦克风关闭时,低频处都有更多的能量(和更多的噪音)。这表明它不仅仅是麦克风/子问题。 我的问题: 1.这是预期的吗?为什么? 2.有什么标准方法可以解决此问题?几乎像某些Math.Tan()魔术可以将其提升到所属位置。 我的目标是能够确定前5个频率,而默认情况下不会赢得较低的频率。
15 audio  fft 

3
如何设计一个非常窄的滤波器?
假设我有一个以 Hz 采样的音频信号,并且我想设计一个低通滤波器,将低于 Hz的所有信号隔离开。在数字世界中,这是一个低通滤波器,其通带为。同样,过渡带也应合理。为此构建一个FIR滤波器会产生很多抽头,从长远来看会影响精度。IIR滤波器太不理想,因为音频在滤波器中会受到非线性相位响应的影响,因此,除非对信号进行滤波,然后再对它进行反向和滤波,否则实际上不是一个选择。60 [ - π480004800048000606060[ - π400,π400][-π400,π400][-\frac{\pi}{400} , \frac{\pi}{400} ] 在这种情况下,小波变换会比一次性进行常规滤波更好吗?

3
如何确定最好在哪个平台上实现实时音频处理?
开发产品时,我会在Matlab中进行所有算法设计。它们通常是非常基本的,一个或两个IIR或FIR滤波器,几个FFT,等等。当需要将其移至嵌入式环境时,我总是很难决定要在哪个平台上运行它。我通常会想到以下这些(广泛的)平台: DSP内核 现场可编程门阵列 微控制器 臂 做出此决定时应考虑哪些因素?
15 arm  dsp-core  hardware 

4
特征提取以进行声音分类
我正在尝试从声音文件中提取特征,并将声音分类为属于特定类别(例如:狗吠,汽车引擎等)。我想在以下方面做一些澄清: 1)这完全可行吗?有些程序可以识别语音,并可以区分不同类型的狗吠。但是,是否有可能有一个程序可以接收声音样本并仅说明它是哪种声音?(假设有一个包含很多声音样本的数据库)。输入的声音样本可能有点嘈杂(麦克风输入)。 2)我假设第一步是音频特征提取。该文章建议提取的MFCC并将这些资料传送到机器学习算法。MFCC是否足够?还有其他通常用于声音分类的功能吗? 感谢您的时间。

1
数字滤波器设计的基本原理(IIR / FIR)
尽管我在设计音频引擎等方面具有扎实的经验,但我对数字滤波器设计领域(尤其是IIR和FIR滤波器)还是陌生的。换句话说,我正在尝试学习尽可能多的关于如何设计滤波器和导出它们的差分方程的知识。我从基础开始,所以请忍受我所说的,我正在尝试学习。 这是我的问题: 假设我要设计一个具有特定截止频率的低通滤波器-例如300 Hz。数学上推导传递函数然后推导特定差分方程以直接形式I和直接形式II(或现在仅是DF-1 ...)实现滤波器的最佳方法是什么? 我对传递函数以及它们与网络上某些优秀材料的差分方程之间的关系有一定的了解,但不幸的是,其中一些函数具有一些先验知识,因此,对我的追求而言,它比帮助更大。因此,我想我需要一个更逐步的示例,该示例将帮助我联系各个方面。 因此,我基本上是在寻求过程细分的帮助,从选择截止频率直至推导差分方程式。 任何帮助都感激不尽。我熟悉许多概念-脉冲响应,DFT,其背后的数学原理,我想我需要更多帮助的是z变换的概念以及使用极点/零点来设计滤波器的传递函数,然后截止频率如何。发挥所有作用,最终得出差分方程。 由于我倾向于从示例中学到最好的东西,所以我想在这里问。非常感谢任何有时间帮助我的人。

2
哪个IIR滤波器近似于高斯滤波器?
因此,最近让我想到的是,尽管Bessel过滤器与其他常见类型一起被列出,但它确实是属于不同“类”的奇异球,我正在尝试了解更多信息。 矩形幅度响应表示理想的频域响应,因为过渡带为零,阻带具有无限衰减。另一方面,高斯幅度响应表示理想的时域响应,因为在脉冲响应和阶跃响应中不会出现过冲。在实践中获得的许多响应都是这些理想源的近似值 因此,砖墙滤波器是具有Sinc函数的卷积,并且具有以下频域属性: 平坦通带 零阻带 无限下降率/无过渡带 这是没有因果的,因为两个方向上的尾巴都无限,所以无法实现。这些IIR滤波器使它近似,随着阶次的增加,近似值也随之提高: 巴特沃思(最大平坦通带) 切比雪夫(具有阻带或通带纹波的最大滚降率) 椭圆形(具有阻带和通带纹波的最大滚降率) Legendre (单调通带的最大滚降率) 的高斯滤波器是卷积用高斯函数,并且具有这些时域性能: 零超调 最短的上升和下降时间 最小群延迟 由于与sinc函数相同的原因,它是无法实现的,并且可以由这些IIR滤波器近似,随着阶数的增加更接近: 贝塞尔(最大平坦群延迟)根据1和2 Ë- 12(πω)2Ë-1个2(πω)2e^{-{1 \over 2}(\pi \omega)^2} 所以我的问题是: 到目前为止一切都正确吗?如果是这样,还有其他近似高斯的IIR滤波器吗?它们针对什么进行了优化?也许可以最大程度地减少过冲? 如果您搜索“ IIR高斯”,您会发现一些东西(Deriche?van Vliet?),但我不知道它们是否真的与Bessel相同,或者是否针对其他属性进行了优化等。


2
图像配准分割
图像配准算法通常基于点特征,例如SIFT(尺度不变特征变换)。 我看到了一些有关线要素的参考,但是我想知道是否可以匹配图像段而不是点。例如,给定的源和转换后的图像: 我可以对每个像素进行边缘检测,模糊和分水岭变换: 遗憾的是,在每个图像上的分割结果差异太大,无法匹配各个段。 我看到了一些关于匹配形状和形状描述符的论文,这些关系对于仿射变换是不变的,所以这个领域似乎很有希望... 是否存在任何更鲁棒的仿射(甚至射影)图像变形方法?

6
不同材质的图像分割问题
嗨,简历/模式识别社区, 关于图像的分割,我遇到了一个严重的问题。场景是炉子里的气氛,使我发疯。而且我需要在短时间内(<10秒)而不是仅在一种特殊情况下检测不同材料(玻璃,陶瓷,Al,Ir ...)的物体轮廓。我还需要代码的连续像素行中的轮廓。因此,还需要使用链代码或所谓的边界/轮廓跟随,因此开孔不好。在背景中会不时出现非线性噪声,大约是灰尘,颗粒或其他一些东西。 欢迎使用Matlab或OpenCV建议。 为了更加清楚,我发布了目标的另一个图像和一个半透明的对象,还需要对其进行检测。还需要注意其他示例。 正如您在图像#1中看到的那样,图像的右侧部分和恒星的外轮廓附近(即物体)存在粒子。而且总体对比度不是很好。对象本身位于地下,与轮廓检测无关。图像#2显示了半透明的物体,这也是可能的。 我想找到该物体的轮廓/周长,就像在下一个屏幕(红线)上一样。两个矩形(黄色)标记了起点(左侧)和终点(右侧)。蓝线是可忽略的。 起初我以为我可以只用过滤器解决那种肮脏的气氛。但是经过大量的投入时间,我才意识到,为了提高前景和背景的对比度,我必须大幅度消除或减少噪音。我尝试了很多方法,例如直方图均衡,自适应Otsu均衡,线性滤波器(例如高斯),非线性滤波器(中值,扩散),活动轮廓,k均值,Fuzzy-c-means以及纯Canny边缘检测结合形态运算符。 坎尼:粒子和大气正在造成孔洞,但是我需要物体的完整轮廓。仍然以形态算子的闭合,扩张还不够好。由于滞后作用,Canny仍然是我研究过的所有方法中最好的结果。 活动轮廓线:它们也可以在边缘/渐变上工作,在对象内部初始化后它们的行为完全疯狂,这可能是由于边缘贴图导致“开放”对象引起的。据我所知,轮廓必须闭合。尝试了不同的衍生产品(GVF / VFC /经典蛇)。 k均值:由于有雾的背景,结果包括炉内气氛。对于模糊C均值也是如此。由于将对象与背景分离,我选择了两个群集。簇越多,结果越弱。 直方图/ Otsu:由于灰度强度非常接近(恕我直言!),它会将对象与背景合并。尝试使用本地和全局方法。 滤镜:尤其是GLPF或其他LPF会弄脏边缘,效果不是很好,甚至不会减少有雾的气氛。 非线性滤镜保留边缘。它们中的大多数都花很长时间计算大图像。现在使用快速双边过滤器。结果见下文。 因此,没有一种方法足以满足后处理步骤的需要,因为对象段的获得结果与现有算法的竞争性较差。该现有算法非常本地化,因此适用于这种非常特殊的情况。 所以我问你,如果我完全错过了什么...我不知道如何加工以及如何获得良好的轮廓结果而又没有间隙或孔。 CCD和物理环境?提前致谢! 到目前为止的最后一种方法(经过一整夜的MO实验): 双边过滤器(保留边缘,但平滑均匀区域) Canny(Sigma = 2,Threshold = [0.04 0.08]) 形态运算(MO): bwareopenclosing, remove和bridge bwlabel仅选择轮廓的周长,以消除不必要的噪音。尚无更新的屏幕截图,但适用于明星。玻璃杯有一个与外部轮廓相连的内部轮廓,也可以在下面的屏幕截图中看到。 因此,恐怕我需要一种特殊的算法来遍历外部轮廓。这将是对邻居的一些顺时针/逆时针查找。如果存在拐角,则可以切换顺时针/逆时针的步骤。如果有间隙,请增加半径并再次查看。如果存在以下两个或两个以上的观点,请选择与前一个观点相同的观点。您认为轮廓跟随算法有意义吗?

3
通过FFT快速进行余弦变换
我想实现快速余弦变换。我在Wikipedia上读到,有一个DCT的快速版本,其计算方法与FFT类似。我尝试阅读引用的Makhoul *论文,了解Scipy中也使用的FTPACK和FFTW实现,但是我无法提取实际的算法。这是我到目前为止所拥有的: FFT代码: def fft(x): if x.size ==1: return x N = x.size x0 = my_fft(x[0:N:2]) x1 = my_fft(x[0+1:N:2]) k = numpy.arange(N/2) e = numpy.exp(-2j*numpy.pi*k/N) l = x0 + x1 * e r = x0 - x1 * e return numpy.hstack([l,r]) DCT代码: def dct(x): k = 0 N = x.size …
15 fft  dct 


1
使用RMS获得曲目的响度
我正在尝试计算存储在缓冲区中的音轨的响度。缓冲区包含信号的PCM数据,我想通过使用均方根来获得“响度”。我假设我可以在时域中执行此操作,而不必切换到频域。这样做的伪代码是什么? 我是否只需采样一秒钟(音频[0]-音频[44099],音频[44099]-音频[88199]等),然后计算这些值的均方根值?因此,例如,我会这样做: RMS=audio[0]2+audio[1]2+audio[2]2.....audio[44099]244100−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√RMS=audio[0]2+audio[1]2+audio[2]2.....audio[44099]244100RMS = \sqrt{\frac{\text{audio}[0]^2 + \text{audio}[1]^2 + \text{audio}[2]^2.....\text{audio}[44099]^2}{44100}} 每秒钟?

1
如何使用状态转换矩阵从系统的状态空间表示中找到系统的脉冲响应?
假设我们在标准状态空间符号中有一个线性表示: Ý(吨)=c ^X(吨)+dù(吨)x˙(t)=Ax(t)+Bu(t)x˙(t)=Ax(t)+Bu(t) \dot{x}(t)=Ax(t)+Bu(t) y(t)=Cx(t)+Du(t)y(t)=Cx(t)+Du(t)y(t) = Cx(t) + Du(t) 为了获得其脉冲响应,可以对其进行Laplace变换来获得 Ŷ = C ^ X + d ùsX=AX+BUsX=AX+BUsX=AX+BU Y=CX+DUY=CX+DUY=CX+DU 然后求解传递函数 YU=C(sI−A)−1B+DYU=C(sI−A)−1B+D\frac{Y}{U}=C(sI-A)^{-1}B+D ZZ\mathcal{Z}x[n+1]=Ax[n]+Bu[n]x[n+1]=Ax[n]+Bu[n] x[n+1]=Ax[n]+Bu[n] y[n]=Cx[n]+Du[n]y[n]=Cx[n]+Du[n]y[n] = Cx[n] + Du[n] 是 YU=C(zI−A)−1B+DYU=C(zI−A)−1B+D\frac{Y}{U}=C(zI-A)^{-1}B+D xxx

4
从FFT提取频率
我对信号执行了512点FFT。我又得到了512个号码集。我知道这些数字代表具有不同频率的各种正弦波和余弦波的振幅。 如果我的理解是正确的,有人可以告诉我如何从那些512数(即振幅)的知识中了解那些正弦和余弦波的频率吗?

3
OpenCV / C ++根据它们之间的距离连接附近的轮廓
我必须根据它们之间的距离连接图像中的附近轮廓,该距离指定是否要连接轮廓。 现在这里已经有一个关于同一问题的问题,https://stackoverflow.com/questions/8973017/opencv-c-obj-c-connect-nearby-contours,但是在这里他将所有轮廓合并为一个轮廓。这个我不要 我认为opencv中没有为此功能,但是您可以为此建议一个算法。我的应用程序如下所示: 我正在检测手,因此我使用皮肤检测算法来确定它们,但是由于我的皮肤不是白色,可能是由于某些情况下的照亮情况导致肘部轮廓破裂。因此,我希望连接附近的轮廓,但不要全部连接(因为我的两只手都在轮廓中。)(我的意思是从肩膀到手掌。) 此外,我认为通过使用一些边缘检测,我将获得我的手的边界,并检测该边界内的某些补丁是否被检测为皮肤,然后将该边界内的整个区域检测为皮肤,但是我不确定如何执行此操作部分。 任何帮助将不胜感激。提前致谢 样本图片: 在此图像中,我想连接距离(小于40像素)的点(8个连接点),以便将左手作为单个轮廓 我的目的是只获得手的轮廓(我不在乎其他任何区域)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.