Hi, so I want to detect anomal peaks in ECG signal using 1d convolution by sliding normal looking ECG peak across the signal. Here is function that I’m using.
def convolve(signal, filt, stride):
signalt = torch.from_numpy(signal).float().view(1,1,-1)
filt = torch.from_numpy(filt).view(1,1,-1)
output = F.conv1d(input=signalt, weight=filt, stride=stride, padding=0)
return output.numpy().ravel()
The output I get is an ecg signal that has reduced anomaly peaks - I want to know which one those are so I was trying to get the difference between the original and the output, however the length does not match.
ef explain_anomalies(y, fil, stride, sigma=1.0):
avg = convolve(y, fil, stride).tolist()
residual = y - avg
# Calculate the variation in the distribution of the residual
std = np.std(residual)
return {'standard_deviation': round(std, 3),
'anomalies_dict': collections.OrderedDict([(index, y_i) for
index, y_i, avg_i in zip(count(), y, avg)
if (y_i > avg_i + (sigma*std)) | (y_i < avg_i - (sigma*std))])}
after calling explain_anomalies(ecg[‘signal’], sig_filt, stride=1)
where sig_filt is normal QRS peak that I want to do convolution with I get
<ipython-input-115-71fe810b0625> in explain_anomalies(y, fil, stride, sigma)
25
26 avg = convolve(y, fil, stride).tolist()
---> 27 residual = y - avg
28 # Calculate the variation in the distribution of the residual
29 std = np.std(residual)
ValueError: operands could not be broadcast together with shapes (71006,) (70977,)
Why does convolution reduce the numer of samples even though I have stride set to 1?