小编Evi*_*vil的帖子

使用帧之间的相位变换从FFT仓中提取精确的频率

我一直在浏览这篇精彩的文章:http://blogs.zynaptiq.com/bernsee/pitch-shifting-using-the-ft/

虽然太棒了,但它非常艰难而且沉重.这种材料真的让我感到舒服.

我从Stefan的代码模块中提取了数学,该代码模块计算给定bin的确切频率.但我不明白最后的计算.有人能告诉我最后的数学结构吗?

在深入研究代码之前,让我设置一下场景:

  • 假设我们设置fftFrameSize = 1024,所以我们处理512 + 1个bin

  • 例如,Bin [1]的理想频率适合帧中的单个波.在40KHz的采样率下,tOneFrame = 1024/40K秒= 1/40秒,因此Bin [1]理想地将采集40Hz信号.

  • 设置osamp(overSample)= 4,我们以256为步长沿着输入信号前进.因此,第一个分析检查字节0到1023,然后是256到1279等.注意每个浮点数被处理4次.

...

void calcBins( 
              long fftFrameSize, 
              long osamp, 
              float sampleRate, 
              float * floats, 
              BIN * bins
              )
{
    /* initialize our static arrays */
    static float gFFTworksp[2*MAX_FRAME_LENGTH];
    static float gLastPhase[MAX_FRAME_LENGTH/2+1];

    static long gInit = 0;
    if (! gInit) 
    {
        memset(gFFTworksp, 0, 2*MAX_FRAME_LENGTH*sizeof(float));
        memset(gLastPhase, 0, (MAX_FRAME_LENGTH/2+1)*sizeof(float));
        gInit = 1;
    }

    /* do windowing and re,im interleave */
    for (long k = 0; …
Run Code Online (Sandbox Code Playgroud)

c math signal-processing fft phase

25
推荐指数
4
解决办法
2万
查看次数

Chart.js 在一个画布上并排保存两个图表

就像标题一样,我想使用一张画布通过 chart.js 共享。我已经与 DOM 并排看过,但这是另一回事,我需要保留一个画布并保留动画。

我使用 Chart.js 版本:2.8.0(最新),想通过注册插件重新布局绘图。第一部分就像魅力一样,在beforeLayout

chart.width = chart.canvas.width * 0.6;
Run Code Online (Sandbox Code Playgroud)

这将缩放第一个绘图,完美运行,甚至工具提示也仅显示在第一个绘图区域内。如果我设置第二个情节:

chart.width = chart.canvas.width * 0.4;
chart.options.layout.padding.left = chart.canvas.width * 0.6;
Run Code Online (Sandbox Code Playgroud)

情节混乱,堆栈困惑的情节chart.js

显然我可以设置

 chart.width = chart.canvas.width * 1;
Run Code Online (Sandbox Code Playgroud)

然后重绘第一个图,但也许有一些简单的方法可以让两个(或更多)图共享画布?

代码取自chart.js 示例并由我修改以生成最小的工作示例。

chart.width = chart.canvas.width * 0.6;
Run Code Online (Sandbox Code Playgroud)

这是所需的结果的样子:
想要的结果 缺少 Y 轴、图例和标题之类的东西用 simple 隐藏display: false,第二个绘图填充顶部设置为第一个绘图 chartArea.top,这里的问题是闪烁且经常重绘第一个绘图,它还接收悬停事件,因此单独设置填充不行,所以应该以某种方式对第二个绘图集进行偏移。

现在,我同时努力进行了一些修改并决定自己清除,剩下的错误是工具提示,在两个图和两个图的条之间的垂直移动中触发。它还需要在调整大小时手动重绘。

chart.width = chart.canvas.width * 0.4;
chart.options.layout.padding.left = chart.canvas.width * 0.6;
Run Code Online (Sandbox Code Playgroud)

它甚至会坚持触发许多更新,但工具提示被剪掉了,在动画过程中同时出现了两个。这个结果看起来几乎像最终版本,所以如果有人想知道为什么,这些是相同数据的四个变量,两个耦合的。由于只剩下条形和工具提示,如果不是用于动画和用于其他绘图的相同框架,我会自己绘制一些矩形。用于进一步处理的管道需要一张图像,因此破解按需画布来绘制它们是不可能的。

下面的问题是当重绘发生时,填充或边距会被 Chart.js 忽略。

两个图表,马车

javascript charts chart.js

5
推荐指数
0
解决办法
2845
查看次数

反向图像模糊滤镜(非锐化蒙版)

我正在寻找获得反向模糊过滤器的方法。我有原始位图,我想制作类似高斯模糊反转的东西。

让我们称它为 invB,高斯模糊的操作作为函数 GBlur 和原始图像 O。我想要的过滤器将 invB 作为输出,以便 GBlur(invB) = O。

此操作与锐化图像无关(我认为它会使图像失真而不是使其更清晰)并且永远不会用于从模糊图像中恢复原始图像(它与该问题的假设和可用数据不同)。

缩短 - 过滤器应与原始图像相反,在高斯模糊后给出原始图像。InvB 中可能有更多过滤器。

提前致谢。

#已编辑。

原来的:

在此处输入图片说明

锐化和高斯模糊后:

锐化和模糊的玫瑰

在高斯模糊之后锐化:

模糊和锐化的玫瑰

所以我有原始图像,我必须通过高斯模糊([[1,2,1],[2,4,2],[1,2,1]],/ 16)传递图像并在之前准备原始图像模糊,以便它等于原始图像(尽可能,并且在不可能时最接近原始图像)。

也许由于问题的性质,我无法通过谷歌找到任何东西。请不要通过去模糊来解决这个问题——它根本无济于事。

graphics image-processing filter

0
推荐指数
1
解决办法
9739
查看次数