识别常见的周期性波形(正方形,正弦波,锯齿波,......)

问题描述:

没有任何用户交互,程序如何识别来自ADC的记录中存在什么类型的波形?识别常见的周期性波形(正方形,正弦波,锯齿波,......)

对于这个问题的缘故:三角形,正方形,正弦,半正弦波,或恒定频率的锯齿波。电平和频率是任意的,它们会有噪声,少量失真和其他缺陷。

Various waveforms

我会提出一些(幼稚)的想法也一样,你可以投票向上或向下。

+1

你能否有信心地认为输入是单声道信号? (即单个音符演奏的单个音符?) – kent 2009-07-17 14:55:43

+0

是的。我没有特别的应用,但我想象的是连续的单一频率的周期性波。 – endolith 2009-07-17 16:25:53

你一定要采取自相关找到根本入手。

这样,取一个周期(大约)的波形。

现在采取这一信号的DFT,并立即弥补上述第一二进制相移(第一仓是根本,你的任务会更简单,如果所有阶段是相对的)。 现在归一化所有的箱子,使基本面具有统一性。

现在比较和对比箱(代表谐波)与一组,你有兴趣测试预先存储的标准波形的其余部分。接受最接近的,并且如果它不能满足通过噪声测量确定的准确度阈值,则拒绝整体。

执行自相关寻找基本频率,测量RMS电平,找到第一个过零点,然后尝试在该频率,相位和电平中减去公共波形。无论哪个取消最佳(并且超过某个阈值)都会获胜。

+0

我认为这是最实用的方法,假设您也改变比较波形的相位。 – MusiGenesis 2009-07-31 15:57:16

+0

您可以通过先找到过零点来找出相位,这样您就不会浪费时间将波浪移至每个可能的相位。 – endolith 2009-08-01 20:33:55

做一个FFT,发现奇和偶次谐波的峰值,并且比较在其降低到常用的波形..峰......比库的速度。

+0

由于您仍然可以识别经过相移和滤波的波,因此此方法似乎比在时域中工作更稳定。 – endolith 2009-07-17 16:30:05

武装自己的详细信息...

我假设你已经知道,理论上完美的正弦波没有谐波泛音(即只有一个基本的)......但因为你正在经历一个ADC你可以抛出理论上理想的正弦波在窗外的想法......你必须反抗别名,并确定什么是“真正”的部分和什么是神器...祝你好运。

以下信息来自this link about csound.

(*)甲锯齿波包含(理论上)谐波泛音的无限数量,每一个在部分数的倒数之比。因此,基波(1)的振幅为1,第二部分1/2,第三1/3和第n 1/n。 (**)方波包含(理论上)无限数量的谐波分量,但只包含奇数谐波(1,3,5,7,...)。振幅按倒数的部分数字,就像锯齿波一样。因此,基波(1)的振幅为1,第三部分1/3,第五1/5和第n 1/n。

这个答案假设没有噪音,这是一个简单的学术练习。

在时域中,以波形的样本差异取样。直方图结果。如果分布在零点处具有明确定义的峰值(模式),则它是方波。如果分布在正值处具有明确定义的峰值,则它是锯齿。如果分布具有两个明确定义的峰值,一个负值和一个正值,则它是三角形。如果分布宽广并且在任何一侧达到峰值,那么这是一个正弦波。

我认为所有这些答案至今都相当糟糕(包括我自己以前的...) 已经经过深思熟虑了一下这个问题经过我建议如下:

1)取1输入信号的第二个样本(不需要那么大,但是它简化了几件事)

2)在整个秒钟内,计数过零点。此时你有cps(每秒周期)并知道振荡器的频率。 (以防万一你想知道)

3)现在拿一小段样本来处理:精确地取7个过零值。 (所以你的工作缓冲区现在应该如果可视化,看起来像你用原始问题发布的图形表示之一)。使用这个小的工作缓冲区来执行下列测试。 (在此处标准化工作缓冲区可能会使生活更容易)

4)方波测试:方波零交叉总是非常大的差异,寻找一个大的信号增量,然后几乎没有运动,直到下一个过零点。 5)测试锯齿波:类似于方波,但大信号增量后面会跟随一个线性恒定信号增量。

6)测试三角波:线性常数(小)信号增量。找到峰值,除以它们之间的距离,并计算出三角波应该看起来像什么(理想情况下)现在测试实际信号的偏差。设置偏差容差阈值,您可以确定您是在查看三角形还是正弦(或某种抛物线)。

首先找到基频和相位。你可以用FFT做到这一点。标准化样品。然后用要测试的波形样本(相同频率和相同相位)减去每个样本。将结果平方加起来,并将其除以样本数量。最小的数字是您寻找的波形。