design_filter  R Documentation 
Provides 'FIR' and 'IIR' filter options; default is 'FIR', see also
design_filter_fir
; for 'IIR' filters, see
design_filter_iir
.
design_filter(
sample_rate,
data = NULL,
method = c("fir_kaiser", "firls", "fir_remez", "butter", "cheby1", "cheby2", "ellip"),
high_pass_freq = NA,
high_pass_trans_freq = NA,
low_pass_freq = NA,
low_pass_trans_freq = NA,
passband_ripple = 0.1,
stopband_attenuation = 40,
filter_order = NA,
...,
data_size = length(data)
)
sample_rate 
data sample rate 
data 
data to be filtered, can be optional ( 
method 
filter method, options are 
high_pass_freq , low_pass_freq 
highpass or lowpass frequency,
see 
high_pass_trans_freq , low_pass_trans_freq 
transition bandwidths,
see 
passband_ripple 
allowable passband ripple in decibel; default is

stopband_attenuation 
minimum stopband attenuation (in decibel) at
transition frequency; default is 
filter_order 
suggested filter order; 'RAVE' may or may not adopt this suggestion depending on the data and numerical feasibility 
... 
passed to filter generator functions 
data_size 
used by 'FIR' filter design to determine maximum order,
ignored in 'IIR' filters; automatically derived from 
If data
is specified and nonempty, this function returns
filtered data via forward and backward filtfilt
; if data
is
NULL
, then returns the generator function.
sample_rate < 200
t < seq(0, 10, by = 1 / sample_rate)
x < sin(t * 4 * pi) + sin(t * 20 * pi) +
2 * sin(t * 120 * pi) + rnorm(length(t), sd = 0.4)
#  Using FIR 
# Lowpass filter
y1 < design_filter(
data = x,
sample_rate = sample_rate,
low_pass_freq = 3, low_pass_trans_freq = 0.5
)
# Bandpass cheby1 filter 812 Hz with custom transition
y2 < design_filter(
data = x,
method = "cheby1",
sample_rate = sample_rate,
low_pass_freq = 12, low_pass_trans_freq = .25,
high_pass_freq = 8, high_pass_trans_freq = .25
)
y3 < design_filter(
data = x,
sample_rate = sample_rate,
low_pass_freq = 80,
high_pass_freq = 30
)
oldpar < par(mfrow = c(2, 1),
mar = c(3.1, 2.1, 3.1, 0.1))
plot(t, x, type = 'l', xlab = "Time", ylab = "",
main = "Mixture of 2, 10, and 60Hz", xlim = c(0,1))
# lines(t, y, col = 'red')
lines(t, y3, col = 'green')
lines(t, y2, col = 'blue')
lines(t, y1, col = 'red')
legend(
"topleft", c("Input", "Low: 3Hz", "Pass 812Hz", "Pass 3080Hz"),
col = c(par("fg"), "red", "blue", "green"), lty = 1,
cex = 0.6
)
# plot pwelch
pwelch(x, fs = sample_rate, window = sample_rate * 2,
noverlap = sample_rate, plot = 1, ylim = c(100, 10))
pwelch(y1, fs = sample_rate, window = sample_rate * 2,
noverlap = sample_rate, plot = 2, col = "red")
pwelch(y2, fs = sample_rate, window = sample_rate * 2,
noverlap = sample_rate, plot = 2, col = "blue")
pwelch(y3, fs = sample_rate, window = sample_rate * 2,
noverlap = sample_rate, plot = 2, col = "green")
#  Clean this demo 
par(oldpar)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.