如何生成带噪声的正弦函数

9

我对R语言还很陌生。

我的目标如下:我有一个正弦函数,描述时间内钙离子数量的变化情况:

类似 y = a * sin (b*t) + c

由于在现实中,钙的产生和清除是通过随机事件进行描述的,因此我想在我的函数中添加一个随机噪声项(最好是可缩放的平均噪声幅度)。

类似 z = y + random*Amplitude

你能帮我吗?

最好的祝福

2个回答

17
这里是我的方法 - 我提供了两种选项,解释了你的错误可能是如何生成的(均匀分布 vs 高斯分布):
### Equation: y=a*sin(b*t)+c.unif*amp
# variables
n <- 100 # number of data points
t <- seq(0,4*pi,,100)
a <- 3
b <- 2
c.unif <- runif(n)
c.norm <- rnorm(n)
amp <- 2

# generate data and calculate "y"
set.seed(1)
y1 <- a*sin(b*t)+c.unif*amp # uniform error
y2 <- a*sin(b*t)+c.norm*amp # Gaussian/normal error

# plot results
plot(t, y1, t="l", ylim=range(y1,y2)*c(1,1.2))
lines(t, y2, col=2)
legend("top", legend=c("y1", "y2"), col=1:2, lty=1, ncol=2, bty="n")

enter image description here


2

y <- jitter(a*sin(b*t) + c) 使用 jitter() 函数会给您的函数添加随机噪声。您可以在 jitter() 内指定 "amount" 参数来控制振幅。


2
“jitter()”不是旨在为可视化提供小噪声(避免重复数据点互相遮盖)的吗? - RubenLaguna
不熟悉“抖动”(jitter)的使用,但无论如何都不能按上述方式工作,会出现“Error in a * b + c : non-numeric argument to binary operator”的错误。 - WestCoastProjects
你不再需要+c部分,也就是只有抖动(asin(bt)) - 如果你移除@javadba,它就可以工作了。 - Nick Cotter
谢谢@NickCotter - WestCoastProjects

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接