// // File: cwtfilterbank.cpp // // MATLAB Coder version : 4.3 // C/C++ source code generated on : 30-Mar-2020 11:59:32 // // Include Files #include "cwtfilterbank.h" #include "bsxfun.h" #include "cwt.h" #include "cwt_data.h" #include "cwt_emxutil.h" #include "cwt_rtwutil.h" #include "cwtfreqlimits.h" #include "fft.h" #include "ifft.h" #include "log2.h" #include "rt_nonfinite.h" #include "wavCFandSD.h" #include #include #include #include // Variable Definitions static const char cv[10] = { 'r', 'e', 'f', 'l', 'e', 'c', 't', 'i', 'o', 'n' }; // Function Declarations static void c_cwtfilterbank_validateInputsC(cwtfilterbank *self); static void cwtfilterbank_filterbank(cwtfilterbank *self); static int div_s32_floor(int numerator, int denominator); // Function Definitions // // Arguments : cwtfilterbank *self // Return Type : void // static void c_cwtfilterbank_validateInputsC(cwtfilterbank *self) { boolean_T guard1 = false; boolean_T b[2]; boolean_T freqsep; int ret; boolean_T exitg1; char a[10]; int exitg2; double x; double freqrange_idx_0; double freqrange_idx_1; double fs; double ga; double be; double omegac; char y[5]; char wav[5]; double FourierFactor; double cf; double unusedU10; static const char b_b[5] = { 'm', 'o', 'r', 's', 'e' }; emxArray_char_T *charStr; int nbytes; guard1 = false; if (!rtIsNaN(self->TimeBandwidth)) { b[0] = rtIsNaN(self->WaveletParameters[0]); b[1] = rtIsNaN(self->WaveletParameters[1]); freqsep = true; ret = 0; exitg1 = false; while ((!exitg1) && (ret < 2)) { if (!b[ret]) { freqsep = false; exitg1 = true; } else { ret++; } } if (freqsep) { self->Beta = self->TimeBandwidth / self->Gamma; } else { guard1 = true; } } else { guard1 = true; } if (guard1) { b[0] = rtIsNaN(self->WaveletParameters[0]); b[1] = rtIsNaN(self->WaveletParameters[1]); freqsep = true; ret = 0; exitg1 = false; while ((!exitg1) && (ret < 2)) { if (!b[ret]) { freqsep = false; exitg1 = true; } else { ret++; } } if ((!freqsep) && rtIsNaN(self->TimeBandwidth)) { self->Gamma = self->WaveletParameters[0]; self->Beta = self->WaveletParameters[1] / self->Gamma; } } for (ret = 0; ret < 10; ret++) { a[ret] = self->Boundary[ret]; } freqsep = false; ret = 0; do { exitg2 = 0; if (ret < 10) { if (cv1[static_cast(a[ret]) & 127] != cv1[static_cast (cv[ret])]) { exitg2 = 1; } else { ret++; } } else { freqsep = true; exitg2 = 1; } } while (exitg2 == 0); if (freqsep) { if (self->SignalLength <= 100000.0) { self->SignalPad = std::floor(self->SignalLength / 2.0); } else { x = b_log2(self->SignalLength); self->SignalPad = std::ceil(x); } } else { self->SignalPad = 0.0; } b[0] = rtIsNaN(self->FrequencyLimits[0]); b[1] = rtIsNaN(self->FrequencyLimits[1]); freqsep = true; ret = 0; exitg1 = false; while ((!exitg1) && (ret < 2)) { if (!b[ret]) { freqsep = false; exitg1 = true; } else { ret++; } } if (!freqsep) { freqrange_idx_0 = self->FrequencyLimits[0]; freqrange_idx_1 = self->FrequencyLimits[1]; fs = self->SamplingFrequency; ga = self->Gamma; be = self->Beta; for (ret = 0; ret < 5; ret++) { y[ret] = self->Wavelet[ret]; wav[ret] = cv1[static_cast(y[ret]) & 127]; } omegac = 3.1415926535897931; wavCFandSD(wav, ga, be, &FourierFactor, &x, &cf); unusedU10 = self->SignalLength / (x * 2.0); ret = memcmp(&wav[0], &b_b[0], 5); if (ret == 0) { ret = 0; } else { ret = -1; } if (static_cast((ret == 0))) { omegac = getFreqFromCutoffMorse(self->CutOff / 100.0, cf, ga, be); } x = omegac / 3.1415926535897931 * rt_powd_snf(2.0, 1.0 / self->VoicesPerOctave); if (unusedU10 < x) { unusedU10 = x; } x = 1.0 / (unusedU10 * FourierFactor) * self->SamplingFrequency; if (freqrange_idx_0 < x) { self->FrequencyLimits[0] = x; freqrange_idx_0 = self->FrequencyLimits[0]; } if (freqrange_idx_1 > fs / 2.0) { self->FrequencyLimits[1] = fs / 2.0; freqrange_idx_1 = self->FrequencyLimits[1]; } freqsep = (b_log2(freqrange_idx_1) - b_log2(freqrange_idx_0) >= 1.0 / self->VoicesPerOctave); if (!freqsep) { emxInit_char_T(&charStr, 2); x = 1.0 / self->VoicesPerOctave; nbytes = (int)snprintf(NULL, 0, "%2.2f", x) + 1; ret = charStr->size[0] * charStr->size[1]; charStr->size[0] = 1; charStr->size[1] = nbytes; emxEnsureCapacity_char_T(charStr, ret); snprintf(&charStr->data[0], (size_t)nbytes, "%2.2f", x); emxFree_char_T(&charStr); } } } // // Arguments : cwtfilterbank *self // Return Type : void // static void cwtfilterbank_filterbank(cwtfilterbank *self) { int i; boolean_T b_bool; char a[5]; int csz_idx_1; int exitg1; static const char b_cv[5] = { 'M', 'o', 'r', 's', 'e' }; emxArray_real_T *f; emxArray_real_T *omega; emxArray_real_T *absomega; double ga; double be; emxArray_real_T *somega; emxArray_real_T *c; int bcoef; int loop_ub; double fo; emxArray_real_T *powscales; unsigned int unnamed_idx_0; unsigned int unnamed_idx_1; for (i = 0; i < 5; i++) { a[i] = self->Wavelet[i]; } b_bool = false; csz_idx_1 = 0; do { exitg1 = 0; if (csz_idx_1 < 5) { if (cv1[static_cast(a[csz_idx_1]) & 127] != cv1[ static_cast(b_cv[csz_idx_1])]) { exitg1 = 1; } else { csz_idx_1++; } } else { b_bool = true; exitg1 = 1; } } while (exitg1 == 0); emxInit_real_T(&f, 2); emxInit_real_T(&omega, 2); emxInit_real_T(&absomega, 2); if (b_bool) { i = omega->size[0] * omega->size[1]; omega->size[0] = 1; omega->size[1] = self->Omega->size[1]; emxEnsureCapacity_real_T(omega, i); csz_idx_1 = self->Omega->size[0] * self->Omega->size[1]; for (i = 0; i < csz_idx_1; i++) { omega->data[i] = self->Omega->data[i]; } i = f->size[0] * f->size[1]; f->size[0] = 1; f->size[1] = self->Scales->size[1]; emxEnsureCapacity_real_T(f, i); csz_idx_1 = self->Scales->size[0] * self->Scales->size[1]; for (i = 0; i < csz_idx_1; i++) { f->data[i] = self->Scales->data[i]; } ga = self->Gamma; be = self->Beta; emxInit_real_T(&somega, 2); if (f->size[1] == 1) { emxInit_real_T(&c, 2); if (omega->size[1] == 1) { csz_idx_1 = 1; } else { csz_idx_1 = omega->size[1]; } i = c->size[0] * c->size[1]; c->size[0] = 1; if (omega->size[1] == 1) { c->size[1] = 1; } else { c->size[1] = omega->size[1]; } emxEnsureCapacity_real_T(c, i); if (csz_idx_1 != 0) { bcoef = (omega->size[1] != 1); i = csz_idx_1 - 1; for (loop_ub = 0; loop_ub <= i; loop_ub++) { c->data[loop_ub] = f->data[0] * omega->data[bcoef * loop_ub]; } } i = somega->size[0] * somega->size[1]; somega->size[0] = 1; somega->size[1] = c->size[1]; emxEnsureCapacity_real_T(somega, i); csz_idx_1 = c->size[0] * c->size[1]; for (i = 0; i < csz_idx_1; i++) { somega->data[i] = c->data[i]; } emxFree_real_T(&c); } else { i = somega->size[0] * somega->size[1]; somega->size[0] = f->size[1]; somega->size[1] = omega->size[1]; emxEnsureCapacity_real_T(somega, i); csz_idx_1 = omega->size[1]; for (i = 0; i < csz_idx_1; i++) { loop_ub = f->size[1]; for (bcoef = 0; bcoef < loop_ub; bcoef++) { somega->data[bcoef + somega->size[0] * i] = f->data[bcoef] * omega->data[i]; } } } fo = std::exp(1.0 / ga * (std::log(be) - std::log(ga))); csz_idx_1 = somega->size[0] * somega->size[1]; i = absomega->size[0] * absomega->size[1]; absomega->size[0] = somega->size[0]; absomega->size[1] = somega->size[1]; emxEnsureCapacity_real_T(absomega, i); for (loop_ub = 0; loop_ub < csz_idx_1; loop_ub++) { absomega->data[loop_ub] = std::abs(somega->data[loop_ub]); } emxInit_real_T(&powscales, 2); if (ga == 3.0) { i = powscales->size[0] * powscales->size[1]; powscales->size[0] = absomega->size[0]; powscales->size[1] = absomega->size[1]; emxEnsureCapacity_real_T(powscales, i); csz_idx_1 = absomega->size[0] * absomega->size[1]; for (i = 0; i < csz_idx_1; i++) { powscales->data[i] = absomega->data[i] * absomega->data[i] * absomega->data[i]; } } else { unnamed_idx_0 = static_cast(absomega->size[0]); unnamed_idx_1 = static_cast(absomega->size[1]); i = powscales->size[0] * powscales->size[1]; powscales->size[0] = static_cast(unnamed_idx_0); powscales->size[1] = static_cast(unnamed_idx_1); emxEnsureCapacity_real_T(powscales, i); csz_idx_1 = static_cast(unnamed_idx_0) * static_cast (unnamed_idx_1); for (loop_ub = 0; loop_ub < csz_idx_1; loop_ub++) { powscales->data[loop_ub] = rt_powd_snf(absomega->data[loop_ub], ga); } } csz_idx_1 = absomega->size[0] * absomega->size[1]; for (loop_ub = 0; loop_ub < csz_idx_1; loop_ub++) { absomega->data[loop_ub] = std::log(absomega->data[loop_ub]); } ga = 2.0 * std::exp(-be * std::log(fo) + rt_powd_snf(fo, ga)); csz_idx_1 = absomega->size[0] * absomega->size[1]; for (i = 0; i < csz_idx_1; i++) { absomega->data[i] = be * absomega->data[i] - powscales->data[i]; } emxFree_real_T(&powscales); csz_idx_1 = absomega->size[0] * absomega->size[1]; for (loop_ub = 0; loop_ub < csz_idx_1; loop_ub++) { absomega->data[loop_ub] = std::exp(absomega->data[loop_ub]); } csz_idx_1 = absomega->size[0] * absomega->size[1]; for (i = 0; i < csz_idx_1; i++) { absomega->data[i] = ga * absomega->data[i] * static_cast ((somega->data[i] > 0.0)); } emxFree_real_T(&somega); i = f->size[0] * f->size[1]; bcoef = f->size[0] * f->size[1]; f->size[0] = 1; emxEnsureCapacity_real_T(f, bcoef); csz_idx_1 = i - 1; for (i = 0; i <= csz_idx_1; i++) { f->data[i] = fo / f->data[i] / 6.2831853071795862; } } else { i = omega->size[0] * omega->size[1]; omega->size[0] = 1; omega->size[1] = self->Omega->size[1]; emxEnsureCapacity_real_T(omega, i); csz_idx_1 = self->Omega->size[0] * self->Omega->size[1]; for (i = 0; i < csz_idx_1; i++) { omega->data[i] = self->Omega->data[i]; } i = f->size[0] * f->size[1]; f->size[0] = 1; f->size[1] = self->Scales->size[1]; emxEnsureCapacity_real_T(f, i); csz_idx_1 = self->Scales->size[0] * self->Scales->size[1]; for (i = 0; i < csz_idx_1; i++) { f->data[i] = self->Scales->data[i]; } i = absomega->size[0] * absomega->size[1]; absomega->size[0] = f->size[1]; absomega->size[1] = omega->size[1]; emxEnsureCapacity_real_T(absomega, i); csz_idx_1 = f->size[1] * omega->size[1]; for (i = 0; i < csz_idx_1; i++) { absomega->data[i] = 0.0; } i = f->size[0] * f->size[1]; bcoef = f->size[0] * f->size[1]; f->size[0] = 1; emxEnsureCapacity_real_T(f, bcoef); csz_idx_1 = i - 1; for (i = 0; i <= csz_idx_1; i++) { f->data[i] = 0.0 / f->data[i]; } } emxFree_real_T(&omega); i = f->size[0] * f->size[1]; bcoef = f->size[0] * f->size[1]; f->size[0] = 1; emxEnsureCapacity_real_T(f, bcoef); csz_idx_1 = i - 1; for (i = 0; i <= csz_idx_1; i++) { f->data[i] *= self->SamplingFrequency; } i = self->PsiDFT->size[0] * self->PsiDFT->size[1]; self->PsiDFT->size[0] = absomega->size[0]; self->PsiDFT->size[1] = absomega->size[1]; emxEnsureCapacity_real_T(self->PsiDFT, i); csz_idx_1 = absomega->size[0] * absomega->size[1]; for (i = 0; i < csz_idx_1; i++) { self->PsiDFT->data[i] = absomega->data[i]; } emxFree_real_T(&absomega); i = self->WaveletCenterFrequencies->size[0]; self->WaveletCenterFrequencies->size[0] = f->size[1]; emxEnsureCapacity_real_T(self->WaveletCenterFrequencies, i); csz_idx_1 = f->size[1]; for (i = 0; i < csz_idx_1; i++) { self->WaveletCenterFrequencies->data[i] = f->data[i]; } emxFree_real_T(&f); } // // Arguments : int numerator // int denominator // Return Type : int // static int div_s32_floor(int numerator, int denominator) { int quotient; unsigned int absNumerator; unsigned int absDenominator; boolean_T quotientNeedsNegation; unsigned int tempAbsQuotient; if (denominator == 0) { if (numerator >= 0) { quotient = MAX_int32_T; } else { quotient = MIN_int32_T; } } else { if (numerator < 0) { absNumerator = ~static_cast(numerator) + 1U; } else { absNumerator = static_cast(numerator); } if (denominator < 0) { absDenominator = ~static_cast(denominator) + 1U; } else { absDenominator = static_cast(denominator); } quotientNeedsNegation = ((numerator < 0) != (denominator < 0)); tempAbsQuotient = absNumerator / absDenominator; if (quotientNeedsNegation) { absNumerator %= absDenominator; if (absNumerator > 0U) { tempAbsQuotient++; } quotient = -static_cast(tempAbsQuotient); } else { quotient = static_cast(tempAbsQuotient); } } return quotient; } // // Arguments : cwtfilterbank *self // double varargin_2 // Return Type : cwtfilterbank * // cwtfilterbank *cwtfilterbank_cwtfilterbank(cwtfilterbank *self, double varargin_2) { cwtfilterbank *b_self; int nx; static const char b_cv[5] = { 'M', 'o', 'r', 's', 'e' }; double frange_idx_1; boolean_T b_bool; char a[5]; int ret; int exitg1; static const char b_cv1[5] = { 'M', 'o', 'r', 's', 'e' }; double N; emxArray_real_T *omega; int loop_ub; int i; int i1; emxArray_real_T *y; double frange_idx_0; boolean_T b[2]; boolean_T exitg2; char x[5]; double be; double nv; double cutoff; double FourierFactor; double omegac; double cf; static const char b_b[5] = { 'm', 'o', 'r', 's', 'e' }; b_self = self; b_self->CutOff = 50.0; b_self->Gamma = 3.0; b_self->Beta = 20.0; for (nx = 0; nx < 5; nx++) { b_self->Wavelet[nx] = b_cv[nx]; } b_self->TimeBandwidth = rtNaN; b_self->WaveletParameters[0] = rtNaN; b_self->WaveletParameters[1] = rtNaN; b_self->SignalLength = varargin_2; frange_idx_1 = b_self->SignalLength / 2.0; frange_idx_1 = std::floor(frange_idx_1); b_self->SignalPad = frange_idx_1; b_self->VoicesPerOctave = 10.0; b_self->SamplingFrequency = 1.0; b_self->FrequencyLimits[0] = rtNaN; b_self->FrequencyLimits[1] = rtNaN; for (nx = 0; nx < 10; nx++) { b_self->Boundary[nx] = cv[nx]; } c_cwtfilterbank_validateInputsC(b_self); for (nx = 0; nx < 5; nx++) { a[nx] = b_self->Wavelet[nx]; } b_bool = false; ret = 0; do { exitg1 = 0; if (ret < 5) { if (cv1[static_cast(a[ret]) & 127] != cv1[static_cast (b_cv1[ret])]) { exitg1 = 1; } else { ret++; } } else { b_bool = true; exitg1 = 1; } } while (exitg1 == 0); if (!b_bool) { b_self->CutOff = 10.0; } N = b_self->SignalLength + 2.0 * b_self->SignalPad; frange_idx_1 = N / 2.0; if (frange_idx_1 < 0.0) { frange_idx_1 = std::ceil(frange_idx_1); } else { frange_idx_1 = std::floor(frange_idx_1); } emxInit_real_T(&omega, 2); if (rtIsNaN(frange_idx_1)) { nx = omega->size[0] * omega->size[1]; omega->size[0] = 1; omega->size[1] = 1; emxEnsureCapacity_real_T(omega, nx); omega->data[0] = rtNaN; } else if (frange_idx_1 < 1.0) { omega->size[0] = 1; omega->size[1] = 0; } else if (rtIsInf(frange_idx_1) && (1.0 == frange_idx_1)) { nx = omega->size[0] * omega->size[1]; omega->size[0] = 1; omega->size[1] = 1; emxEnsureCapacity_real_T(omega, nx); omega->data[0] = rtNaN; } else { nx = omega->size[0] * omega->size[1]; omega->size[0] = 1; omega->size[1] = static_cast((frange_idx_1 - 1.0)) + 1; emxEnsureCapacity_real_T(omega, nx); loop_ub = static_cast((frange_idx_1 - 1.0)); for (nx = 0; nx <= loop_ub; nx++) { omega->data[nx] = static_cast(nx) + 1.0; } } nx = omega->size[0] * omega->size[1]; i = omega->size[0] * omega->size[1]; omega->size[0] = 1; emxEnsureCapacity_real_T(omega, i); loop_ub = nx - 1; for (nx = 0; nx <= loop_ub; nx++) { omega->data[nx] = omega->data[nx] * 6.2831853071795862 / N; } frange_idx_1 = (N - 1.0) / 2.0; if (frange_idx_1 < 0.0) { frange_idx_1 = std::ceil(frange_idx_1); } else { frange_idx_1 = std::floor(frange_idx_1); } if (1.0 > frange_idx_1) { nx = 0; i = 1; i1 = -1; } else { nx = static_cast(frange_idx_1) - 1; i = -1; i1 = 0; } emxInit_real_T(&y, 2); ret = y->size[0] * y->size[1]; y->size[0] = 1; loop_ub = div_s32_floor(i1 - nx, i); y->size[1] = (omega->size[1] + loop_ub) + 2; emxEnsureCapacity_real_T(y, ret); y->data[0] = 0.0; ret = omega->size[1]; for (i1 = 0; i1 < ret; i1++) { y->data[i1 + 1] = omega->data[i1]; } for (i1 = 0; i1 <= loop_ub; i1++) { y->data[(i1 + omega->size[1]) + 1] = -omega->data[nx + i * i1]; } nx = omega->size[0] * omega->size[1]; omega->size[0] = 1; omega->size[1] = y->size[1]; emxEnsureCapacity_real_T(omega, nx); loop_ub = y->size[0] * y->size[1]; for (nx = 0; nx < loop_ub; nx++) { omega->data[nx] = y->data[nx]; } nx = b_self->Omega->size[0] * b_self->Omega->size[1]; b_self->Omega->size[0] = 1; b_self->Omega->size[1] = omega->size[1]; emxEnsureCapacity_real_T(b_self->Omega, nx); loop_ub = omega->size[0] * omega->size[1]; for (nx = 0; nx < loop_ub; nx++) { b_self->Omega->data[nx] = omega->data[nx]; } frange_idx_0 = b_self->FrequencyLimits[0]; frange_idx_1 = b_self->FrequencyLimits[1]; b[0] = rtIsNaN(frange_idx_0); b[1] = rtIsNaN(frange_idx_1); b_bool = true; ret = 0; exitg2 = false; while ((!exitg2) && (ret < 2)) { if (!b[ret]) { b_bool = false; exitg2 = true; } else { ret++; } } if (!b_bool) { frange_idx_0 = b_self->FrequencyLimits[0]; frange_idx_1 = b_self->FrequencyLimits[1]; frange_idx_0 /= b_self->SamplingFrequency; frange_idx_1 /= b_self->SamplingFrequency; frange_idx_0 = frange_idx_0 * 2.0 * 3.1415926535897931; frange_idx_1 = frange_idx_1 * 2.0 * 3.1415926535897931; nv = b_self->VoicesPerOctave; wavCFandSD(b_self->Wavelet, b_self->Gamma, b_self->Beta, &FourierFactor, &cutoff, &be); omegac = be / frange_idx_1; frange_idx_1 = b_log2(be / frange_idx_0 / omegac); frange_idx_1 *= nv; if (rtIsNaN(frange_idx_1)) { nx = omega->size[0] * omega->size[1]; omega->size[0] = 1; omega->size[1] = 1; emxEnsureCapacity_real_T(omega, nx); omega->data[0] = rtNaN; } else if (frange_idx_1 < 0.0) { omega->size[0] = 1; omega->size[1] = 0; } else if (rtIsInf(frange_idx_1) && (0.0 == frange_idx_1)) { nx = omega->size[0] * omega->size[1]; omega->size[0] = 1; omega->size[1] = 1; emxEnsureCapacity_real_T(omega, nx); omega->data[0] = rtNaN; } else { nx = omega->size[0] * omega->size[1]; omega->size[0] = 1; loop_ub = static_cast(std::floor(frange_idx_1)); omega->size[1] = loop_ub + 1; emxEnsureCapacity_real_T(omega, nx); for (nx = 0; nx <= loop_ub; nx++) { omega->data[nx] = nx; } } cutoff = rt_powd_snf(2.0, 1.0 / nv); nx = y->size[0] * y->size[1]; y->size[0] = 1; y->size[1] = omega->size[1]; emxEnsureCapacity_real_T(y, nx); nx = omega->size[1]; for (ret = 0; ret < nx; ret++) { y->data[ret] = rt_powd_snf(cutoff, omega->data[ret]); } nx = b_self->Scales->size[0] * b_self->Scales->size[1]; b_self->Scales->size[0] = 1; b_self->Scales->size[1] = y->size[1]; emxEnsureCapacity_real_T(b_self->Scales, nx); loop_ub = y->size[0] * y->size[1]; for (nx = 0; nx < loop_ub; nx++) { b_self->Scales->data[nx] = omegac * y->data[nx]; } } else { for (nx = 0; nx < 5; nx++) { x[nx] = b_self->Wavelet[nx]; } N = b_self->SignalLength; frange_idx_0 = b_self->Gamma; be = b_self->Beta; nv = b_self->VoicesPerOctave; cutoff = b_self->CutOff; for (ret = 0; ret < 5; ret++) { a[ret] = cv1[static_cast(x[ret]) & 127]; } omegac = 3.1415926535897931; cutoff /= 100.0; wavCFandSD(a, frange_idx_0, be, &FourierFactor, &frange_idx_1, &cf); FourierFactor = N / (frange_idx_1 * 2.0); ret = memcmp(&a[0], &b_b[0], 5); if (ret == 0) { ret = 0; } else { ret = -1; } if (static_cast((ret == 0))) { omegac = getFreqFromCutoffMorse(cutoff, cf, frange_idx_0, be); } omegac /= 3.1415926535897931; cutoff = rt_powd_snf(2.0, 1.0 / nv); frange_idx_1 = omegac * cutoff; if (FourierFactor < frange_idx_1) { FourierFactor = frange_idx_1; } frange_idx_1 = b_log2(FourierFactor / omegac); FourierFactor = 1.0 / nv; if ((frange_idx_1 > FourierFactor) || rtIsNaN(FourierFactor)) { FourierFactor = frange_idx_1; } frange_idx_1 = FourierFactor * nv; if (rtIsNaN(frange_idx_1)) { nx = omega->size[0] * omega->size[1]; omega->size[0] = 1; omega->size[1] = 1; emxEnsureCapacity_real_T(omega, nx); omega->data[0] = rtNaN; } else if (frange_idx_1 < 0.0) { omega->size[0] = 1; omega->size[1] = 0; } else if (rtIsInf(frange_idx_1) && (0.0 == frange_idx_1)) { nx = omega->size[0] * omega->size[1]; omega->size[0] = 1; omega->size[1] = 1; emxEnsureCapacity_real_T(omega, nx); omega->data[0] = rtNaN; } else { nx = omega->size[0] * omega->size[1]; omega->size[0] = 1; loop_ub = static_cast(std::floor(frange_idx_1)); omega->size[1] = loop_ub + 1; emxEnsureCapacity_real_T(omega, nx); for (nx = 0; nx <= loop_ub; nx++) { omega->data[nx] = nx; } } nx = y->size[0] * y->size[1]; y->size[0] = 1; y->size[1] = omega->size[1]; emxEnsureCapacity_real_T(y, nx); nx = omega->size[1]; for (ret = 0; ret < nx; ret++) { y->data[ret] = rt_powd_snf(cutoff, omega->data[ret]); } nx = b_self->Scales->size[0] * b_self->Scales->size[1]; b_self->Scales->size[0] = 1; b_self->Scales->size[1] = y->size[1]; emxEnsureCapacity_real_T(b_self->Scales, nx); loop_ub = y->size[0] * y->size[1]; for (nx = 0; nx < loop_ub; nx++) { b_self->Scales->data[nx] = omegac * y->data[nx]; } } emxFree_real_T(&y); emxFree_real_T(&omega); cwtfilterbank_filterbank(b_self); return b_self; } // // Arguments : const cwtfilterbank *self // double x_data[] // const int x_size[2] // emxArray_creal_T *varargout_1 // Return Type : void // void cwtfilterbank_wt(const cwtfilterbank *self, double x_data[], const int x_size[2], emxArray_creal_T *varargout_1) { int nd2; int loop_ub; double b_x_data[1280]; int xv_size[2]; double xv_data[3841]; double xtmp; emxArray_creal_T *cfspos; emxArray_creal_T *r; static creal_T tmp_data[3841]; int tmp_size[2]; int i; int i1; int i2; int b_j1; int j2; nd2 = x_size[1]; loop_ub = x_size[1]; if (0 <= loop_ub - 1) { std::memcpy(&b_x_data[0], &x_data[0], loop_ub * sizeof(double)); } if (0 <= nd2 - 1) { std::memcpy(&x_data[0], &b_x_data[0], nd2 * sizeof(double)); } xv_size[0] = 1; xv_size[1] = nd2; if (0 <= nd2 - 1) { std::memcpy(&xv_data[0], &x_data[0], nd2 * sizeof(double)); } if (self->SignalPad > 0.0) { xtmp = self->SignalPad; if (1.0 > xtmp) { loop_ub = 0; } else { loop_ub = static_cast(xtmp); } xtmp = (static_cast(nd2) - self->SignalPad) + 1.0; if (xtmp > nd2) { i = 0; i1 = 1; i2 = -1; } else { i = nd2 - 1; i1 = -1; i2 = static_cast(xtmp) - 1; } if (0 <= loop_ub - 1) { std::memcpy(&b_x_data[0], &x_data[0], loop_ub * sizeof(double)); } nd2 = loop_ub >> 1; for (b_j1 = 0; b_j1 < nd2; b_j1++) { j2 = (static_cast(loop_ub) - b_j1) - 1; xtmp = b_x_data[b_j1]; b_x_data[b_j1] = b_x_data[j2]; b_x_data[j2] = xtmp; } xv_size[0] = 1; nd2 = div_s32_floor(i2 - i, i1); xv_size[1] = ((loop_ub + x_size[1]) + nd2) + 1; if (0 <= loop_ub - 1) { std::memcpy(&xv_data[0], &b_x_data[0], loop_ub * sizeof(double)); } b_j1 = x_size[1]; for (i2 = 0; i2 < b_j1; i2++) { xv_data[i2 + loop_ub] = x_data[i2]; } for (i2 = 0; i2 <= nd2; i2++) { xv_data[(i2 + loop_ub) + x_size[1]] = x_data[i + i1 * i2]; } } emxInit_creal_T(&cfspos, 2); emxInit_creal_T(&r, 2); fft(xv_data, xv_size, tmp_data, tmp_size); bsxfun(tmp_data, tmp_size, self->PsiDFT, r); ifft(r, cfspos); i = varargout_1->size[0] * varargout_1->size[1]; varargout_1->size[0] = cfspos->size[0]; varargout_1->size[1] = cfspos->size[1]; emxEnsureCapacity_creal_T(varargout_1, i); loop_ub = cfspos->size[0] * cfspos->size[1]; emxFree_creal_T(&r); for (i = 0; i < loop_ub; i++) { varargout_1->data[i] = cfspos->data[i]; } if (self->SignalPad > 0.0) { xtmp = self->SignalPad; loop_ub = cfspos->size[0]; i = varargout_1->size[0] * varargout_1->size[1]; varargout_1->size[0] = cfspos->size[0]; nd2 = static_cast(std::floor(self->SignalLength - 1.0)); varargout_1->size[1] = nd2 + 1; emxEnsureCapacity_creal_T(varargout_1, i); for (i = 0; i <= nd2; i++) { for (i1 = 0; i1 < loop_ub; i1++) { varargout_1->data[i1 + varargout_1->size[0] * i] = cfspos->data[i1 + cfspos->size[0] * (static_cast((xtmp + static_cast((i + 1)))) - 1)]; } } } emxFree_creal_T(&cfspos); } // // File trailer for cwtfilterbank.cpp // // [EOF] //