低通滤波代码实现 R语言
时间: 2023-07-24 11:37:45 浏览: 73
以下是一个简单的 R 代码实现低通滤波:
```R
# 定义低通滤波器
lowpass_filter <- function(signal, cutoff_freq, sampling_rate) {
# 计算归一化截止频率
normalized_cutoff_freq <- 2 * pi * cutoff_freq / sampling_rate
# 计算滤波器系数
filter_coef <- c()
for (n in -20:20) {
if (n == 0) {
filter_coef[n + 21] <- normalized_cutoff_freq / pi
} else {
filter_coef[n + 21] <- sin(normalized_cutoff_freq * n) / (pi * n)
}
}
# 对信号进行滤波
filtered_signal <- convolve(signal, filter_coef, type = "filter")
return(filtered_signal)
}
# 示例使用
sampling_rate <- 1000 # 采样率
time <- seq(0, 1, 1/sampling_rate) # 时间序列
signal <- sin(2 * pi * 10 * time) + sin(2 * pi * 20 * time) + sin(2 * pi * 50 * time) # 信号
cutoff_freq <- 30 # 截止频率
# 对信号进行低通滤波
filtered_signal <- lowpass_filter(signal, cutoff_freq, sampling_rate)
# 绘制原始信号和滤波后的信号的时域图和频域图
par(mfrow = c(2, 2))
plot(time, signal, type = "l", main = "Original Signal")
plot(time, filtered_signal, type = "l", main = "Filtered Signal")
spec.pgram(signal, main = "Original Signal Spectrum")
spec.pgram(filtered_signal, main = "Filtered Signal Spectrum")
```
以上代码中,我们首先定义了一个 `lowpass_filter` 函数,在这个函数中计算了滤波器的系数,并使用 `convolve` 函数对输入信号进行滤波。接着,我们生成了一个包含多个正弦波的信号,并对其进行低通滤波。最后,我们绘制了原始信号和滤波后的信号的时域图和频域图,以便观察滤波效果。