Exemple #1
0
/** The continuous wavelet transform.
 * @source RS\_wav\_xform.c
 * @author Copyright (c), 1988, 2006 Insightful Corp.  All rights reserved.
 * @usage #itCall( "RS_wavelets_transform_continuous_wavelet", time.series, sampling.interval, filter.type, filter.arg, scale))#
 * @return                   An R ... containing ...
 * @param time.series        Pointer to an R object containing ... time.series
 * @param sampling.interval  Pointer to an R object containing ... sampling.interval
 * @param filter.type        Pointer to an R object containing ... filter.type
 * @param filter.arg         Pointer to an R object containing ... filter.arg
 * @param scale              Pointer to an R object containing ... scale
 * @see _wav_filter_type
 * @see wavuniv_filters_continuous
*/
EXTERN_R SEXP RS_wavelets_transform_continuous_wavelet(
 SEXP pr_time_series,
 SEXP pr_sampling_interval,
 SEXP pr_filter_type,
 SEXP pr_filter_arg,
 SEXP pr_scale )
{
  SEXP              pr_ret_result;         
  double            filter_arg;         
  double            sampling_interval;  
  mutil_data_type   type;               
  mutil_errcode     err;                
  univ_mat          result;                
  univ_mat          scale;              
  univ_mat          time_series;        
  void              *VPNULL = NULL;     
  wav_filter_type   filter_type;        
  memlist           list;

  /* Avoid lint warning */
  (void) whatssi;

  /* initialize memory list */
  MEMLIST_INIT( list );

  /* Conversion of input data ... */

  /* ... pr_time_series to time_series */
  READ_MATRIX_REGISTER( pr_time_series, &time_series );

  /* ... pr_sampling_interval to sampling_interval */
  DOUBLE_FROM_R( pr_sampling_interval, &sampling_interval );
  MEMLIST_FREE_ON_ERROR_SPLUS( err, &list, "Unable to convert double type argument pr_sampling_interval to sampling_interval" );

  /* ... pr_filter_type to filter_type */
  WAV_FILTER_TYPE_FROM_R( pr_filter_type, &filter_type );
  MEMLIST_FREE_ON_ERROR_SPLUS( err, &list, "Unable to convert wav_filter_type type argument pr_filter_type to filter_type" );

  /* ... pr_filter_arg to filter_arg */
  DOUBLE_FROM_R( pr_filter_arg, &filter_arg );
  MEMLIST_FREE_ON_ERROR_SPLUS( err, &list, "Unable to convert double type argument pr_filter_arg to filter_arg" );

  /* ... pr_scale to scale */
  READ_MATRIX_REGISTER( pr_scale, &scale );


  /* Call the function */
  err = wavuniv_transform_continuous_wavelet(
    &time_series,
    sampling_interval,
    filter_type,
    filter_arg,
    &scale,
    VPNULL,
    &result );
  CONVERT_MATRIX_AND_RETURN( wavuniv_transform_continuous_wavelet, &result, &pr_ret_result );
}
Exemple #2
0
/** Adaptive wavelet-based bootstrapping.
 * @source RS\_wav\_boot.c
 * @author Copyright (c), 1988, 2006 Insightful Corp.  All rights reserved.
 * @usage #.Call( "RS_wavelets_bootstrap", dwpt, filters, white.indices, n.realization))#
 * @return               An R ... containing ...
 * @param dwpt           Pointer to an R object containing ... dwpt
 * @param filters        Pointer to an R object containing ... filters
 * @param white.indices  Pointer to an R object containing ... white.indices
 * @param n.realization  Pointer to an R object containing ... n.realization
 * @see wavuniv_transform_packet_whitest
 * @see wavuniv_transform_packet
 * @see wavuniv_transform_packet_inverse
*/
EXTERN_R SEXP RS_wavelets_bootstrap(
 SEXP pr_dwpt,
 SEXP pr_filters,
 SEXP pr_white_indices,
 SEXP pr_n_realization )
{
  SEXP             pr_ret_result;   
  mat_set          dwpt;            
  mat_set          filters;         
  mat_set          result;          
  mutil_data_type  type;            
  mutil_errcode    err;             
  sint32           n_realization;   
  univ_mat         white_indices;   
  void             *VPNULL = NULL;  
  memlist          list;

  /* Avoid lint warning */
  (void) whatssi;

  /* initialize memory list */
  MEMLIST_INIT( list );

  /* Conversion of input data ... */

  /* ... pr_dwpt to dwpt */
  READ_MATSET_REGISTER( pr_dwpt, MUTIL_DOUBLE, &dwpt );

  /* ... pr_filters to filters */
  READ_MATSET_REGISTER( pr_filters, MUTIL_DOUBLE, &filters );

  /* ... pr_white_indices to white_indices */
  READ_MATRIX_REGISTER( pr_white_indices, &white_indices );

  /* ... pr_n_realization to n_realization */
  SINT32_FROM_R( pr_n_realization, &n_realization );

  /* Call the function */
  err = wavuniv_bootstrap(
    &dwpt,
    &filters,
    &white_indices,
    n_realization,
    VPNULL,
    &result );
  CONVERT_MATSET_AND_RETURN( wavuniv_bootstrap, &result, &pr_ret_result );
}
Exemple #3
0
/** One-sided autocovariance.
 * @source R\_mth\_var.c
 * @author Copyright (c), 1988, 2006 Insightful Corp.  All rights reserved.
 * @usage #.Call( "RS_math_acvs", time.series, biased, recenter))#
 * @return             An R ... containing ...
 * @param time.series  Pointer to an R object containing ... time.series
 * @param biased       Pointer to an R object containing ... biased
 * @param recenter     Pointer to an R object containing ... recenter
 * @see fra_spectral_density_function_direct
*/
EXTERN_R SEXP RS_math_acvs(
 SEXP pr_time_series,
 SEXP pr_biased,
 SEXP pr_recenter )
{
  SEXP             pr_ret_result;
  boolean          biased;
  boolean          recenter;
  mutil_data_type  type;
  mutil_errcode    err;
  univ_mat         result;
  univ_mat         time_series;
  void             *VPNULL = NULL;
  memlist          list;

  /* Avoid lint warning */
  (void) whatssi;

  /* initialize memory list */
  MEMLIST_INIT( list );

  /* Conversion of input data ... */

  /* ... pr_time_series to time_series */
  READ_MATRIX_REGISTER( pr_time_series, &time_series );

  /* ... pr_biased to biased */
  BOOLEAN_FROM_R( pr_biased, &biased );

  /* ... pr_recenter to recenter */
  BOOLEAN_FROM_R( pr_recenter, &recenter );

  /* Call the function */
  err = mthuniv_acvs(
    &time_series,
    biased,
    recenter,
    VPNULL,
    &result );
  CONVERT_MATRIX_AND_RETURN( mthuniv_acvs, &result, &pr_ret_result );
}
Exemple #4
0
/** The maximum overlap discrete wavelet packet transform (MODWPT).
 * @source RS\_wav\_modw.c
 * @author Copyright (c), 1988, 2006 Insightful Corp.  All rights reserved.
 * @usage #itCall( "RS_wavelets_transform_maximum_overlap_packet", time.series, filters, n.level))#
 * @return             An R ... containing ...
 * @param time.series  Pointer to an R object containing ... time.series
 * @param filters      Pointer to an R object containing ... filters
 * @param n.level      Pointer to an R object containing ... n.level
 * @see wavuniv_transform_maximum_overlap
 * @see wavuniv_transform_maximum_overlap_inverse
 * @see wavuniv_transform_packet_detail
*/
EXTERN_R SEXP RS_wavelets_transform_maximum_overlap_packet(
 SEXP pr_time_series,
 SEXP pr_filters,
 SEXP pr_n_level )
{
  SEXP             pr_ret_result;   
  mat_set          filters;         
  mat_set          result;          
  mutil_data_type  type;            
  mutil_errcode    err;             
  sint32           n_level;         
  univ_mat         time_series;     
  void             *VPNULL = NULL;  
  memlist          list;

  /* Avoid lint warning */
  (void) whatssi;

  /* initialize memory list */
  MEMLIST_INIT( list );

  /* Conversion of input data ... */

  /* ... pr_time_series to time_series */
  READ_MATRIX_REGISTER( pr_time_series, &time_series );

  /* ... pr_filters to filters */
  READ_MATSET_REGISTER( pr_filters, MUTIL_DOUBLE, &filters );

  /* ... pr_n_level to n_level */
  SINT32_FROM_R( pr_n_level, &n_level );

  /* Call the function */
  err = wavuniv_transform_maximum_overlap_packet(
    &time_series,
    &filters,
    n_level,
    VPNULL,
    &result );
  CONVERT_MATSET_AND_RETURN( wavuniv_transform_maximum_overlap_packet, &result, &pr_ret_result );
}
Exemple #5
0
/** One- or two-dimensional signal correlation, with arbitrary step and phase.
 * @source RS\_sig\_conv.c
 * @author Copyright (c), 1988, 2006 Insightful Corp.  All rights reserved.
 * @usage #.Call( "RS_signal_correlate", in.sig, kernel, row.step, col.step, row.overlap, col.overlap, boundary
 * @return             An RS ... containing ...
 * @param in.sig       Pointer to an RS object containing ... in.sig
 * @param kernel       Pointer to an RS object containing ... kernel
 * @param row.step     Pointer to an RS object containing ... row.step
 * @param col.step     Pointer to an RS object containing ... col.step
 * @param row.overlap  Pointer to an RS object containing ... row.overlap
 * @param col.overlap  Pointer to an RS object containing ... col.overlap
 * @param boundary     Pointer to an RS object containing ... boundary
 * @see siguniv_convolve
 * @see _mutil_boundary_type
 * @see Matrix Data Types
 * @see Interrupt Handling
*/
EXTERN_R SEXP RS_signal_correlate(
 SEXP pr_series,
 SEXP pr_kernel,
 SEXP pr_boundary)
{
  SEXP                 pr_ret_result;     
  mutil_boundary_type  boundary;            
  mutil_data_type      type;                
  mutil_errcode        err;                 
  univ_mat             series;              
  univ_mat             kernel;              
  univ_mat             result;             
  void                 *VPNULL = NULL;      
  memlist              list;
  sint32               n_series;
  sint32               n_kernel;
  sint32               n_out;

  /* Avoid lint warning */
  (void) whatssi;

  /* initialize memory list */
  MEMLIST_INIT( list );

  /* Conversion of input data ... */

  /* ... pr_series to series */
  READ_MATRIX_REGISTER( pr_series, &series );

  /* ... pr_kernel to kernel */
  READ_MATRIX_REGISTER( pr_kernel, &kernel );

  /* ... pr_boundary to boundary */
  err = mutil_boundary_type_from_R( pr_boundary, &boundary );
  CHECK_CONVERSION( mutil_boundary_type, pr_boundary, &boundary );

  /* initialize parameters */
  n_series = MATUNIV_NELEM( &series );
  n_kernel = MATUNIV_NELEM( &kernel );
  n_out    = n_series + n_kernel - 1;

  /* force the input vectors to be single-rows */
  series.mat.dblmat.ncol  = n_series;
  series.mat.dblmat.nrow  = 1;
  kernel.mat.dblmat.ncol  = n_kernel;
  kernel.mat.dblmat.nrow  = 1;

  /* allocate space for the result */
  err = matuniv_malloc_register( &result, 1, n_out, MUTIL_DOUBLE, &list );
  if ( err ){
    MUTIL_FREE_WARN( memlist,  &list );
    PROBLEM "Problem allocating and registering memory" ERROR;
  }

  /* Call the function */
  err = siguniv_convolve( &series, &kernel, 1, 1, 1, 1, boundary, VPNULL, &result );
  if ( err ){
    MUTIL_FREE_WARN( memlist, &list );
    PROBLEM "Problem calling siguniv_convolve() function" ERROR;
  }

  /* create the output RS object */
  err = matuniv_to_R( &result, (mutil_R_class_type) MUTIL_R_MATRIX, &pr_ret_result );
  MUTIL_FREE_WARN( memlist, &list );
  if ( err ) {
      PROBLEM "Unable to convert output data to RS format" ERROR;
  }

  return pr_ret_result;
}
Exemple #6
0
/** Extracts a discrete wavelet packet transform subset.
 * @source RS\_wav\_dwtc.c
 * @author Copyright (c), 1988, 2006 Insightful Corp.  All rights reserved.
 * @usage #itCall( "RS_wavelets_transform_packet_basis", dwpt, transform.indices, n.level))#
 * @return                   An R ... containing ...
 * @param dwpt               Pointer to an R object containing ... dwpt
 * @param transform.indices  Pointer to an R object containing ... transform.indices
 * @see wavuniv_transform_packet_convert_indices
 * @see wavuniv_transform_packet
 * @see wavuniv_transform_maximum_overlap_packet
 * @see _wav_dwpt_extra
 * @see wavuniv_transform_packet_inverse
*/
EXTERN_R SEXP RS_wavelets_transform_packet_basis(
 SEXP pr_dwpt,
 SEXP pr_transform_indices )
{
  SEXP             pr_ret_obj;         
  SEXP             tmpobj;
  mat_set          dwpt;               
  mat_set          result;             
  mutil_data_type  type;               
  mutil_errcode    err;                
  univ_mat         transform_indices;  
  void            *VPNULL = NULL;     
  wav_dwpt_extra   extra;  
  univ_mat         extra_atoms;
  univ_mat         extra_levelmap;
  sint32           i;
  memlist          list;

  /* Avoid lint warning */
  (void) whatssi;

  /* initialize memory list */
  MEMLIST_INIT( list );

  /* Conversion of input data ... */

  /* ... pr_dwpt to dwpt */
  READ_MATSET_REGISTER( pr_dwpt, MUTIL_DOUBLE, &dwpt );

  /* ... pr_transform_indices to transform_indices */
  READ_MATRIX_REGISTER( pr_transform_indices, &transform_indices );

  /* Call the function */
  err = wavuniv_transform_packet_basis(
    &dwpt,
    &transform_indices,
    VPNULL,
    &result,
    &extra );
  MUTIL_FREE_WARN( memlist, &list );
  if ( err ){
    PROBLEM "Problem calling wavuniv_transform_packet_basis() function" ERROR;
  }

  /* in the case where there are extra dwpt atoms that need to
     be stored, there will be memory allocated for the
     'extra' structure above. the easiest way to get this
     back to R is to pack everything into a list */

  if ( extra.nelem > 0 ){

    /* wrap universal matrix headers around extra matrices */
    err = matuniv_wrap_matrix( &extra_atoms, &(extra.atoms), MUTIL_DOUBLE);
    if ( err ){
      MUTIL_ERROR( "Unable to wrap universal matrix around extra atoms matrix" );
      PROBLEM "Problem creating R list" ERROR;
    }

    err = matuniv_wrap_matrix( &extra_levelmap, &(extra.levelmap), MUTIL_SINT32 );
    if ( err ){
      MUTIL_ERROR( "Unable to wrap universal matrix around extra levelmap matrix" );
      PROBLEM "Problem creating R list" ERROR;
    }

    /* create an R list object */
    PROTECT( pr_ret_obj = allocVector( VECSXP, result.nelem + 2 ) );

    /* create R matrix objects and pack the extra crystals into the list */

    for( i = 0; i < result.nelem; i++ ) {

      err = matuniv_to_R( &(result.mats[i]), (mutil_R_class_type) MUTIL_R_MATRIX, &tmpobj );
      if( err ){
	      PROBLEM "Problem adding DWPT crystal to R list" ERROR;
      }

      /*LINTED: cast OK, checked range */
      SET_VECTOR_ELT( pr_ret_obj, (int) i, tmpobj);
    }

    /* pack the extra atoms crystal into the R list */
    err = matuniv_to_R( &extra_atoms, (mutil_R_class_type) MUTIL_R_MATRIX, &tmpobj );
    if( err ){
      PROBLEM "Problem adding extra DWPT crystal to R list" ERROR;
    }

    /*LINTED: cast OK, checked range */
    SET_VECTOR_ELT( pr_ret_obj, (int) i++, tmpobj );

    /* finally, pack the levelmap vector into the list */
    err = matuniv_to_R( &extra_levelmap, (mutil_R_class_type) MUTIL_R_MATRIX, &tmpobj );
    if( err ){
      PROBLEM "Problem adding extra DWPT levelmap crystal to R list" ERROR;
    }

    /*LINTED: cast OK, checked range */
    SET_VECTOR_ELT( pr_ret_obj, (int) i, tmpobj );

    /* free the memory */

    MUTIL_FREE_WARN( matuniv, &extra_levelmap );
    MUTIL_FREE_WARN( matuniv, &extra_atoms );
    MUTIL_FREEALL_MATSET_WARN( &result );

    UNPROTECT(1);
  }
  else{

    err = matset_to_R_list( &result, &pr_ret_obj );
    MUTIL_FREEALL_MATSET_WARN( &result );
    if ( err ) {
      PROBLEM "Unable to convert output data to Splus format" ERROR;
    }
  }

  return pr_ret_obj;
}
Exemple #7
0
/** Conversion and validation of wavelet packet indices.
 * @source RS\_wav\_dwtc.c
 * @author Copyright (c), 1988, 2006 Insightful Corp.  All rights reserved.
 * @usage #itCall( "RS_wavelets_transform_packet_convert_indices", transform.indices, filters, n.level))#
 * @return                   An R ... containing ...
 * @param transform.indices  Pointer to an R object containing ... transform.indices
 * @see wavuniv_transform_packet
 * @see wavuniv_transform_maximum_overlap_packet
*/
EXTERN_R SEXP RS_wavelets_transform_packet_convert_indices(
 SEXP pr_transform_indices )
{
  SEXP                pr_ret_flat;        
  SEXP                pr_ret_level;       
  SEXP                pr_ret_obj;         
  SEXP                pr_ret_osc;         
  mutil_data_type     type;               
  mutil_errcode       err;                
  univ_mat            flat;               
  univ_mat            level;              
  univ_mat            osc;                
  univ_mat            transform_indices;  
  void                *VPNULL = NULL;     
  memlist          list;

  /* Avoid lint warning */
  (void) whatssi;

  /* initialize memory list */
  MEMLIST_INIT( list );

  /* Conversion of input data ... */

  /* ... pr_transform_indices to transform_indices */
  READ_MATRIX_REGISTER( pr_transform_indices, &transform_indices );

  /* Call the function */
  err = wavuniv_transform_packet_convert_indices(
    &transform_indices,
    VPNULL,
    &flat,
    &level,
    &osc );
  MEMLIST_FREE_ON_ERROR_SPLUS( err, &list, "Problem calling wavuniv_transform_packet_convert_indices() function" );
  err = memlist_member_register( &list, &flat, MEMTYPE_MATUNIV);
  MEMLIST_FREE_ON_ERROR_REGISTER( err, &list );
  err = memlist_member_register( &list, &level, MEMTYPE_MATUNIV);
  MEMLIST_FREE_ON_ERROR_REGISTER( err, &list );
  err = memlist_member_register( &list, &osc, MEMTYPE_MATUNIV);
  MEMLIST_FREE_ON_ERROR_REGISTER( err, &list );

  /* create the output R object */

  err = matuniv_to_R( &flat, (mutil_R_class_type) MUTIL_R_MATRIX, &pr_ret_flat );
  MEMLIST_FREE_ON_ERROR_SPLUS( err, &list, "Unable to convert output data to R format" );

  err = matuniv_to_R( &level, (mutil_R_class_type) MUTIL_R_MATRIX, &pr_ret_level );
  MEMLIST_FREE_ON_ERROR_SPLUS( err, &list, "Unable to convert output data to R format" );

  err = matuniv_to_R( &osc, (mutil_R_class_type) MUTIL_R_MATRIX, &pr_ret_osc );
  MEMLIST_FREE_ON_ERROR_SPLUS( err, &list, "Unable to convert output data to R format" );

  PROTECT( pr_ret_obj = allocVector( VECSXP, 3 ) );
  SET_VECTOR_ELT( pr_ret_obj, 0, pr_ret_flat );
  SET_VECTOR_ELT( pr_ret_obj, 1, pr_ret_level );
  SET_VECTOR_ELT( pr_ret_obj, 2, pr_ret_osc );
  UNPROTECT(1);

  /* free registered local memory */
  MUTIL_FREE_WARN( memlist, &list );

  return pr_ret_obj;
}
Exemple #8
0
/** The modulus maxima of a continuous wavelet transform.
 * @source RRS\_wav\_wtmm.c
 * @author Copyright (c), 1988, 2006 Insightful Corp.  All rights reserved.
 * @usage #.Call( "RS_wavelets_transform_continuous_wavelet_modulus_maxima", cwt, tolerance))#
 * @return           An R ... containing ...
 * @param cwt        Pointer to an R object containing ... cwt
 * @param tolerance  Pointer to an R object containing ... tolerance
 * @see wavuniv_transform_continuous_wavelet
 * @see wavuniv_transform_continuous_wavelet_modulus_maxima_tree
*/
EXTERN_R SEXP RS_wavelets_transform_continuous_wavelet_modulus_maxima(
 SEXP pr_cwt,
 SEXP pr_tolerance,
 SEXP pr_peak_type )
{
  SEXP             pr_ret_iscale;
  SEXP             pr_ret_itime;
  SEXP             pr_ret_obj;
  mutil_data_type  type;
  mutil_errcode    err;
  univ_mat         iscale;
  univ_mat         itime;
  univ_mat         cwt;
  univ_mat         tolerance;
  void             *VPNULL = NULL;
  memlist          list;
  wav_transform_peak peak_type;

  /* Avoid lint warning */
  (void) whatssi;

  /* initialize memory list */
  MEMLIST_INIT( list );

  /* Conversion of input data ... */

  /* ... pr_cwt to cwt */
  READ_MATRIX_REGISTER( pr_cwt, &cwt );

  /* ... pr_tolerance to tolerance */
  READ_MATRIX_REGISTER( pr_tolerance, &tolerance );

  /* ... pr_peak_type to peak_type */
  WAV_TRANSFORM_PEAK_FROM_R( pr_peak_type, &peak_type );

  /* Call the function */
  err = wavuniv_transform_continuous_wavelet_modulus_maxima(
    &cwt,
    &tolerance,
    peak_type,
    VPNULL,
    &(itime.mat.s32mat),
    &(iscale.mat.s32mat) );
  MUTIL_FREE_WARN( matuniv, &cwt );
  MUTIL_FREE_WARN( matuniv, &tolerance );
  if ( err ){
    PROBLEM "Problem calling wavuniv_transform_continuous_wavelet_modulus_maxima() function" ERROR;
  }

  /* free registered local memory */
  MUTIL_FREE_WARN( memlist, &list );

  /* wrap the sint32 output matrices into a universal matrix */

  err = matuniv_wrap_matrix( &itime, &(itime.mat.s32mat), MUTIL_SINT32 );
  if (err){
    MUTIL_FREE_WARN( matuniv, &itime );
    PROBLEM "Problem wrapping WTMM time index matrix into a universal matrix" ERROR;
  }

  err = matuniv_wrap_matrix( &iscale, &(iscale.mat.s32mat), MUTIL_SINT32 );
  if (err){
    MUTIL_FREE_WARN( matuniv, &iscale );
    PROBLEM "Problem wrapping WTMM scale index matrix into a universal matrix" ERROR;
  }

  /* create the output R object */

  err = matuniv_to_R( &itime, (mutil_R_class_type) MUTIL_R_MATRIX, &pr_ret_itime );
  MUTIL_FREE_WARN( matuniv, &itime );
  if ( err ) {
      PROBLEM "Unable to convert output data to Splus format" ERROR;
  }

  err = matuniv_to_R( &iscale, (mutil_R_class_type) MUTIL_R_MATRIX, &pr_ret_iscale );
  MUTIL_FREE_WARN( matuniv, &iscale );
  if ( err ) {
    PROBLEM "Unable to convert output data to Splus format" ERROR;
  }

  PROTECT( pr_ret_obj = allocVector( VECSXP, 2 ) );
  SET_VECTOR_ELT( pr_ret_obj, 0, pr_ret_itime );
  SET_VECTOR_ELT( pr_ret_obj, 1, pr_ret_iscale );
  UNPROTECT(1);

  return pr_ret_obj;
}
Exemple #9
0
/** The modulus maxima tree of a continuous wavelet transform.
 * @source RRS\_wav\_wtmm.c
 * @author Copyright (c), 1988, 2006 Insightful Corp.  All rights reserved.
 * @usage #.Call( "RS_wavelets_transform_continuous_wavelet_modulus_maxima_tree", wtmm.time.index, wtmm.scale.index, cwt, cwt.time, cwt.scale, bridge.gaps, n.octave.min, wtmm.strength.min))#
 * @return                   An R ... containing ...
 * @param wtmm.time.index    Pointer to an R object containing ... wtmm.time.index
 * @param wtmm.scale.index   Pointer to an R object containing ... wtmm.scale.index
 * @param cwt                Pointer to an R object containing ... cwt
 * @param cwt.time           Pointer to an R object containing ... cwt.time
 * @param cwt.scale          Pointer to an R object containing ... cwt.scale
 * @param bridge.gaps        Pointer to an R object containing ... bridge.gaps
 * @param n.octave.min       Pointer to an R object containing ... n.octave.min
 * @param wtmm.strength.min  Pointer to an R object containing ... wtmm.strength.min
 * @see wavuniv_transform_continuous_wavelet
 * @see wavuniv_transform_continuous_wavelet_modulus_maxima
*/
EXTERN_R SEXP RS_wavelets_transform_continuous_wavelet_modulus_maxima_tree(
 SEXP pr_wtmm_time_index,
 SEXP pr_wtmm_scale_index,
 SEXP pr_cwt,
 SEXP pr_cwt_time,
 SEXP pr_cwt_scale,
 SEXP pr_bridge_gaps,
 SEXP pr_n_octave_min,
 SEXP pr_wtmm_strength_min )
{
  boolean            bridge_gaps;
  double             n_octave_min;
  double             wtmm_strength_min;
  mat_set            result;
  memlist            list;
  mutil_data_type    type;
  mutil_errcode      err;
  SEXP               pr_ret_result;
  univ_mat           cwt;
  univ_mat           cwt_scale;
  univ_mat           cwt_time;
  univ_mat           wtmm_scale_index;
  univ_mat           wtmm_time_index;
  void              *VPNULL = NULL;

  /* Avoid lint warning */

  (void) whatssi;

  /* initialize memory list */

  MEMLIST_INIT( list );

  /* Conversion of input data ... */

  READ_MATRIX_REGISTER( pr_wtmm_time_index, &wtmm_time_index );
  READ_MATRIX_REGISTER( pr_wtmm_scale_index, &wtmm_scale_index );
  READ_MATRIX_REGISTER( pr_cwt, &cwt );
  READ_MATRIX_REGISTER( pr_cwt_scale, &cwt_scale );
  READ_MATRIX_REGISTER( pr_cwt_time, &cwt_time );

  /* ... pr_bridge_gaps to bridge_gaps */
  BOOLEAN_FROM_R( pr_bridge_gaps, &bridge_gaps );

  /* ... pr_n_octave_min to n_octave_min */
  DOUBLE_FROM_R( pr_n_octave_min, &n_octave_min );

  /* ... pr_wtmm_strength_min to wtmm_strength_min */
  DOUBLE_FROM_R( pr_wtmm_strength_min, &wtmm_strength_min );

  /* Call the function */
  err = wavuniv_transform_continuous_wavelet_modulus_maxima_tree(
    &(wtmm_time_index.mat.s32mat),
    &(wtmm_scale_index.mat.s32mat),
    &(cwt.mat.cpxmat),
    &(cwt_time.mat.dblmat),
    &(cwt_scale.mat.dblmat),
    bridge_gaps,
    n_octave_min,
    wtmm_strength_min,
    VPNULL,
    &result );
  CONVERT_MATSET_AND_RETURN( wavuniv_transform_continuous_wavelet_modulus_maxima_tree, &result, &pr_ret_result );
}
Exemple #10
0
/** Find the nearest neighbors of a multidimensional embedding of data in the phase space.
 * @source RS\_fra\_neig.c
 * @author Copyright (c), 1988, 2006 Insightful Corp.  All rights reserved.
 * @usage #.Call( "RS_fractal_neighbor_find", embedding, n.neighbor, distance.max, distance.metric, pdmatrix, sort.distances, orbital.lag))#
 * @return                 An R ... containing ...
 * @param embedding        Pointer to an R object containing ... embedding
 * @param n.neighbor       Pointer to an R object containing ... n.neighbor
 * @param distance.max     Pointer to an R object containing ... distance.max
 * @param distance.metric  Pointer to an R object containing ... distance.metric
 * @param pdmatrix         Pointer to an R object containing ... pdmatrix
 * @param sort.distances   Pointer to an R object containing ... sort.distances
 * @param orbital.lag      Pointer to an R object containing ... orbital.lag
 * @see _fra_distance_metric
 * @see frauniv_embed_neighbors
*/
EXTERN_R SEXP RS_fractal_neighbor_find(
 SEXP pr_embedding,
 SEXP pr_n_neighbor,
 SEXP pr_distance_max,
 SEXP pr_distance_metric,
 SEXP pr_sort_distances,
 SEXP pr_orbital_lag )
{
  SEXP                  pr_ret_neighbor_distances;  
  SEXP                  pr_ret_neighbor_indices;    
  SEXP                  pr_ret_obj;                 
  SEXP                  pr_ret_original_indices;    
  boolean               sort_distances;             
  double                distance_max;               
  fra_distance_metric   distance_metric;            
  mutil_data_type       type;                       
  mutil_errcode         err;                        
  sint32                n_neighbor;                 
  sint32                orbital_lag;                
  univ_mat              embedding;                  
  univ_mat              neighbor_distances;         
  univ_mat              neighbor_indices;           
  univ_mat              original_indices;           
  void                  *VPNULL = NULL;             
  memlist               list;

  /* Avoid lint warning */
  (void) whatssi;

  /* initialize memory list */
  MEMLIST_INIT( list );

  /* Conversion of input data ... */

  /* ... pr_time_series to time_series */
  READ_MATRIX_REGISTER( pr_embedding, &embedding );

  /* ... pr_n_neighbor to n_neighbor */
  SINT32_FROM_R( pr_n_neighbor, &n_neighbor );

  /* ... pr_distance_max to distance_max */
  DOUBLE_FROM_R( pr_distance_max, &distance_max );

  /* ... pr_distance_metric to distance_metric */
  DISTANCE_METRIC_FROM_R( pr_distance_metric, &distance_metric );

  /* ... pr_sort_distances to sort_distances */
  BOOLEAN_FROM_R( pr_sort_distances, &sort_distances );

  /* ... pr_orbital_lag to orbital_lag */
  SINT32_FROM_R( pr_orbital_lag, &orbital_lag );

  /* Call the function */
  err = frauniv_neighbor_find(
    &embedding,
    n_neighbor,
    distance_max,
    distance_metric,
    (univ_mat*) NULL,
    sort_distances,
    orbital_lag,
    VPNULL,
    &original_indices,
    &neighbor_indices,
    &neighbor_distances );
  MEMLIST_FREE_ON_ERROR_SPLUS( err, &list, "Problem calling frauniv_neighbor_find() function" );
  err = memlist_member_register( &list, &original_indices, MEMTYPE_MATUNIV);
  MEMLIST_FREE_ON_ERROR_REGISTER( err, &list );
  err = memlist_member_register( &list, &neighbor_indices, MEMTYPE_MATUNIV);
  MEMLIST_FREE_ON_ERROR_REGISTER( err, &list );
  err = memlist_member_register( &list, &neighbor_distances, MEMTYPE_MATUNIV);
  MEMLIST_FREE_ON_ERROR_REGISTER( err, &list );

  /* create the output R object */
  err = matuniv_to_R( &original_indices, (mutil_R_class_type) MUTIL_R_MATRIX, &pr_ret_original_indices );
  MEMLIST_FREE_ON_ERROR_SPLUS( err, &list, "Unable to convert output data to R format" );
  err = matuniv_to_R( &neighbor_indices, (mutil_R_class_type) MUTIL_R_MATRIX, &pr_ret_neighbor_indices );
  MEMLIST_FREE_ON_ERROR_SPLUS( err, &list, "Unable to convert output data to R format" );
  err = matuniv_to_R( &neighbor_distances, (mutil_R_class_type) MUTIL_R_MATRIX, &pr_ret_neighbor_distances );
  MEMLIST_FREE_ON_ERROR_SPLUS( err, &list, "Unable to convert output data to R format" );

  PROTECT( pr_ret_obj = allocVector( VECSXP, 3 ) );
  SET_VECTOR_ELT( pr_ret_obj, 0, pr_ret_original_indices );
  SET_VECTOR_ELT( pr_ret_obj, 1, pr_ret_neighbor_indices );
  SET_VECTOR_ELT( pr_ret_obj, 2, pr_ret_neighbor_distances );
  UNPROTECT(1);
  
  /* free registered local memory */
  MUTIL_FREE_WARN( memlist, &list );

  return pr_ret_obj;
}
Exemple #11
0
/** Local Lyapunov spectrum estimation.
 * @source RS\_fra\_lyap.c
 * @author Copyright (c), 1988, 2006 Insightful Corp.  All rights reserved.
 * @usage #.Call( "RS_fractal_local_lyapunov_spectrum", time.series, embedding.dimension, time.lag, orbital.lag, sampling.interval, local.dimension, polynomial.order, global.reference, n.reference.local, metric, scale))#
 * @return                     An R ... containing ...
 * @param time.series          Pointer to an R object containing ... time.series
 * @param embedding.dimension  Pointer to an R object containing ... embedding.dimension
 * @param time.lag             Pointer to an R object containing ... time.lag
 * @param orbital.lag          Pointer to an R object containing ... orbital.lag
 * @param sampling.interval    Pointer to an R object containing ... sampling.interval
 * @param local.dimension      Pointer to an R object containing ... local.dimension
 * @param polynomial.order     Pointer to an R object containing ... polynomial.order
 * @param global.reference     Pointer to an R object containing ... global.reference
 * @param n.reference.local    Pointer to an R object containing ... n.reference.local
 * @param metric               Pointer to an R object containing ... metric
 * @param scale                Pointer to an R object containing ... scale
 * @see frauniv_embed
 * @see frauniv_dimension_correlation_summation
 * @see frauniv_dimension_information
*/
EXTERN_R SEXP RS_fractal_local_lyapunov_spectrum(
 SEXP pr_time_series,
 SEXP pr_embedding_dimension,
 SEXP pr_time_lag,
 SEXP pr_orbital_lag,
 SEXP pr_sampling_interval,
 SEXP pr_local_dimension,
 SEXP pr_polynomial_order,
 SEXP pr_global_reference,
 SEXP pr_n_reference_local,
 SEXP pr_metric,
 SEXP pr_scale )
{
  SEXP                  pr_ret_result;        
  double                sampling_interval;    
  fra_distance_metric   metric;               
  mat_set               result;               
  mutil_data_type       type;                 
  mutil_errcode         err;                  
  sint32                embedding_dimension;  
  sint32                local_dimension;      
  sint32                n_reference_local;    
  sint32                orbital_lag;          
  sint32                polynomial_order;     
  sint32                time_lag;             
  univ_mat              global_reference;     
  univ_mat              scale;                
  univ_mat              time_series;          
  void                  *VPNULL = NULL;       
  memlist               list;

  /* Avoid lint warning */
  (void) whatssi;

  /* initialize memory list */
  MEMLIST_INIT( list );

  /* Conversion of input data ... */

  /* ... pr_time_series to time_series */
  READ_MATRIX_REGISTER( pr_time_series, &time_series );

  /* ... pr_embedding_dimension to embedding_dimension */
  SINT32_FROM_R( pr_embedding_dimension, &embedding_dimension );

  /* ... pr_time_lag to time_lag */
  SINT32_FROM_R( pr_time_lag, &time_lag );

  /* ... pr_orbital_lag to orbital_lag */
  SINT32_FROM_R( pr_orbital_lag, &orbital_lag );

  /* ... pr_sampling_interval to sampling_interval */
  DOUBLE_FROM_R( pr_sampling_interval, &sampling_interval );

  /* ... pr_local_dimension to local_dimension */
  SINT32_FROM_R( pr_local_dimension, &local_dimension );

  /* ... pr_polynomial_order to polynomial_order */
  SINT32_FROM_R( pr_polynomial_order, &polynomial_order );

  /* ... pr_global_reference to global_reference */
  READ_MATRIX_REGISTER( pr_global_reference, &global_reference );

  /* ... pr_n_reference_local to n_reference_local */
  SINT32_FROM_R( pr_n_reference_local, &n_reference_local );

  /* ... pr_metric to metric */
  DISTANCE_METRIC_FROM_R( pr_metric, &metric );

  /* ... pr_scale to scale */
  READ_MATRIX_REGISTER( pr_scale, &scale );

  /* Call the function */
  err = frauniv_local_lyapunov_spectrum(
    &time_series,
    embedding_dimension,
    time_lag,
    orbital_lag,
    sampling_interval,
    local_dimension,
    polynomial_order,
    &global_reference,
    n_reference_local,
    metric,
    &scale,
    VPNULL,
    &result );
  CONVERT_MATSET_AND_RETURN( frauniv_local_lyapunov_spectrum, &result, &pr_ret_result );
}