我一直在浏览这篇精彩的文章: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) 就像标题一样,我想使用一张画布通过 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.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 忽略。
我正在寻找获得反向模糊过滤器的方法。我有原始位图,我想制作类似高斯模糊反转的东西。
让我们称它为 invB,高斯模糊的操作作为函数 GBlur 和原始图像 O。我想要的过滤器将 invB 作为输出,以便 GBlur(invB) = O。
此操作与锐化图像无关(我认为它会使图像失真而不是使其更清晰)并且永远不会用于从模糊图像中恢复原始图像(它与该问题的假设和可用数据不同)。
缩短 - 过滤器应与原始图像相反,在高斯模糊后给出原始图像。InvB 中可能有更多过滤器。
提前致谢。
#已编辑。
原来的:

锐化和高斯模糊后:

在高斯模糊之后锐化:

所以我有原始图像,我必须通过高斯模糊([[1,2,1],[2,4,2],[1,2,1]],/ 16)传递图像并在之前准备原始图像模糊,以便它等于原始图像(尽可能,并且在不可能时最接近原始图像)。
也许由于问题的性质,我无法通过谷歌找到任何东西。请不要通过去模糊来解决这个问题——它根本无济于事。