wiener_filter.py 文件源码

python
阅读 27 收藏 0 点赞 0 评论 0

项目:pyEMG 作者: agamemnonc 项目源码 文件源码
def fit(self, X, Y):
        X = np.asarray(X)
        Y = np.asarray(Y)
        assert X.shape[1] == self.num_feat
        assert Y.shape[1] == self.num_pred
        assert X.shape[0] == Y.shape[0]

        # Store output minimum and maximum values
        self._output_range = np.max(Y, axis = 0) - np.min(Y, axis = 0)
        self._output_max = np.max(Y, axis = 0)
        self._output_min = np.min(Y, axis = 0)


        # Center and standardize inputs
        X  = self._center_input(X)
        X = self._standardize_input(X)
        #  Center and standardize outputs
        Y = self._center_output(Y)
        Y = self._standardize_output(Y)

        numio = self.total_io
        R =  self._covf(np.hstack((X,Y)),self.num_lags)
        PHI = np.empty((2*self.num_lags-1,numio**2), dtype = float,  order='C')

        for ii in xrange(numio):
            for jj in xrange(numio):
                PHI[:,ii+jj*numio] = np.hstack((R[jj+ii*numio,np.arange(self.num_lags-1,0,-1)], R[ii+jj*numio,:]))

        Nxxr = np.arange(self.num_lags-1, 2*(self.num_lags-1)+1,1)
        Nxxc = np.arange(self.num_lags-1,-1,-1)
        Nxy = np.arange(self.num_lags-1, 2*(self.num_lags-1)+1)


        # Solve matrix equations to identify filters
        PX = np.empty((self.num_feat*self.num_lags,self.num_feat*self.num_lags), dtype=float, order='C')
        for ii in xrange(self.num_feat):
            for jj in xrange(self.num_feat):
                c_start = ii*self.num_lags
                c_end = (ii+1)*self.num_lags
                r_start = jj*self.num_lags
                r_end = (jj+1)*self.num_lags
                PX[r_start:r_end,c_start:c_end] = toeplitz(PHI[Nxxc,ii+(jj)*numio],PHI[Nxxr,ii+(jj)*numio])

        PXY = np.empty((self.num_feat*self.num_lags, self.num_pred), dtype=float, order='C')
        for ii in xrange(self.num_feat):
            for jj in xrange(self.num_feat,self.num_feat+self.num_pred,1):
                r_start = ii*self.num_lags
                r_end = (ii+1)*self.num_lags
                c_ind = jj-self.num_feat
                PXY[r_start:r_end,c_ind] = PHI[Nxy,ii+(jj)*numio]

        self.H = np.linalg.solve((PX + self.reg_lambda*np.ones_like(PX)), PXY)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号