我编写了一个excel宏,它允许用户创建图形,然后以叠加的正弦波形式向数据添加噪声。为了给用户更多的控制,我已经做到了这一点,以便使用正弦波的数量和正弦波的最大幅度。
每个正弦波的频率和相位是两个预设值之间的随机变量,幅度是大于0且小于或等于幅度的用户输入值的随机变量。因此,随着更多正弦波的增加,最大可能幅度不会增加,然后将各个波的幅度除以所使用的波的数量。为每个叠加波分别生成每个变量,然后迭代计算每个点的位置。
我遇到的问题是,当使用更多的正弦波时,所得曲线在任何给定点处达到其最大值的概率要小得多,并且整个曲线具有较低的幅度并且更接近平均值。这意味着用户必须迭代地改变振幅,直到它是不合理的需要为止。
以下是相关代码:
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)时,使用更多的波会增加振幅。
如果有人能够建议我如何调整代码以便不会发生这种情况,并且无论使用的波数如何,结果代码的预期幅度都保持不变(但我仍然希望单独使用波的幅度)变化)。
我对VBA还很陌生,所以如果你发现我的代码中有任何明显的缺陷,请指出它。