I have already got the data from the real robot, but the data is too wavy.
So I choose a filter same as the paper by my supervisor to obtain a smoother curve.
I use python to implement because my learning machine ELM also uses python, so after the data are filtered, they will directly run in ELM.

Define

scipy.signal.butter(N, Wn, btype, analog, output, fs)

Input

  • N
    the order
  • Wn
    the normalization of cutoff frequency
    Wn = 2*cutoff_frequency/sampling_frequency
    note that 0<Wn<1
  • btype='low'
    type of filter
    {‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’}
  • analog=False
    True -> return an analog filter
    False -> return a digital filter
  • output='ba'
    type of output
    {numerator/denominator (‘ba’), pole-zero (‘zpk’), or second-order sections (‘sos’)}

Default is ‘ba’ for backwards compatibility, but ‘sos’ should be used for general-purpose filtering.

  • fs=None
    sampling frequency of the digital system

Return

corresponds to the type of output by input output='ba'

  • b, a
    Numerator (b) and denominator (a) polynomials of the IIR filter.

  • z, p
    Zeros, poles, and system gain of the IIR filter transfer function.

  • sos
    Second-order sections representation of the IIR filter.

scipy.signal.filtfilt(b, a, x, axis, padtype, padlen, method, irlen)
scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)

Input

b: 滤波器的分子系数向量

a: 滤波器的分母系数向量

x: 要过滤的数据数组。(array型)

axis: 指定要过滤的数据数组x的轴

padtype: 必须是“奇数”、“偶数”、“常数”或“无”。这决定了用于过滤器应用的填充信号的扩展类型。{‘odd’, ‘even’, ‘constant’, None}

padlen:在应用滤波器之前在轴两端延伸X的元素数目。此值必须小于要滤波元素个数- 1。(int型或None)

method:确定处理信号边缘的方法。当method为“pad”时,填充信号;填充类型padtype和padlen决定,irlen被忽略。当method为“gust”时,使用古斯塔夫森方法,而忽略padtype和padlen。{“pad” ,“gust”}

irlen:当method为“gust”时,irlen指定滤波器的脉冲响应的长度。如果irlen是None,则脉冲响应的任何部分都被忽略。对于长信号,指定irlen可以显著改善滤波器的性能。(int型或None)

Return

y: 滤波后的数据数组

Python code

Define the function

from scipy import signal
def butter_lowpass_filtfilt(self, data, order=4, cutoff, fs):
		wn = 2*cutoff/fs
		b, a = signal.butter(order, wn, 'lowpass', analog = False)
		output = signal.filtfilt(b, a, data, axis=0)
		return output 

Call the function

###### get input and output data ####### 
	X, T = robot.loadData(file_name_list)
######## filter output data ############
	file_T = robot.butter_lowpass_filtfilt(T.tolist())
# plot
	plot_figure(T,file_T,joint_i)

Result of filter

I use Butterworth Filter to filter my noise torque from the robot.
One important parameter is cutoff frequency.
too big -> overfitting
too small -> too smooth

Because the range of each joint is different, after I plot the image and check the accuracy, I set the cutoff of 7 joints as [3, 4, 4, 3, 2, 2, 2]

References

  1. [开发技巧]·Python实现信号滤波(基于scipy)
  2. scipy.signal.butter
①归一化处理。即令λ=ω/ωpλ=ω/ω_pλ=ω/ωp​ ②计算阶数,截止频率和通带频率比; ωsω_sωs​是阻带截止频率,ωpω_pωp​是通带截止频率,δsδ_sδs​是阻带应达到的最小衰减 λs=ωs/ωpλ_s=ω_s/ω_pλs​=ωs​/ωp​ N=log⁡(10(δs/10)−1)log⁡λsN=\frac{\log\sqrt{(10^{(δ_s/10)}-1)}}{log⁡λ_s }N=log⁡λs​log(10(δs​/10)−1)​​ ③构造归一化系统函数H butter n [Wl Wh] "stop" band reject filter with edges pi Wl and pi Wh radians">可用于matlab octave的巴特沃斯滤波器源码 butterworth filter butter n Wc low pass filter with cutoff pi Wc radians butter n Wc "high" high pass filter with cutoff pi Wc radians butter n [Wl Wh] band pass filter with edges pi Wl and pi Wh radians butter [更多] 1、滤波器基础知识 总的来说,滤波器可分为经典滤波器和现代滤波器两大类。经典滤波器是假定输入信号x(n)中的有用成分和希望去除的成分各自占有不同的频带。这样,当x(n)通过一个线性系统(滤波器)之后可以将欲去除的成分有效去除。如果信号和噪声的频谱相互重叠,那么经典滤波器将无能为力。 现代滤波器的主要内容是从含有噪声的数据记录中估计出信号的某些特征或信号本身。一旦信号被估计出,那么利用它们的统计特征,如自相关函数、功率谱等,导出一套最佳的估值算法,所得到的估计信号的信噪比会比原信号更高。典型的现代滤波器是维纳 滤波器的基本原理 射频滤波器是一个二端口网络,它在通带内提供信号传输,并在阻带内提供衰减特性,用以控制微波系统中某处的频率响应。设从一个端口输入一个具有均匀功率的频域信号,信号通过网络后,在另一端的负载上吸收功率谱不再是均匀的,也就是说,网络具有频率选择性,这就是一个滤波器。 滤波器的基础时谐振电路,它是一个二端口网络,对通带内频率信号呈现匹配传输,对阻 目录1. 概要2. IIR 和 FIR 滤波器的定义3. IIR滤波器和FIR滤波器的优缺点对比4. 双二次(Biquad)IIR 滤波器5. IIR滤波器设计指标(specifications)5.1 滤波器的频率响应特性5.2 模拟滤波器类型5.3 IIR滤波器结构5.3.1 Direct Form IIR structure5.3.2 Direct Form I IIR structure5.3.3 Direct Form II IIR structure6. 基于Matlab的SOS IIR滤波器设 贝塞尔滤波器 贝赛尔(Bessel)滤波器是具有最大平坦的群延迟(线性相位响应)的线性过滤器,即最平坦的幅度和相位响应,常用在音频天桥系统中。具有最平坦的幅度和相位响应。带通(通常为用户关注区域)的相位响应近乎呈线性。 1、 贝塞尔滤波器传递函数 Tn(s)=Bn(0)Bn(s/ω0)T_n(s) = \frac{B_n(0)}{B_n(s/\omega_0)}Tn​(s)=Bn​(s/ω0​)Bn​(0)​ 其中ω0\omega_0ω0​为期望截至频率 贝塞尔滤波器的相移与频率关系如下图所示。. 滤波器的设计 对实际的控制系统而言,采集到的原始信号往往是有噪声的,而噪声往往会对系统的稳定性能产生隐患;或为了提取有用的控制信号,滤除不必要的频域成分,数字滤波技术必不可少。 滤波器的分类 按频率特性分类:高通、低通、带通和带阻; 按冲激响应特性分类: FIR滤波器:有限冲激响应,滤波器的输出只与当前输入和有限历史输入有关,无反馈回路,不存在不稳定的问题,其传递函数只有零点,这种滤波器的冲... 滤波器原理 滤波器是一种选频装置,可以使信号中特定的频率成分通过,而极大地衰减其它频率成分。在测试装置中,利用滤波器的这种选频作用,可以滤除干扰噪声或进行频谱分析。 二、滤波器分类 ⒈根据滤波器的选频作用分类 ⑴ 低通滤波器  从0~f2频率之间,幅频特性平直,它可以使信号中低于f2的频率成分几乎不受衰减地通过,而高于f2的频率成分受到极大地衰减。 Matlab仿真 ⑵ 高通滤波器 与低通滤波相反,从频率f1~∞,其幅频特性平直。它使信号中高于f1的频率成分几乎不受... 今天给大侠带来FIR数字滤波器设计,由于篇幅较长,分三篇。今天带来第三篇,FIR数字滤波器设计,包括窗函数法设计FIR滤波器、频率采样法设计FIR滤波器以及基于firls函数和remez函数的最优化方法设计FIR滤波器。话不多说,上货。 这里也超链接了上、中两篇,方便参考学习。 FIR数字滤波器设计(上) FIR数字滤波器设计(中) 滤波器设计ButterWorth模拟低通滤波器切比雪夫1型模拟低通滤波器切比雪夫2型椭圆滤波器任意模拟滤波器设计 ButterWorth模拟低通滤波器 G(w)=20lg|H(jw)| BW模拟低通滤波器频域特性 其中,N为滤波器阶数,wc(截止频率)为3db截频 当w=0时,|Hjw|=1,当w=∞时,|Hjw|=0,在wc这一点衰耗值为10lg2=3db 设计步骤: 1、确定模拟滤波器阶数N 根据wp,ws,计算出Ap,As A(w)=-10lg|H(jw)|² N取整数即可 一、课题目的1、学会MATLAB的使用,掌握其程序设计方法,学会对信号进行分析和处理;2、掌握语音信号的采集、存储和时频分析;3、要求掌握IIR数字滤波器的设计原理、设计方法和设计步骤;4、学习用窗函数法设计FIR数字滤波器的原理及其设计步骤;5、了解学习GUI图形用户界面,进行实验程序的演示。二.实验内容1、录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图...