VBA:叠加正弦波的振幅

我写了一个excelmacros,允许用户创build一个graphics,然后以叠加的正弦波forms向数据添加噪声。 为了给用户更多的控制,我使得正弦波的数量和正弦波的最大振幅都是input。

每个正弦波的频率和相位是两个预设值之间的随机variables,并且幅度是大于0且小于或等于幅度的用户input值的随机variables。 因此,最大可能的幅度不会随着更多正弦波的增加而增加,然后个体波的幅度除以正在使用的波的数量。 这些variables中的每一个都是针对每个叠加波分别生成的,然后迭代计算每个点的位置。

我所遇到的问题是,当使用更多的正弦波时,在任何给定点上所得到的曲线处于其最大值的概率要小得多,整个曲线具有较低的幅度并且更接近平均值。 这意味着用户必须迭代地改变幅度,直到按需要,这是不理想的。

这是相关的代码:

j = Worksheets("Sheet1").Range("AE19").Value C = Worksheets("Sheet1").Range("AA19").Value w = 1 For i = 4 To 4003 Worksheets("Sheet2").Range("I" & i).Value = 0 Next i Do While w <= C A = ((Int((5 - 1 + 1) * Rnd + 1)) / (10 / j) / C) F = Int((8 - 1 + 1) * Rnd + 1) P = (Int((6 - 1 + 1) * Rnd + 1)) / 6 For i = 4 To 4003 x = Worksheets("Sheet2").Range("H" & i).Value b = Worksheets("Sheet2").Range("I" & i).Value Worksheets("Sheet2").Range("I" & i).Value = b + (A * Sin((x / (10 * F)) + (2 * Application.WorksheetFunction.Pi() * P))) Next i w = w + 1 Loop 

其中C是使用的正弦波的数量,j是用户给出的最大振幅。

另外,当我允许每个振幅值达到用户定义值(而不是用C除)时,使用更多的波可以增加振幅。

如果有人能够build议我如何调整代码,以防止这种情况发生,并且无论使用哪种波形数量,所得代码的预期幅度保持不变(但是我仍然希望波形的幅度单独变化) 。

我对VBA还是比较陌生的,所以如果你在我的代码中发现任何明显的缺陷,请指出。

Interesting Posts