我正在尝试提出一种算法来确定x/y坐标轨迹中的转折点.下图说明了我的意思:绿色表示起点,红色表示轨迹的最终点(整个轨迹由~1500点组成):

在下图中,我手动添加了算法可能返回的可能(全局)转折点:

显然,真正的转折点总是有争议的,并且将取决于一个人指定必须位于点之间的角度.此外,转折点可以在全球范围内定义(我试图用黑色圆圈做的),但也可以在高分辨率的局部尺度上定义.我对全球(整体)方向变化感兴趣,但我很乐意看到人们用来梳理全局与本地解决方案的不同方法的讨论.
到目前为止我尝试过的:
不幸的是,这并没有给我任何强有力的结果.我可能也计算了多个点的曲率,但这只是一个想法.我真的很感激任何可能对我有帮助的算法/想法.代码可以是任何编程语言,matlab或python是首选.
编辑这里是原始数据(如果有人想要玩它):
我想编写从MIDI设备获取输入的C/C++程序.
MIDI设备使用USB连接器连接到我的PC.
我正在寻找一个(C/C++实现的)库,我可以用它通过USB端口从MIDI设备读取MIDI信号.
一旦我得到它,我很高兴操纵MIDI数据,我只是不想为它的捕获实现代码.
我打算在Windows XP上使用Bloodshed Dev-C++ IDE编写代码.
我有一个样本保存在DirectX的缓冲区中.这是从乐器演奏和捕捉的音符样本.如何分析样本的频率(如吉他调谐器)?我认为涉及到FFT,但我没有指向HOWTO.
在MATLAB中有一种简单的方法将低通或高通滤波器应用于数组吗?我对MATLAB的功能(或数学的复杂性?)有点不知所措,需要一个简单的功能或一些指导,因为我无法从文档或搜索网络中找到它.
我一直在浏览这篇精彩的文章: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) 有谁知道如何在MATLAB中使用过滤器?我不是一个爱好者,所以我不关心滚降特性等 - 我有一个100维采样的1维信号矢量,我想对它进行高通滤波(比如拒绝任何低于10Hz的信号) )去除基线漂移.
帮助中描述了Butterworth,Elliptical和Chebychev过滤器,但没有关于如何实现的简单解释.
我正在寻找如何根据音乐绘制声波.
我想要像这张图片一样的波浪

这里有一些关于从音乐中显示Waves的讨论
Github示例链接
但是对于这种类型的波浪没有任何了解,是否可以像这张图像一样画出波浪?
我使用的重采样算法需要包含-1.0到1.0范围内的输入样本的float数组.音频数据是16位 PCM,采样率为22khz.
我想将音频从22khz下采样到8khz,如何将字节数组中的样本表示为浮点数> = -1且<= 1并返回字节数组?
我找到了一些用Web Audio API进行仪器合成的库.
其中一人(Band.js)使用createOscillator(),结合振荡器型(正弦波,方波,...)看到源.
但它听起来太合成了(例如,听)我想要听起来更真实的东西,但我不想使用任何预编译的声音字体,所以它应该被合成.它也适用于移动设备.
所以我找到了另一个库(musical.js),它使用前32个谐波作为矩阵与createPeriodicWave see source结合使用.音色很棒,你可以听
正如它在源代码的注释中所写,谐波来自该钢琴样本文件.还有更多其他乐器的示例文件.我试图取代谐波,甚至整个2000年,但它听起来总是像钢琴.
还有一些值可以调整和插入谐波和ADSR值.也许他们只针对钢琴声音进行了优化?
然后我找到了另一个库(吉他合成器),它有一个非常好的吉他音色,听听它.但是这个库不使用任何createPeriodicWaveAPI.相反,它使用createScriptProcessor并getChannelData结合一些"简单"计算,但没有像其他库中的谐波那样,请参阅源代码
可以将吉他合成器移植到使用createPeriodicWaveAPI吗?我想在musicjs中使用吉他音色.这样我就可以在钢琴音色和吉他音色之间切换.
BTW:找到了另一个合成声音乐器的库.这是演示,这里是源代码.声音也很好听,但是music.js音乐库的音色更加美妙.但它看起来也像使用像getChannelDataWAVE 一样编码的东西.它也无法在我的Android移动设备上运行.
有哪些学习DSP的好资源(包括实际理解这些资源所需的数学和算法)?
让我们假设我的数学技能因缺乏使用而生锈,所以我们的路线图如下:
会很好,希望导致DSP技能和知识接近"胜任".