Tag: 卷积

C#卷积滤波器适用于任何尺寸矩阵(1×1,3×3,5×5,…)未完全应用

我正在为我的项目制作一个卷积滤波器,我设法为任何大小的矩阵制作它,但随着它变大,我注意到并非所有的位都被改变了。 以下是显示问题的图片: 第一个是原件 过滤:模糊9×9 filter:EdgeDetection 9×9: 正如你所看到的,有一条小条纹永远不会改变,随着矩阵变大,条纹也会变大(3×3不可见) 我的卷积矩阵类: public class ConvMatrix { public int Factor = 1; public int Height, Width; public int Offset = 0; public int[,] Arr; //later I assign functions to set these variables … } 过滤function: Bitmap Conv3x3(Bitmap b, ConvMatrix m) { if (0 == m.Factor) return b; Bitmap bSrc = […]

无FFT的1D快速卷积

我需要对2个大arrays进行一维卷积。 我在C#中使用此代码,但运行时需要很长时间。 我知道我知道! FFT卷积非常快。 但在这个项目中我不能使用它。 不使用FFT是项目的约束(请不要问为什么:/)。 这是我在C#中的代码(从matlab移植,顺便说一下): var result = new double[input.Length + filter.Length – 1]; for (var i = 0; i < input.Length; i++) { for (var j = 0; j < filter.Length; j++) { result[i + j] += input[i] * filter[j]; } } 那么,有谁知道任何快速卷积算法宽度FFT?

使用卷积在连续的声音流中查找参考音频样本

在我之前关于在更大的音频样本中找到参考音频样本的问题中,有人建议我应该使用卷积。 使用DSPUtil ,我能够做到这一点。 我玩了一下,尝试了不同的音频样本组合,看看结果是什么。 为了可视化数据,我只是将原始音频作为数字转储到Excel并使用这些数字创建了一个图表。 一个高峰是可见的,但我真的不知道这对我有什么帮助。 我有这些问题: 我不知道,如何从峰值位置推断原始音频样本中匹配的起始位置。 我不知道,我应该如何应用连续的音频流,所以一旦参考音频采样发生,我就能做出反应。 我不明白,为什么图片2和图片4(见下文)差别如此之大,尽管两者都代表了与自身卷积的音频样本…… 任何帮助都非常感谢。 以下图片是使用Excel进行分析的结果: 一个较长的音频样本,附近有参考音频(哔哔声): http : //img801.imageshack.us/img801/976/values1.png 哔哔声与自己融为一体: http : //img96.imageshack.us/img96/6720/values2i.png 没有哔哔声的较长音频样本与哔哔声融为一体: http : //img845.imageshack.us/img845/1091/values3.png 第3点的较长音频样本与其自身融合: http : //img38.imageshack.us/img38/1272/values4.png 更新和解决方案: 感谢Han的广泛帮助,我实现了我的目标。 在我没有FFT的情况下完成了自己的慢速实现之后,我发现alglib提供了快速实现。 我的问题有一个基本假设:其中一个音频样本完全包含在另一个中。 因此,以下代码返回两个音频样本中较大者中的样本中的偏移量以及该偏移量处的归一化互相关值。 1表示完全相关,0表示根本不相关,-1表示完全负相关: private void CalcCrossCorrelation(IEnumerable data1, IEnumerable data2, out int offset, out double maximumNormalizedCrossCorrelation) { var data1Array = data1.ToArray(); var data2Array = data2.ToArray(); […]