Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time
65 lines (52 sloc) 3.12 KB


IOCBio provides a C library libfperiod and Python package iocbio.fperiod with tools to determine the fundamental period of a signal with an application to estimating sarcomere length of a single cardiomyocyte from its microscopy image. The underlying theory of the method is described in a paper

This page describes how to use the provided software. Please file all found bugs and feature requests to Issues.

Usage from a C program

First, download libfperiod source code. The source code consists of three files:

  • libfperiod.c - source code to be compiled and linked with your C program
  • libfperiod.h - header file to be included by the C program
  • demo.c - demo code illustrating the basic usage of determining the fundamental period of a sine function.

Second, study the demo program above that shows how to call the iocbio_fperiod function from your C program. Here follows an example session:

$ cc demo.c libfperiod.c -o demo -lm
$ ./demo 20 5.4
Signal definition: f[i]=sin(2*pi*i/5.400000), i=0,1,..,19
Number of repetitive patterns in the signal=3.703704
Detrend algorithm is disabled
Expected  fundamental period=5.400000
Estimated fundamental period=5.389328
Relative error of the estimate=0.197630%

The libfperiod API exposes the following functions to users (see libfperiod.h for C definitions):

  • iocbio_fperiod - compute fundamental period of a sequence
  • iocbio_fperiod_cached - same as iocbio_fperiod but with extra cache argument that can be used to avoid malloc/free cycle in repetitive computations of the fundamental period.
  • iocbio_objective - evaluate the similarity measure that defines the fundamental period of a signal sequence as its first non-zero minimum point
  • iocbio_detrend - apply detrend algorithm to a signal sequence

Usage from a Python program

First, you must install iocbio Python package version 1.3 or newer.

Here follows an example Python session using the iocbio.fperiod package:

>>> from iocbio import fperiod
>>> print fperiod.fperiod.__doc__
fperiod - Function signature:
  period = fperiod(f,[initial_period,detrend,method])
Required arguments:
  f : input rank-2 array('d') with bounds (m,n)
Optional arguments:
  initial_period := 0.0 input float
  detrend := 0 input int
  method := 0 input int
Return objects:
  period : float

>>> from numpy import sin, arange, pi
>>> N = 20; i = arange(N)
>>> P = 5.4
>>> f = sin(2*pi*i/P)
>>> Pest = fperiod.fperiod(f)
>>> print 'Estimated fundamental period:',Pest
Estimated fundamental period: 5.3893279719
>>> print 'Relative error of the estimate:',(1-Pest/P)*100,'%'
Relative error of the estimate: 0.197630149933 %