diff --git a/measure.py b/measure.py
index b3e9139f31d05ca443cf51c60e3df10777ddd7a2..3033b3c5748af102cae1ff210a5a8bce5695d422 100644
--- a/measure.py
+++ b/measure.py
@@ -82,6 +82,25 @@ class OhmPiHardware:
         self.readings = np.array(_readings)
         self._pulse += 1
 
+    @property
+    def sp(self):
+        if len(self.readings[self.readings[:,2]==1, :]) < 1 or len(self.readings[self.readings[:,2]==-1, :]) < 1:
+            self.exec_logger.warning('Unable to compute sp: readings should at least contain one positive and one negative pulse')
+            return 0.
+        else:
+            n_pulses = int(np.max(self.readings[:, 1]))
+            polarity = np.array([np.mean(self.readings[self.readings[:, 1] == i, 2]) for i in range(n_pulses + 1)])
+            mean_vmn = []
+            mean_iab = []
+            for i in range(n_pulses + 1):
+                mean_vmn.append(np.mean(self.readings[self.readings[:, 1] == i, 4]))
+                mean_iab.append(np.mean(self.readings[self.readings[:, 1] == i, 3]))
+            mean_vmn = np.array(mean_vmn)
+            mean_iab = np.array(mean_iab)
+            print(f'Vmn: {mean_vmn}, Iab: {mean_iab}')
+            sp = np.mean(mean_vmn[np.ix_(polarity==1)] - mean_vmn[np.ix_(polarity==-1)]) / 2
+            return sp
+
     def _compute_tx_volt(self, best_tx_injtime=0.1, strategy='vmax', tx_volt=5,
                          vab_max=voltage_max, vmn_min=voltage_min):
         """Estimates best Tx voltage based on different strategies.
diff --git a/test_measure_with_ohmpi_card_3_15.py b/test_measure_with_ohmpi_card_3_15.py
index da60b4cb3d68a3ea392b6691ba23279aa660f04b..eca45fbb07faeef728ad590e1878584ed0c2ac07 100644
--- a/test_measure_with_ohmpi_card_3_15.py
+++ b/test_measure_with_ohmpi_card_3_15.py
@@ -8,11 +8,16 @@ from OhmPi.measure import OhmPiHardware
 k = OhmPiHardware()
 k.exec_logger.setLevel(logging.INFO)
 # Test #1:
-print('Testing _vab_pulse')
+print('Testing positive _vab_pulse')
 k._vab_pulse(vab=12, length=1., sampling_rate=k.rx.sampling_rate, polarity=1)
 r = k.readings[:,4]/k.readings[:,3]
 print(f'Mean resistance: {np.mean(r):.3f} Ohms, Dev. {100*np.std(r)/np.mean(r):.1f} %')
 print(f'sampling rate: {k.rx.sampling_rate:.1f} ms, mean sample spacing: {np.mean(np.diff(k.readings[:,0]))*1000.:.1f} ms')
+print('Testing negative _vab_pulse')
+k._vab_pulse(vab=12, length=1., sampling_rate=k.rx.sampling_rate, polarity=-1)
+r = k.readings[:,4]/k.readings[:,3]
+print(f'Mean resistance: {np.mean(r):.3f} Ohms, Dev. {100*np.std(r)/np.mean(r):.1f} %')
+print(f'sampling rate: {k.rx.sampling_rate:.1f} ms, mean sample spacing: {np.mean(np.diff(k.readings[:,0]))*1000.:.1f} ms')
 
 # Test #2:
 print('\n\nTesting vab_square_wave')
@@ -42,8 +47,8 @@ mean_vmn = np.array(mean_vmn)
 mean_iab = np.array(mean_iab)
 print(f'Vmn: {mean_vmn}, Iab: {mean_iab}')
 sp = np.mean(mean_vmn[np.ix_([0,2,4])]-mean_vmn[np.ix_([1,3,5])])/2
-print(f'SP: {sp} mV')
-r = ((k.readings[:,4]+k.readings[:,1]*sp)/k.readings[:,3])
+print(f'SP: {sp} mV, sp property: {k.sp}')
+r = ((k.readings[:,4]-k.readings[:,2]*sp)/k.readings[:,3])
 print(f'Mean resistance with sp correction : {np.mean(r):.3f} Ohms, Dev. {100*np.std(r)/np.mean(r):.1f} %')
 change_config('config_default.py', verbose=False)