gpt4 book ai didi

c - 在复合周期信号的周期开始处查找样本

转载 作者:太空狗 更新时间:2023-10-29 15:04:47 29 4
gpt4 key购买 nike

我有一个由多个正弦波的总和组成的信号。它们以 100Hz 间隔,最低分量频率为 200Hz(200Hz、300Hz...等)。所有分量正弦波都在相位 = 0 的同一点开始。在我的 DSP 软件中,我要将此信号相乘通过其他几个信号,我需要找到一个点,在这个点上,所有原始信号的分量信号都再次处于相位 = 0。

如果我只使用一个正弦波,我可以简单地寻找符号从负到正的变化。但是,如果信号具有 200Hz 和 300Hz 的分量,则存在三个零交叉,其中符号从负变为正,但只有一个表示周期的开始,并且随着分量波的增加而增加。在初始启动序列期间,我确实可以控制每个分量频率的幅度。如果这些波是严格的谐波(200Hz、400Hz、800Hz 等),我可以简单地删除除最低频率以外的所有频率,找到其周期的开始,并将其用作我的零样本。但是,我没有这个带宽。谁能提供替代方法?

编辑:

(我已经澄清并将此编辑整合到问题正文中。)

编辑 2:

这张图应该能说明问题。这里的频率两个分量是 n 和 3n/2。除了最低频率之外,没有过滤掉所有频率,也没有采用@hotpaw 提出的 FFT,一种只寻找符号从负正变化的过零的算法将落在三个中的一个上,我必须找到其中的第一个三(这是每个分量信号处于相位 = 0 的一点)。我意识到采用 FFT 会奏效,但我的处理能力非常有限,想知道是否有更简单的方法。

Sample waveform

最佳答案

看信号的导数!

您的信号是正弦之和(抱歉,我不确定如何正确格式化公式)

S = sum(a_n * sin(k_n * t)) ... 在所有 n 上

a_n 是正振幅,k_n 是正频率。信号的导数(您可以很容易地用数字计算)是

dS/dt = sum(a_n * k_n * cos(k_n * t)) ... 对所有 n

在 t=0 时(您正在寻找的),导数有最大值,因为所有余弦项同时为一。

一些补充:对于实际实现,您需要考虑导数可能有噪声,因此可能需要某种简单的一阶滤波。

关于c - 在复合周期信号的周期开始处查找样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8140178/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com