图片中的绿色图形由红色和黄色图形组成。但假设我只有类似绿色图形的数据点,如何使用低通滤波器/高通滤波器提取低/高频率(即大约是红色/黄色图形)?
更新:该图表是使用
number_of_cycles = 2
max_y = 40
x = 1:500
a = number_of_cycles * 2*pi/length(x)
y = max_y * sin(x*a)
noise1 = max_y * 1/10 * sin(x*a*10)
plot(x, y, type="l", col="red", ylim=range(-1.5*max_y,1.5*max_y,5))
points(x, y + noise1, col="green", pch=20)
points(x, noise1, col="yellow", pch=20)
更新2:使用signal
包中的Butterworth滤波器建议我得到以下结果:
library(signal)
bf <- butter(2, 1/50, type="low")
b <- filter(bf, y+noise1)
points(x, b, col="black", pch=20)
bf <- butter(2, 1/25, type="high")
b <- filter(bf, y+noise1)
points(x, b, col="black", pch=20)
计算有些费力,signal.pdf几乎没有提供关于
W
应该取什么值的提示,但是原始Octave文档至少提到了弧度,这让我有了头绪。我原始图表中的值没有考虑任何特定频率,因此我最终得到了以下不太简单的频率:f_low = 1/500 * 2 = 1/250
,f_high = 1/500 * 2*10 = 1/25
和采样频率f_s = 500/500 = 1
。然后我选择了一个介于低频和高频之间的f_c作为低通/高通滤波器的截止频率(分别为1/100和1/50)。