MCPcopy Create free account
hub / github.com/brainflow-dev/brainflow / perform_wavelet_transform

Function perform_wavelet_transform

src/data_handler/data_handler.cpp:492–545  ·  view source on GitHub ↗

https://github.com/rafat/wavelib/wiki/DWT-Example-Code

Source from the content-addressed store, hash-verified

490
491// https://github.com/rafat/wavelib/wiki/DWT-Example-Code
492int perform_wavelet_transform (double *data, int data_len, int wavelet, int decomposition_level,
493 int extension, double *output_data, int *decomposition_lengths)
494{
495 std::string wavelet_str = get_wavelet_name (wavelet);
496 std::string extension_str = get_extension_type (extension);
497 if ((data == NULL) || (data_len <= 0) || (wavelet_str.empty ()) || (output_data == NULL) ||
498 (extension_str.empty ()) || (decomposition_lengths == NULL) || (decomposition_level <= 0))
499 {
500 data_logger->error ("Please review arguments.");
501 return (int)BrainFlowExitCodes::INVALID_ARGUMENTS_ERROR;
502 }
503
504 wave_object obj = NULL;
505 wt_object wt = NULL;
506
507 try
508 {
509 obj = wave_init (wavelet_str.c_str ());
510 wt = wt_init (obj, "dwt", data_len, decomposition_level);
511 setDWTExtension (wt, extension_str.c_str ());
512 setWTConv (wt, "direct");
513 dwt (wt, data);
514 for (int i = 0; i < wt->outlength; i++)
515 {
516 output_data[i] = wt->output[i];
517 }
518 for (int i = 0; i < decomposition_level + 1; i++)
519 {
520 decomposition_lengths[i] = wt->length[i];
521 }
522 wave_free (obj);
523 obj = NULL;
524 wt_free (wt);
525 wt = NULL;
526 }
527 catch (const std::exception &e)
528 {
529 if (obj)
530 {
531 wave_free (obj);
532 obj = NULL;
533 }
534 if (wt)
535 {
536 wt_free (wt);
537 wt = NULL;
538 }
539 // more likely exception here occured because input buffer is to small to perform wavelet
540 // transform
541 data_logger->error ("Exception in wavelib: {}", e.what ());
542 return (int)BrainFlowExitCodes::INVALID_BUFFER_SIZE_ERROR;
543 }
544 return (int)BrainFlowExitCodes::STATUS_OK;
545}
546
547// inside wavelib inverse transform uses internal state from direct transform, dirty hack to restore
548// it here

Callers 3

mainFunction · 0.50

Calls 4

get_wavelet_nameFunction · 0.85
get_extension_typeFunction · 0.85
emptyMethod · 0.80
whatMethod · 0.80

Tested by

no test coverage detected