我现在在研究基于PPG去除运动伪影的方法,我看文献Motion Artifact Reduction in Photoplethysmographic Signals using Singular Value Decomposition中的去除效果不错,想着尝试一下使用SVD的方法去除运动伪影,但是效果较差,如下图。请问各位有什么改进的方法不?

附上代码:
HardThresholdLen = 300
WindowLen = 150
L = WindowLen
K = HardThresholdLen - WindowLen + 1
all_data = []
for i in range(0,len(data)-HardThresholdLen,HardThresholdLen):
g_temp = []
r_temp = []
ir_temp = []
for j in range(i,i+WindowLen):
r_temp.append(r_filted[j:HardThresholdLen+j])
r_Matrix = np.array(r_temp)
U, S, Vh = svd(r_Matrix, full_matrices=False)
Zh = np.zeros((Vh.shape))
for n in range(len(S)):
Zh[n,:] = S[n]*Vh[n,:]
RC = np.zeros((WindowLen,HardThresholdLen))
for num in range(U.shape[1]):
Xi = np.outer(U[:,num],Zh[num,:])
for k in range(HardThresholdLen):
sum=0
if(k<=L-1):
for p in range(k+1):
sum+=Xi[p,k-p]
RC[num,k] = sum/(k+1)
elif(k<=K-1):
for p in range(L):
sum+=Xi[p,k-p]
RC[num,k] = sum/L
elif(k<=HardThresholdLen-1):
for p in range(k-K+1,HardThresholdLen-K+1):
sum+=Xi[p,k-p]
RC[num,k] = sum/(HardThresholdLen-k)
plt.plot(RC[1,:]+RC[2,:],color='blue',label = 'predicted')
plt.plot(r_filted[i:i+HardThresholdLen],color='red',label = 'periodicity')
plt.legend()
plt.show()
all_data.append(RC[1,:]+RC[2,:])