Switch to side-by-side view

--- a
+++ b/preprocessOfApneaECG/BioSigKit/Algorithms/PsC.m
@@ -0,0 +1,58 @@
+function [PsC_s,best_lag] = PsC(template,sig,lag)
+%% Psuedo_Correlation
+% Computes the Pseudo Correlation , a finer approach than normal
+% correlation for template matching. Please review the paper below in order
+% to see why it is much more accurate for the pattern recognition
+%% Input
+% template : template to be searched in the signal
+% sig: the signal that we are searching the template in
+% lag : does PsC for the lag between -lag : lag, it should be in samples,
+% for example half the length of the input signal
+%% Output :
+% PsC_score : maximum score at best lag
+%% Algorithm is based on the following paper :
+% H. Sedghamiz and Daniele Santonocito,'Unsupervised Detection and
+% Classification of Motor Unit Action Potentials in Intramuscular 
+% Electromyography Signals', The 5th IEEE International Conference on
+% E-Health and Bioengineering - EHB 2015, At Iasi-Romania.
+%% Author: 
+% Hooman Sedghamiz
+% June 2015, Linkoping University
+% Please cite the paper if any of the methods were helpfull
+
+%% Script Begins here, Do not Change
+%%
+if nargin < 3
+    lag = round(length(sig)/2);
+end
+
+
+template = template(:);
+sig = sig(:);
+
+m = length(template);
+n = length(sig);
+
+ if m > n
+   error('Length of Template should be equal or smaller than pattern'); 
+ end
+
+ sig = [zeros(lag,1);sig;zeros(2*lag,1)];
+ p4 = zeros(1,m);
+ normaliz = zeros(1,m);
+ PsC_score = zeros(1,n);
+ 
+ for k = 0  : 2*lag
+     for i = 1 : m
+         p1 = (template(i)*sig(k+i));
+         p2 = abs(template(i) - sig(k+i));
+         p3 = max(abs(template(i)),abs(sig(k+i)));
+         p4(i) = (p1 - p2*p3);
+         normaliz(i) = p3^2;
+     end
+   PsC_score(k+1) = max(sum(p4)/sum(normaliz),0);
+ end
+
+ [PsC_s,best_lag] = max(PsC_score);
+ best_lag = best_lag - (lag + 1);
+end
\ No newline at end of file