【问题标题】:Identifying common periodic waveforms (square, sine, sawtooth, ...)识别常见的周期性波形(方波、正弦波、锯齿波……)
【发布时间】:2010-11-11 14:20:52
【问题描述】:

在没有任何用户交互的情况下,程序如何识别来自 ADC 的记录中存在什么类型的波形?

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

我也会提出一些(幼稚的)想法,你可以投票赞成或反对。

【问题讨论】:

  • 您能否自信地假设输入是单声道信号? (即单个乐器演奏的单个音符?)
  • 是的。我没有考虑特定的应用,但我在想象单一频率的连续周期性波。

标签: audio signal-processing numerical waveform


【解决方案1】:

执行自相关以找到基频、测量 RMS 电平、找到第一个过零点,然后尝试减去该频率、相位和电平的常见波形。取消最佳(并且超过某个阈值)的获胜者。

【讨论】:

  • 我认为这是最实用的方法,假设您还改变了比较波形的相位。
  • 您可以通过首先找到零交叉来计算相位,这样您就不会浪费时间将波转移到每个可能的相位。
【解决方案2】:

进行 FFT,找出奇偶谐波峰值,并将它们降低的速率与常见波形库..峰值...比率进行比较。

【讨论】:

  • 这种方法似乎比在时域中工作更可靠,因为您仍然可以识别经过相移和滤波的波。
【解决方案3】:

您肯定希望首先通过自相关来找到基础。

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

现在对该信号进行 DFT,并立即补偿第一个 bin 的相移(第一个 bin 是基频,如果所有相位都是相对的,您的任务会更简单)。 现在对所有 bin 进行归一化,使基波具有单位增益。

现在将其余的 bin(代表谐波)与您有兴趣测试的一组预存储波形进行比较和对比。接受最接近的,如果它不能满足由本底噪声测量确定的某个准确度阈值,则整体拒绝。

【讨论】:

  • 不过,您还需要跟踪该相移,以识别不同极性的波,对吧?
  • 确实如此。如果你已经补偿了基本的相位,那也会容易得多。
  • 最好是对波的几个周期进行 FFT,就噪声抑制而言。
  • 或者,如果你可以对齐它们,你最好将波浪的几个周期(和平均值)相加,然后进行 FFT。
【解决方案4】:

用更多信息武装自己...

我假设您已经知道理论上完美的正弦波没有谐波部分(即只有基波)...但是由于您正在使用 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。

【讨论】:

    【解决方案5】:

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

    在时域中,逐个采样波形的差异。直方图结果。如果分布在零处有一个明确定义的峰值(众数),则它是一个方波。如果分布在正值处有一个明确定义的峰值,则它是一个锯齿形。如果分布有两个明确定义的峰,一个负一个正,它是一个三角形。如果分布较宽且在任一侧达到峰值,则为正弦波。

    【讨论】:

      【解决方案6】:

      我认为到目前为止所有这些答案都很糟糕(包括我自己以前的......) 在仔细考虑了这个问题之后,我会提出以下建议:

      1) 对输入信号进行 1 秒的采样(不需要那么大,但它可以简化一些事情)

      2) 在整个秒内,计算过零次数。此时你有cps(每秒周期数)并且知道振荡器的频率。 (如果这是你想知道的)

      3) 现在取一小部分样本进行处理:精确取 7 个过零值。 (因此,如果可视化,您的工作缓冲区现在应该看起来像您在原始问题中发布的图形表示之一。)使用这个小的工作缓冲区来执行以下测试。 (此时标准化工作缓冲区可以让生活更轻松)

      4) 测试方波:方波的零交叉总是非常大的差异,寻找一个大的信号增量,然后在下一个零交叉之前几乎没有移动。

      5) 锯齿波测试:类似于方波,但大信号增量后会跟随一个线性常数信号增量。

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

      【讨论】:

      • 假设这就像真实的音频数据,计算过零不会很好。正如 Dave Gamble 所指出的,自相关是确定音频信号基频的最佳方法。
      • 除非信号真的很嘈杂,否则计数过零应该可以工作。不过,最好测量过零之间的距离,剔除任何异常值并取平均值。
      【解决方案7】:

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

      【讨论】:

        猜你喜欢
        • 2016-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-19
        • 2019-08-13
        • 1970-01-01
        • 1970-01-01
        • 2019-04-29
        相关资源
        最近更新 更多