算法得到正弦波的幅度和相位?

时间:2009-09-19 19:23:13

标签: algorithm math maxima computer-algebra-systems

我正在试图找出一种方法来算法获得在千里马计算机代数系统中具有正弦项的函数的幅度和相位。这仅适用于稳态(t - >无穷大和瞬态衰减)。例如,一个简单的案例是:

f(t) = 1 / w * sin(w * t + theta) + exp(-a * t) + 8

在这种情况下,增益为1 / w,相位偏移为theta,我们将忽略瞬态项exp(-a * t),因为我们只关心稳态增益和相位延迟,以及exp(-a * t) - > 0为t - >无穷。我们也会忽略“+ 8”项,因为它只是一个DC偏移。我在我的工程课程中被教导的方式需要大量的启发式和繁琐的方程式重新排列,以使它们以类似于上面的形式得到它们,其中答案很明显只是从它看起来。

有没有人知道一种通用的算法方法,假设它们存在,找到增益和相位延迟,因为我拥有计算机代数系统的全部功能(以及人们期望CAS拥有的标准功能)扔掉它?虽然我可能会在千里马中实现它,但我肯定会欣赏通过数学方面解释的通用答案。

编辑:我认为从我的例子中可以清楚地看出,我想用符号来表达答案。 w实际上应该是欧米茄,并代表输入的频率。我真正要问的是,是否有任何标准的数学运算可以产生增益和相位项而无需一堆启发式,手动方程式重新排列。

4 个答案:

答案 0 :(得分:7)

你的意思是象征性还是数字式?

数字上你想要执行Fourier transform

  • 对函数进行采样至少是预期最大频率的两倍(如果您想要更精确的相位测量,则更高),并且至少是您的最大预期波长

  • 执行傅里叶变换器(搜索FFT应该会出现很多例子 - 我的搜索表明最大值甚至可能有内置的fft函数)

  • 这将为您提供功能的“频域”版本。您将拥有一系列复数值,其中幅度是该频率的幅度,角度是该频率分量的相位。在你的情况下,听起来你想要寻找具有峰值振幅的频率

答案 1 :(得分:1)

这可能是理想的,也可能不是理想的,但我假设您无法对生成波形的函数执行任何数学运算(或函数不可用) -

我会以明显小于周期的间隔对波进行采样。这可能很难 - 你需要确定波浪的周期大于采样间隔,但你不会希望它太小或者需要永远完成波浪的几个周期。也许你可以用一些最小的值开始采样,然后逐渐增加直到值以一定的可接受速率变化。

如果你这样做,那么你可以将波移动到X轴的中心(通过减去或加上平均值)并确定1)最小/最大值,它提供振幅和2)X截距,这提供了期间。

答案 2 :(得分:1)

拉普拉斯或傅立叶变换可能有所帮助;你既可以象征性地也可以数字地应用。但是我不确定你是否能够创建一种通用的算法方法 - 通常根据极点的不同有不同的情况。

答案 3 :(得分:0)

在考虑了一段时间后,我自己已经想到了这一点。我会在这里发布,因为它非常有趣。假设是:

  1. 信号已存在无限时间,因此一切都处于稳定状态。
  2. 您的表达式中只有一个频率。这很容易通过检查来检查,即使它是以一种非常复杂的形式。例如,你不能犯罪(w1 * t)+罪(w2 * t)或者这不起作用。
  3. 您知道频率和时间变量的名称。
  4. 你有一个不错的计算机代数系统和所有标准功能。
  5. 在这些假设下,算法是:

    1. 采用拉普拉斯变换。在实践中,这是微不足道的,因为大多数情况下,当你遇到这样的问题时,你的答案最初是在拉普拉斯域中,你最终转换回时域以获得正弦波表达式。即使不是,一个像样的CAS也已经拥有成熟的拉普拉斯变换函数。
    2. 除以sin(w * t)的拉普拉斯变换。 (假设你使用w表示频率,t表示时间)。这为您提供了传递函数,即输入正弦波乘以的拉普拉斯域常数。
    3. as t - >无穷大,即对于已经存在无限时间的信号,拉普拉斯变量s等于i w,所以通过简单地用i w代替s,你得到频域中的传递函数,实际上传递函数的傅里叶变换。
    4. 对于频率为w的正弦波,增益是传递函数的复数绝对值。 (复数绝对值是复平面中某个复数与原点的距离,sqrt(realpart(my_number)^ 2 + imagpart(my_number)^ 2)。
    5. 相位偏移只是arctan(imaginarypart(transferFunction)/ realpart(transferFunction))。