我有一个简单的数字系统,它有一个输入 x(n) = u(n) - u(n-4)。
我正在尝试使用“signal”包中的 conv() 函数或“stats”包中的 convolve() 函数找到输出 y(n),并绘制 y(n) 与 n 的关系,即 -10 ≤ n ≤ 10.
到目前为止,我有以下代码:
library(signal)
n <- c(-10:10) # Time index
x <- c(rep(0, 10), rep(1, 4), rep(0, 7)) # Input Signal
h1 <- c(rep(0, 11), 0.5, rep(0, 9)) # Filter 1
h2 <- 0.8^n # Filter 2
h2[0:11] <- 0 #
system <- data.frame(n, x, h1, h2)
y <- conv(x + conv(x, h1), h2) # Output Signal
system <- transform(system, y=y[1:21])
plot(system$n, system$y)
我检查了这个情节,这是非常错误的。我认为在进行卷积时会回收一些向量,并且 conv() 函数的输出似乎与原始时间索引不一致。我似乎无法弄清楚如何在这里解决我的逻辑。我意识到 conv(n, m) 函数返回一个长度为 (m+n)-1 的向量,有没有一种好方法可以轻松地将这个向量与时间索引向量匹配?
这将需要一些数字信号处理知识以及 R 中的编码知识,如果有人有为此目的使用 R 的经验并且可以提供一些指示,那就太好了。提前致谢。