Source code for spike.plugins.Linear_prediction

#!/usr/bin/env python 
# encoding: utf-8

"""plugin for the Linear Prediction algos into NPKDATA

"""

from __future__ import print_function
import unittest
from spike import NPKError
from spike.NPKData import NPKData_plugin
from spike.Algo.Linpredic import burgr, burgc, predict

[docs]def lpext2d(npkd, final_size, lprank=10, algotype="burg"): """ extends a 2D FID in F1 up to final_size, using lprank coefficients, and algotype mode """ npkd.check2D() init_size = npkd.size1 if lprank>init_size/2 or lprank<2: NPKError("error with lprank",data=npkd) if algotype=="burg": if npkd.axis1.itype == 1: method = burgc else: method = burgr else: raise Exception("Only burg algorithm implemented in lpext for the moment") k = npkd.axis1.itype+1 # 1 or 2 npkd.chsize(sz1=k*final_size) # first extend for i,r in enumerate(npkd.xcol()): buf = r.get_buffer()[0:init_size] # truncate coeffs = method(lprank, buf) predicted = predict(buf, coeffs, final_size) # and predict r.set_buffer(predicted) npkd.set_col(i,r) return npkd
[docs]def lpext1d(npkd, final_size, lprank=10, algotype="burg"): """ extends the current FID up to final_size, using lprank coefficients, and algotype mode """ npkd.check1D() if lprank>npkd.size1/2 or lprank<2: NPKError("error with lprank",data=npkd) if algotype=="burg": if npkd.axis1.itype == 1: method = burgc else: method = burgr else: raise Exception("Only burg algorithm implemented in lpext for the moment") coeffs = method(lprank, npkd.get_buffer()) predicted = predict(npkd.buffer, coeffs, final_size) npkd.set_buffer(predicted) npkd.adapt_size() return npkd
[docs]def lpext(npkd, final_size, lprank=10, algotype="burg"): """ extends a 1D FID or 2D FID in F1 up to final_size, using lprank coefficients, and algotype mode """ if npkd.dim == 1: return lpext1d(npkd, final_size, lprank=10, algotype="burg") elif npkd.dim == 2: return lpext2d(npkd, final_size, lprank=10, algotype="burg") else: raise Exception("Not implemented yet")
[docs]class LinpredicTests(unittest.TestCase):
[docs] def setUp(self): self.verbose = 1 # verbose >0 switches on messages
[docs] def announce(self): if self.verbose >0: print (self.shortDescription())
[docs] def test_log(self): """testing log""" import math self.announce() x = 0.0 y = math.log(1.0) self.assertAlmostEqual(x, y )
NPKData_plugin("lpext", lpext)