TEAP (Toolbox for Emotion Analysis using Physiological Signals) doc
filterECG128Hz.m
Go to the documentation of this file.
1 %> @file filterECG128Hz.m
2 function [filtdata] = filterECG128Hz(data)
3 
4 % [filtdata] = filterECG128Hz(data);
5 % apply a zerophase FIR filter (coeffs designed with sptool)
6 % Least Sq. FIR LP & HP filters (cascaded): 70dB 0.05-40Hz 1dB ripple.
7 % Sampling Frequency of Fs = 128.
8 %
9 % Should work nicely for 16bit, 256Hz ECG. You may experince
10 % some ringing at turning points, but that's FIR filters for you.
11 % You might like to try wavelets for a better filter
12 %
13 % These routines are made available under the GNU general public license.
14 % If you have not received a copy of this license, please download from
15 % http://www.gnu.org/
16 %
17 % Please distribute (and modify) freely, commenting where you have
18 % added modifications. The author would appreciate correspondence
19 % regarding corrections, modifications, improvements etc.
20 %
21 % G. Clifford : gari@ieee.org
22 
23 % sampling frequency
24 Fs = 128; % Hz
25 
26 % Data should be zeromeaned before calling this function
27 data = data - mean(data);
28 
29 % set up transfer function
30 %0.00128 1.28 & 35-45Hz
31 denominator = 1;
32 numerator_lp = [
33  -7.836313016322635e-03
34  -1.896972756320189e-02
35  -5.175330833579545e-03
36  1.828346656167859e-02
37  -6.018872954550802e-04
38  -1.897562067220059e-02
39  2.024098477556695e-02
40  2.007552016297064e-02
41  -4.029205517855476e-02
42  3.980639054552623e-03
43  7.022378021831376e-02
44  -5.937364415063083e-02
45  -8.822946558472169e-02
46  3.032906360635707e-01
47  5.996608499295303e-01
48  3.032906360635707e-01
49  -8.822946558472169e-02
50  -5.937364415063083e-02
51  7.022378021831376e-02
52  3.980639054552623e-03
53  -4.029205517855476e-02
54  2.007552016297064e-02
55  2.024098477556695e-02
56  -1.897562067220059e-02
57  -6.018872954550802e-04
58  1.828346656167859e-02
59  -5.175330833579545e-03
60  -1.896972756320189e-02
61  -7.836313016322635e-03
62 ];
63 
64 
65 numerator_hp = [
66  -5.272437301928293e-04
67  -1.270087347478445e-04
68  -1.421348135287156e-04
69  -1.582961734171513e-04
70  -1.755764587237310e-04
71  -1.939486402411108e-04
72  -2.135296230579367e-04
73  -2.342715794110092e-04
74  -2.563093703085422e-04
75  -2.796160181433441e-04
76  -3.043014698229107e-04
77  -3.303453248658040e-04
78  -3.578455028268245e-04
79  -3.867214105939904e-04
80  -4.170888923036170e-04
81  -4.488811733969728e-04
82  -4.822063006316578e-04
83  -5.170197946280047e-04
84  -5.535253395139226e-04
85  -5.916625148888152e-04
86  -6.316044529097936e-04
87  -6.732081327790902e-04
88  -7.165788660268917e-04
89  -7.614673946729495e-04
90  -8.081236729920874e-04
91  -8.564379420809926e-04
92  -9.069404054062480e-04
93  -9.592891108521169e-04
94  -1.013520022388740e-03
95  -1.068455050967581e-03
96  -1.126689269663744e-03
97  -1.186204883152881e-03
98  -1.247380114262856e-03
99  -1.310856912732174e-03
100  -1.375900461340159e-03
101  -1.443041461735466e-03
102  -1.511885029416557e-03
103  -1.582738786552247e-03
104  -1.655320583005337e-03
105  -1.729893353369970e-03
106  -1.806203460527855e-03
107  -1.884446397624664e-03
108  -1.964430802275773e-03
109  -2.046262955654651e-03
110  -2.129750428836313e-03
111  -2.215037813560021e-03
112  -2.301981811742379e-03
113  -2.390672229028491e-03
114  -2.480975908659032e-03
115  -2.572931105092679e-03
116  -2.666360748382136e-03
117  -2.761304979221734e-03
118  -2.857698150519032e-03
119  -2.955598535068774e-03
120  -3.054901001596308e-03
121  -3.155478224722803e-03
122  -3.257211616317062e-03
123  -3.360192620167190e-03
124  -3.464496103258388e-03
125  -3.569633821553856e-03
126  -3.675798007866096e-03
127  -3.783106411027402e-03
128  -3.891012640258272e-03
129  -3.999917962979201e-03
130  -4.109378741483071e-03
131  -4.219573587392301e-03
132  -4.330206242883826e-03
133  -4.441415505603127e-03
134  -4.552895068871517e-03
135  -4.664787674933710e-03
136  -4.776796783833356e-03
137  -4.888968546054471e-03
138  -5.001078813544399e-03
139  -5.113207893538720e-03
140  -5.225099919404130e-03
141  -5.336816346211259e-03
142  -5.448125259639512e-03
143  -5.559029938118835e-03
144  -5.669293181689946e-03
145  -5.778976225031504e-03
146  -5.887879122882245e-03
147  -5.996012432011148e-03
148  -6.103126173593918e-03
149  -6.209214132300607e-03
150  -6.314120595416707e-03
151  -6.417882343141420e-03
152  -6.520214636498100e-03
153  -6.621088290402421e-03
154  -6.720450076732404e-03
155  -6.818237948419261e-03
156  -6.914128204056832e-03
157  -7.008372785989206e-03
158  -7.100533958060398e-03
159  -7.190766902504709e-03
160  -7.278807347187491e-03
161  -7.364733068710562e-03
162  -7.448280274431376e-03
163  -7.529573080376522e-03
164  -7.608284813103398e-03
165  -7.684521116446521e-03
166  -7.758085897312433e-03
167  -7.829019629435470e-03
168  -7.897106543328992e-03
169  -7.962444021838374e-03
170  -8.024797816710869e-03
171  -8.084212682808753e-03
172  -8.140518300829559e-03
173  -8.193808564001160e-03
174  -8.243881936890022e-03
175  -8.290796858484446e-03
176  -8.334367833865763e-03
177  -8.374699271329103e-03
178  -8.411637628938252e-03
179  -8.445234427388959e-03
180  -8.475297677477069e-03
181  -8.501979217581199e-03
182  -8.525132171625144e-03
183  -8.544799261897136e-03
184  -8.560853979448457e-03
185  -8.573474502979061e-03
186  -8.582371323167616e-03
187  -8.587790488764461e-03
188  9.914104520892446e-01
189  -8.587790488764461e-03
190  -8.582371323167616e-03
191  -8.573474502979061e-03
192  -8.560853979448457e-03
193  -8.544799261897136e-03
194  -8.525132171625144e-03
195  -8.501979217581199e-03
196  -8.475297677477069e-03
197  -8.445234427388959e-03
198  -8.411637628938252e-03
199  -8.374699271329103e-03
200  -8.334367833865763e-03
201  -8.290796858484446e-03
202  -8.243881936890022e-03
203  -8.193808564001160e-03
204  -8.140518300829559e-03
205  -8.084212682808753e-03
206  -8.024797816710869e-03
207  -7.962444021838374e-03
208  -7.897106543328992e-03
209  -7.829019629435470e-03
210  -7.758085897312433e-03
211  -7.684521116446521e-03
212  -7.608284813103398e-03
213  -7.529573080376522e-03
214  -7.448280274431376e-03
215  -7.364733068710562e-03
216  -7.278807347187491e-03
217  -7.190766902504709e-03
218  -7.100533958060398e-03
219  -7.008372785989206e-03
220  -6.914128204056832e-03
221  -6.818237948419261e-03
222  -6.720450076732404e-03
223  -6.621088290402421e-03
224  -6.520214636498100e-03
225  -6.417882343141420e-03
226  -6.314120595416707e-03
227  -6.209214132300607e-03
228  -6.103126173593918e-03
229  -5.996012432011148e-03
230  -5.887879122882245e-03
231  -5.778976225031504e-03
232  -5.669293181689946e-03
233  -5.559029938118835e-03
234  -5.448125259639512e-03
235  -5.336816346211259e-03
236  -5.225099919404130e-03
237  -5.113207893538720e-03
238  -5.001078813544399e-03
239  -4.888968546054471e-03
240  -4.776796783833356e-03
241  -4.664787674933710e-03
242  -4.552895068871517e-03
243  -4.441415505603127e-03
244  -4.330206242883826e-03
245  -4.219573587392301e-03
246  -4.109378741483071e-03
247  -3.999917962979201e-03
248  -3.891012640258272e-03
249  -3.783106411027402e-03
250  -3.675798007866096e-03
251  -3.569633821553856e-03
252  -3.464496103258388e-03
253  -3.360192620167190e-03
254  -3.257211616317062e-03
255  -3.155478224722803e-03
256  -3.054901001596308e-03
257  -2.955598535068774e-03
258  -2.857698150519032e-03
259  -2.761304979221734e-03
260  -2.666360748382136e-03
261  -2.572931105092679e-03
262  -2.480975908659032e-03
263  -2.390672229028491e-03
264  -2.301981811742379e-03
265  -2.215037813560021e-03
266  -2.129750428836313e-03
267  -2.046262955654651e-03
268  -1.964430802275773e-03
269  -1.884446397624664e-03
270  -1.806203460527855e-03
271  -1.729893353369970e-03
272  -1.655320583005337e-03
273  -1.582738786552247e-03
274  -1.511885029416557e-03
275  -1.443041461735466e-03
276  -1.375900461340159e-03
277  -1.310856912732174e-03
278  -1.247380114262856e-03
279  -1.186204883152881e-03
280  -1.126689269663744e-03
281  -1.068455050967581e-03
282  -1.013520022388740e-03
283  -9.592891108521169e-04
284  -9.069404054062480e-04
285  -8.564379420809926e-04
286  -8.081236729920874e-04
287  -7.614673946729495e-04
288  -7.165788660268917e-04
289  -6.732081327790902e-04
290  -6.316044529097936e-04
291  -5.916625148888152e-04
292  -5.535253395139226e-04
293  -5.170197946280047e-04
294  -4.822063006316578e-04
295  -4.488811733969728e-04
296  -4.170888923036170e-04
297  -3.867214105939904e-04
298  -3.578455028268245e-04
299  -3.303453248658040e-04
300  -3.043014698229107e-04
301  -2.796160181433441e-04
302  -2.563093703085422e-04
303  -2.342715794110092e-04
304  -2.135296230579367e-04
305  -1.939486402411108e-04
306  -1.755764587237310e-04
307  -1.582961734171513e-04
308  -1.421348135287156e-04
309  -1.270087347478445e-04
310  -5.272437301928293e-04
311 ];
312 
313 % low pass filter
314 aff_lp = filtfilt(numerator_lp, denominator, data);
315 
316 % Don't high pass filter it if you don't want to remove the baseline
317 % fluctuations due to resp, BP? and electrode noise?
318 filtdata = filtfilt(numerator_hp, denominator, aff_lp);
319 
320 % correct for amplitude distortion. !!!??????
321 %mean_s = mean(new_data);
322 %mean_a = mean(aff_hp);
323 %a = aff*(mean_s/mean_a);
324 
filterECG128Hz
function filterECG128Hz(in data)