Skip to content
Snippets Groups Projects
Commit 431cdbe0 authored by Eric Schoeneberg's avatar Eric Schoeneberg :rocket:
Browse files

[ADD] low-pass tested and work. high-pass added, but not tested

parent 377e65df
Branches
No related tags found
No related merge requests found
/**/filter_signal: /**/filter_signal:
ros__parameters: ros__parameters:
lowpass_cuttoff_frequency: 5.0 lowpass_cuttoff_frequency: 20.0
signal_topic: sample_wave signal_topic: sample_wave
use_sim_time: false use_sim_time: false
...@@ -21,3 +21,28 @@ class LowPassFilter(): ...@@ -21,3 +21,28 @@ class LowPassFilter():
filtered_signal = current_signal*(self.sample_time/(self.tau + self.sample_time)) + self.past_filtered_signal*(self.tau/(self.tau + self.sample_time)) filtered_signal = current_signal*(self.sample_time/(self.tau + self.sample_time)) + self.past_filtered_signal*(self.tau/(self.tau + self.sample_time))
self.past_filtered_signal = filtered_signal self.past_filtered_signal = filtered_signal
return filtered_signal return filtered_signal
class HighPassFilter():
def __init__(self, cuttoff_frequency, sample_time):
"""
Implements a first-order low-pass filter.
y_k = alpha*(y_{k-1} + x_k - x_{k-1})
where:
delta_t = sample_time
tau = 1/(2*pi*cuttoff_frequency)
alpha = tau/(tau + delta_t)
according to: https://en.wikipedia.org/wiki/High-pass_filter
"""
self.cuttoff_frequency = cuttoff_frequency
self.sample_time = sample_time
self.tau = 1/(2*np.pi*self.cuttoff_frequency)
self.alpha = self.tau/(self.tau + self.sample_time)
self.past_filtered_signal = 0.0
self.past_signal = 0.0
def filter(self, current_signal):
filtered_signal = self.alpha*(self.past_filtered_signal + current_signal - self.past_signal)
self.past_signal = current_signal
self.past_filtered_signal = filtered_signal
return filtered_signal
\ No newline at end of file
/**/sample_signal: /**/sample_signal:
ros__parameters: ros__parameters:
publisher_frequency: 50.0 # Hz publisher_frequency: 200.0 # Hz
base_signal: false base_signal: false
base_signal_initial_value: 0.0 base_signal_initial_value: 0.0
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
# To satisfy Shannon-Nyquist sampling theorem -> 2*signal_frequency < publisher_frequency. # To satisfy Shannon-Nyquist sampling theorem -> 2*signal_frequency < publisher_frequency.
sine_wave: true sine_wave: true
sine_wave_components: [ 2.0, 20.0, 0.0, # Frequency, amplitude, phase shift(radians) pairs sine_wave_components: [ 2.0, 20.0, 0.0, # Frequency, amplitude, phase shift(radians) pairs
10.0, 10.0, 1.57, # Add as much as needed 80.0, 10.0, 1.57, # Add as much as needed
#5.0, 3.0, 3.14 #5.0, 3.0, 3.14
] ]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment