. conv() . :
library(signal)
n <- c(-10:10)
x <- c(rep(0, 10), rep(1, 4), rep(0, 7))
h1 <- c(rep(0, 11), 0.5, rep(0, 9))
h2 <- 0.8^n
h2[1:10] <- 0
system <- data.frame(n, x, h1, h2)
y <- conv(x + conv(x, h1)[11:31], h2)
system <- transform(system, y=y[11:31])
plot(system$n, system$y)
, , . - , , .:)
UPDATE
conv() . , , , .
library(signal)
conv2 <- function(x, y){
conv(x, y)[ceiling(length(x)/2):(length(x)+floor(length(x)/2))]
}
y <- conv2(x + conv2(x, h1), h2)
2
FFT. , sapply(), . . .
conv3 <- function(x, h){
m <- length(x)
n <- length(h)
X <- c(x, rep(floor(n/2), 0, floor(n/2)))
H <- c(h, rep(floor(m/2), 0, floor(m/2)))
Y <- vector()
for(i in 1:n+m-1){
Y[i] <- 0
for(j in 1:m){
Y[i] <- ifelse(i-j+1>0, Y[i] + X[j]*H[i-j+1], 0)
}
}
Y[is.na(Y)] <- 0
Y[ceiling(m/2):(m+floor(m/2))]
}
, , , .