Code for measuring the signal with a specified length and sampling rate, and saving it on a SD card.

Dependencies:   EALib I2S mbed

Committer:
msamadani
Date:
Fri Jul 14 14:41:10 2017 +0000
Revision:
1:a514e4de034d
envSignal function works.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
msamadani 1:a514e4de034d 1 //
msamadani 1:a514e4de034d 2 // Academic License - for use in teaching, academic research, and meeting
msamadani 1:a514e4de034d 3 // course requirements at degree granting institutions only. Not for
msamadani 1:a514e4de034d 4 // government, commercial, or other organizational use.
msamadani 1:a514e4de034d 5 // File: fft.cpp
msamadani 1:a514e4de034d 6 //
msamadani 1:a514e4de034d 7 // MATLAB Coder version : 3.3
msamadani 1:a514e4de034d 8 // C/C++ source code generated on : 13-Jul-2017 15:47:47
msamadani 1:a514e4de034d 9 //
msamadani 1:a514e4de034d 10
msamadani 1:a514e4de034d 11 // Include Files
msamadani 1:a514e4de034d 12 #include "envSignal.h"
msamadani 1:a514e4de034d 13 #include "fft.h"
msamadani 1:a514e4de034d 14 #include "envSignal_emxutil.h"
msamadani 1:a514e4de034d 15 #include "ifft.h"
msamadani 1:a514e4de034d 16
msamadani 1:a514e4de034d 17 // Function Declarations
msamadani 1:a514e4de034d 18 static void generate_twiddle_tables(int nRows, boolean_T useRadix2,
msamadani 1:a514e4de034d 19 emxArray_real32_T *costab, emxArray_real32_T *sintab, emxArray_real32_T
msamadani 1:a514e4de034d 20 *sintabinv);
msamadani 1:a514e4de034d 21
msamadani 1:a514e4de034d 22 // Function Definitions
msamadani 1:a514e4de034d 23
msamadani 1:a514e4de034d 24 //
msamadani 1:a514e4de034d 25 // Arguments : int nRows
msamadani 1:a514e4de034d 26 // boolean_T useRadix2
msamadani 1:a514e4de034d 27 // emxArray_real32_T *costab
msamadani 1:a514e4de034d 28 // emxArray_real32_T *sintab
msamadani 1:a514e4de034d 29 // emxArray_real32_T *sintabinv
msamadani 1:a514e4de034d 30 // Return Type : void
msamadani 1:a514e4de034d 31 //
msamadani 1:a514e4de034d 32 static void generate_twiddle_tables(int nRows, boolean_T useRadix2,
msamadani 1:a514e4de034d 33 emxArray_real32_T *costab, emxArray_real32_T *sintab, emxArray_real32_T
msamadani 1:a514e4de034d 34 *sintabinv)
msamadani 1:a514e4de034d 35 {
msamadani 1:a514e4de034d 36 emxArray_real32_T *costab1q;
msamadani 1:a514e4de034d 37 float e;
msamadani 1:a514e4de034d 38 int nRowsD4;
msamadani 1:a514e4de034d 39 int nd2;
msamadani 1:a514e4de034d 40 int k;
msamadani 1:a514e4de034d 41 int n2;
msamadani 1:a514e4de034d 42 emxInit_real32_T(&costab1q, 2);
msamadani 1:a514e4de034d 43 e = 6.28318548F / (float)nRows;
msamadani 1:a514e4de034d 44 nRowsD4 = nRows / 2 / 2;
msamadani 1:a514e4de034d 45 nd2 = costab1q->size[0] * costab1q->size[1];
msamadani 1:a514e4de034d 46 costab1q->size[0] = 1;
msamadani 1:a514e4de034d 47 costab1q->size[1] = nRowsD4 + 1;
msamadani 1:a514e4de034d 48 emxEnsureCapacity((emxArray__common *)costab1q, nd2, sizeof(float));
msamadani 1:a514e4de034d 49 costab1q->data[0] = 1.0F;
msamadani 1:a514e4de034d 50 nd2 = nRowsD4 / 2;
msamadani 1:a514e4de034d 51 for (k = 1; k <= nd2; k++) {
msamadani 1:a514e4de034d 52 costab1q->data[k] = std::cos(e * (float)k);
msamadani 1:a514e4de034d 53 }
msamadani 1:a514e4de034d 54
msamadani 1:a514e4de034d 55 for (k = nd2 + 1; k < nRowsD4; k++) {
msamadani 1:a514e4de034d 56 costab1q->data[k] = std::sin(e * (float)(nRowsD4 - k));
msamadani 1:a514e4de034d 57 }
msamadani 1:a514e4de034d 58
msamadani 1:a514e4de034d 59 costab1q->data[nRowsD4] = 0.0F;
msamadani 1:a514e4de034d 60 if (!useRadix2) {
msamadani 1:a514e4de034d 61 nRowsD4 = costab1q->size[1] - 1;
msamadani 1:a514e4de034d 62 n2 = (costab1q->size[1] - 1) << 1;
msamadani 1:a514e4de034d 63 nd2 = costab->size[0] * costab->size[1];
msamadani 1:a514e4de034d 64 costab->size[0] = 1;
msamadani 1:a514e4de034d 65 costab->size[1] = n2 + 1;
msamadani 1:a514e4de034d 66 emxEnsureCapacity((emxArray__common *)costab, nd2, sizeof(float));
msamadani 1:a514e4de034d 67 nd2 = sintab->size[0] * sintab->size[1];
msamadani 1:a514e4de034d 68 sintab->size[0] = 1;
msamadani 1:a514e4de034d 69 sintab->size[1] = n2 + 1;
msamadani 1:a514e4de034d 70 emxEnsureCapacity((emxArray__common *)sintab, nd2, sizeof(float));
msamadani 1:a514e4de034d 71 costab->data[0] = 1.0F;
msamadani 1:a514e4de034d 72 sintab->data[0] = 0.0F;
msamadani 1:a514e4de034d 73 nd2 = sintabinv->size[0] * sintabinv->size[1];
msamadani 1:a514e4de034d 74 sintabinv->size[0] = 1;
msamadani 1:a514e4de034d 75 sintabinv->size[1] = n2 + 1;
msamadani 1:a514e4de034d 76 emxEnsureCapacity((emxArray__common *)sintabinv, nd2, sizeof(float));
msamadani 1:a514e4de034d 77 for (k = 1; k <= nRowsD4; k++) {
msamadani 1:a514e4de034d 78 sintabinv->data[k] = costab1q->data[nRowsD4 - k];
msamadani 1:a514e4de034d 79 }
msamadani 1:a514e4de034d 80
msamadani 1:a514e4de034d 81 for (k = costab1q->size[1]; k <= n2; k++) {
msamadani 1:a514e4de034d 82 sintabinv->data[k] = costab1q->data[k - nRowsD4];
msamadani 1:a514e4de034d 83 }
msamadani 1:a514e4de034d 84
msamadani 1:a514e4de034d 85 for (k = 1; k <= nRowsD4; k++) {
msamadani 1:a514e4de034d 86 costab->data[k] = costab1q->data[k];
msamadani 1:a514e4de034d 87 sintab->data[k] = -costab1q->data[nRowsD4 - k];
msamadani 1:a514e4de034d 88 }
msamadani 1:a514e4de034d 89
msamadani 1:a514e4de034d 90 for (k = costab1q->size[1]; k <= n2; k++) {
msamadani 1:a514e4de034d 91 costab->data[k] = -costab1q->data[n2 - k];
msamadani 1:a514e4de034d 92 sintab->data[k] = -costab1q->data[k - nRowsD4];
msamadani 1:a514e4de034d 93 }
msamadani 1:a514e4de034d 94 } else {
msamadani 1:a514e4de034d 95 nRowsD4 = costab1q->size[1] - 1;
msamadani 1:a514e4de034d 96 n2 = (costab1q->size[1] - 1) << 1;
msamadani 1:a514e4de034d 97 nd2 = costab->size[0] * costab->size[1];
msamadani 1:a514e4de034d 98 costab->size[0] = 1;
msamadani 1:a514e4de034d 99 costab->size[1] = n2 + 1;
msamadani 1:a514e4de034d 100 emxEnsureCapacity((emxArray__common *)costab, nd2, sizeof(float));
msamadani 1:a514e4de034d 101 nd2 = sintab->size[0] * sintab->size[1];
msamadani 1:a514e4de034d 102 sintab->size[0] = 1;
msamadani 1:a514e4de034d 103 sintab->size[1] = n2 + 1;
msamadani 1:a514e4de034d 104 emxEnsureCapacity((emxArray__common *)sintab, nd2, sizeof(float));
msamadani 1:a514e4de034d 105 costab->data[0] = 1.0F;
msamadani 1:a514e4de034d 106 sintab->data[0] = 0.0F;
msamadani 1:a514e4de034d 107 for (k = 1; k <= nRowsD4; k++) {
msamadani 1:a514e4de034d 108 costab->data[k] = costab1q->data[k];
msamadani 1:a514e4de034d 109 sintab->data[k] = -costab1q->data[nRowsD4 - k];
msamadani 1:a514e4de034d 110 }
msamadani 1:a514e4de034d 111
msamadani 1:a514e4de034d 112 for (k = costab1q->size[1]; k <= n2; k++) {
msamadani 1:a514e4de034d 113 costab->data[k] = -costab1q->data[n2 - k];
msamadani 1:a514e4de034d 114 sintab->data[k] = -costab1q->data[k - nRowsD4];
msamadani 1:a514e4de034d 115 }
msamadani 1:a514e4de034d 116
msamadani 1:a514e4de034d 117 nd2 = sintabinv->size[0] * sintabinv->size[1];
msamadani 1:a514e4de034d 118 sintabinv->size[0] = 1;
msamadani 1:a514e4de034d 119 sintabinv->size[1] = 0;
msamadani 1:a514e4de034d 120 emxEnsureCapacity((emxArray__common *)sintabinv, nd2, sizeof(float));
msamadani 1:a514e4de034d 121 }
msamadani 1:a514e4de034d 122
msamadani 1:a514e4de034d 123 emxFree_real32_T(&costab1q);
msamadani 1:a514e4de034d 124 }
msamadani 1:a514e4de034d 125
msamadani 1:a514e4de034d 126 //
msamadani 1:a514e4de034d 127 // Arguments : const emxArray_real32_T *x
msamadani 1:a514e4de034d 128 // emxArray_creal32_T *y
msamadani 1:a514e4de034d 129 // Return Type : void
msamadani 1:a514e4de034d 130 //
msamadani 1:a514e4de034d 131 void fft(const emxArray_real32_T *x, emxArray_creal32_T *y)
msamadani 1:a514e4de034d 132 {
msamadani 1:a514e4de034d 133 int n1;
msamadani 1:a514e4de034d 134 emxArray_real32_T *costab;
msamadani 1:a514e4de034d 135 int nInt2;
msamadani 1:a514e4de034d 136 emxArray_real32_T *sintab;
msamadani 1:a514e4de034d 137 emxArray_real32_T *sintabinv;
msamadani 1:a514e4de034d 138 boolean_T useRadix2;
msamadani 1:a514e4de034d 139 int N2blue;
msamadani 1:a514e4de034d 140 int idx;
msamadani 1:a514e4de034d 141 emxArray_creal32_T *wwc;
msamadani 1:a514e4de034d 142 int nInt2m1;
msamadani 1:a514e4de034d 143 int nRowsD2;
msamadani 1:a514e4de034d 144 int nRowsD4;
msamadani 1:a514e4de034d 145 int rt;
msamadani 1:a514e4de034d 146 int ihi;
msamadani 1:a514e4de034d 147 int istart;
msamadani 1:a514e4de034d 148 float nt_im;
msamadani 1:a514e4de034d 149 float nt_re;
msamadani 1:a514e4de034d 150 float temp_re;
msamadani 1:a514e4de034d 151 float temp_im;
msamadani 1:a514e4de034d 152 emxArray_creal32_T *fy;
msamadani 1:a514e4de034d 153 emxArray_creal32_T *fv;
msamadani 1:a514e4de034d 154 float fv_re;
msamadani 1:a514e4de034d 155 float fv_im;
msamadani 1:a514e4de034d 156 float wwc_im;
msamadani 1:a514e4de034d 157 float b_fv_re;
msamadani 1:a514e4de034d 158 n1 = x->size[0];
msamadani 1:a514e4de034d 159 if (x->size[0] == 0) {
msamadani 1:a514e4de034d 160 nInt2 = y->size[0];
msamadani 1:a514e4de034d 161 y->size[0] = 0;
msamadani 1:a514e4de034d 162 emxEnsureCapacity((emxArray__common *)y, nInt2, sizeof(creal32_T));
msamadani 1:a514e4de034d 163 } else {
msamadani 1:a514e4de034d 164 emxInit_real32_T(&costab, 2);
msamadani 1:a514e4de034d 165 emxInit_real32_T(&sintab, 2);
msamadani 1:a514e4de034d 166 emxInit_real32_T(&sintabinv, 2);
msamadani 1:a514e4de034d 167 useRadix2 = ((x->size[0] & (x->size[0] - 1)) == 0);
msamadani 1:a514e4de034d 168 get_algo_sizes(x->size[0], useRadix2, &N2blue, &idx);
msamadani 1:a514e4de034d 169 generate_twiddle_tables(idx, useRadix2, costab, sintab, sintabinv);
msamadani 1:a514e4de034d 170 if (useRadix2) {
msamadani 1:a514e4de034d 171 nInt2m1 = x->size[0];
msamadani 1:a514e4de034d 172 nRowsD2 = x->size[0] / 2;
msamadani 1:a514e4de034d 173 nRowsD4 = nRowsD2 / 2;
msamadani 1:a514e4de034d 174 idx = x->size[0];
msamadani 1:a514e4de034d 175 nInt2 = y->size[0];
msamadani 1:a514e4de034d 176 y->size[0] = idx;
msamadani 1:a514e4de034d 177 emxEnsureCapacity((emxArray__common *)y, nInt2, sizeof(creal32_T));
msamadani 1:a514e4de034d 178 rt = 0;
msamadani 1:a514e4de034d 179 nInt2 = 0;
msamadani 1:a514e4de034d 180 idx = 0;
msamadani 1:a514e4de034d 181 for (N2blue = 1; N2blue < nInt2m1; N2blue++) {
msamadani 1:a514e4de034d 182 y->data[idx].re = x->data[rt];
msamadani 1:a514e4de034d 183 y->data[idx].im = 0.0F;
msamadani 1:a514e4de034d 184 idx = n1;
msamadani 1:a514e4de034d 185 useRadix2 = true;
msamadani 1:a514e4de034d 186 while (useRadix2) {
msamadani 1:a514e4de034d 187 idx >>= 1;
msamadani 1:a514e4de034d 188 nInt2 ^= idx;
msamadani 1:a514e4de034d 189 useRadix2 = ((nInt2 & idx) == 0);
msamadani 1:a514e4de034d 190 }
msamadani 1:a514e4de034d 191
msamadani 1:a514e4de034d 192 idx = nInt2;
msamadani 1:a514e4de034d 193 rt++;
msamadani 1:a514e4de034d 194 }
msamadani 1:a514e4de034d 195
msamadani 1:a514e4de034d 196 y->data[idx].re = x->data[rt];
msamadani 1:a514e4de034d 197 y->data[idx].im = 0.0F;
msamadani 1:a514e4de034d 198 if (x->size[0] > 1) {
msamadani 1:a514e4de034d 199 for (N2blue = 0; N2blue <= n1 - 2; N2blue += 2) {
msamadani 1:a514e4de034d 200 temp_re = y->data[N2blue + 1].re;
msamadani 1:a514e4de034d 201 temp_im = y->data[N2blue + 1].im;
msamadani 1:a514e4de034d 202 y->data[N2blue + 1].re = y->data[N2blue].re - y->data[N2blue + 1].re;
msamadani 1:a514e4de034d 203 y->data[N2blue + 1].im = y->data[N2blue].im - y->data[N2blue + 1].im;
msamadani 1:a514e4de034d 204 y->data[N2blue].re += temp_re;
msamadani 1:a514e4de034d 205 y->data[N2blue].im += temp_im;
msamadani 1:a514e4de034d 206 }
msamadani 1:a514e4de034d 207 }
msamadani 1:a514e4de034d 208
msamadani 1:a514e4de034d 209 idx = 2;
msamadani 1:a514e4de034d 210 rt = 4;
msamadani 1:a514e4de034d 211 nInt2 = 1 + ((nRowsD4 - 1) << 2);
msamadani 1:a514e4de034d 212 while (nRowsD4 > 0) {
msamadani 1:a514e4de034d 213 for (N2blue = 0; N2blue < nInt2; N2blue += rt) {
msamadani 1:a514e4de034d 214 temp_re = y->data[N2blue + idx].re;
msamadani 1:a514e4de034d 215 temp_im = y->data[N2blue + idx].im;
msamadani 1:a514e4de034d 216 y->data[N2blue + idx].re = y->data[N2blue].re - temp_re;
msamadani 1:a514e4de034d 217 y->data[N2blue + idx].im = y->data[N2blue].im - temp_im;
msamadani 1:a514e4de034d 218 y->data[N2blue].re += temp_re;
msamadani 1:a514e4de034d 219 y->data[N2blue].im += temp_im;
msamadani 1:a514e4de034d 220 }
msamadani 1:a514e4de034d 221
msamadani 1:a514e4de034d 222 istart = 1;
msamadani 1:a514e4de034d 223 for (nInt2m1 = nRowsD4; nInt2m1 < nRowsD2; nInt2m1 += nRowsD4) {
msamadani 1:a514e4de034d 224 nt_re = costab->data[nInt2m1];
msamadani 1:a514e4de034d 225 nt_im = sintab->data[nInt2m1];
msamadani 1:a514e4de034d 226 N2blue = istart;
msamadani 1:a514e4de034d 227 ihi = istart + nInt2;
msamadani 1:a514e4de034d 228 while (N2blue < ihi) {
msamadani 1:a514e4de034d 229 temp_re = nt_re * y->data[N2blue + idx].re - nt_im * y->data[N2blue
msamadani 1:a514e4de034d 230 + idx].im;
msamadani 1:a514e4de034d 231 temp_im = nt_re * y->data[N2blue + idx].im + nt_im * y->data[N2blue
msamadani 1:a514e4de034d 232 + idx].re;
msamadani 1:a514e4de034d 233 y->data[N2blue + idx].re = y->data[N2blue].re - temp_re;
msamadani 1:a514e4de034d 234 y->data[N2blue + idx].im = y->data[N2blue].im - temp_im;
msamadani 1:a514e4de034d 235 y->data[N2blue].re += temp_re;
msamadani 1:a514e4de034d 236 y->data[N2blue].im += temp_im;
msamadani 1:a514e4de034d 237 N2blue += rt;
msamadani 1:a514e4de034d 238 }
msamadani 1:a514e4de034d 239
msamadani 1:a514e4de034d 240 istart++;
msamadani 1:a514e4de034d 241 }
msamadani 1:a514e4de034d 242
msamadani 1:a514e4de034d 243 nRowsD4 /= 2;
msamadani 1:a514e4de034d 244 idx = rt;
msamadani 1:a514e4de034d 245 rt += rt;
msamadani 1:a514e4de034d 246 nInt2 -= idx;
msamadani 1:a514e4de034d 247 }
msamadani 1:a514e4de034d 248 } else {
msamadani 1:a514e4de034d 249 emxInit_creal32_T(&wwc, 1);
msamadani 1:a514e4de034d 250 nInt2m1 = (x->size[0] + x->size[0]) - 1;
msamadani 1:a514e4de034d 251 nInt2 = wwc->size[0];
msamadani 1:a514e4de034d 252 wwc->size[0] = nInt2m1;
msamadani 1:a514e4de034d 253 emxEnsureCapacity((emxArray__common *)wwc, nInt2, sizeof(creal32_T));
msamadani 1:a514e4de034d 254 idx = x->size[0];
msamadani 1:a514e4de034d 255 rt = 0;
msamadani 1:a514e4de034d 256 wwc->data[x->size[0] - 1].re = 1.0F;
msamadani 1:a514e4de034d 257 wwc->data[x->size[0] - 1].im = 0.0F;
msamadani 1:a514e4de034d 258 nInt2 = x->size[0] << 1;
msamadani 1:a514e4de034d 259 for (ihi = 1; ihi < n1; ihi++) {
msamadani 1:a514e4de034d 260 istart = (ihi << 1) - 1;
msamadani 1:a514e4de034d 261 if (nInt2 - rt <= istart) {
msamadani 1:a514e4de034d 262 rt += istart - nInt2;
msamadani 1:a514e4de034d 263 } else {
msamadani 1:a514e4de034d 264 rt += istart;
msamadani 1:a514e4de034d 265 }
msamadani 1:a514e4de034d 266
msamadani 1:a514e4de034d 267 nt_im = -3.14159274F * (float)rt / (float)x->size[0];
msamadani 1:a514e4de034d 268 if (nt_im == 0.0F) {
msamadani 1:a514e4de034d 269 nt_re = 1.0F;
msamadani 1:a514e4de034d 270 nt_im = 0.0F;
msamadani 1:a514e4de034d 271 } else {
msamadani 1:a514e4de034d 272 nt_re = std::cos(nt_im);
msamadani 1:a514e4de034d 273 nt_im = std::sin(nt_im);
msamadani 1:a514e4de034d 274 }
msamadani 1:a514e4de034d 275
msamadani 1:a514e4de034d 276 wwc->data[idx - 2].re = nt_re;
msamadani 1:a514e4de034d 277 wwc->data[idx - 2].im = -nt_im;
msamadani 1:a514e4de034d 278 idx--;
msamadani 1:a514e4de034d 279 }
msamadani 1:a514e4de034d 280
msamadani 1:a514e4de034d 281 idx = 0;
msamadani 1:a514e4de034d 282 for (ihi = nInt2m1 - 1; ihi >= n1; ihi--) {
msamadani 1:a514e4de034d 283 wwc->data[ihi] = wwc->data[idx];
msamadani 1:a514e4de034d 284 idx++;
msamadani 1:a514e4de034d 285 }
msamadani 1:a514e4de034d 286
msamadani 1:a514e4de034d 287 rt = x->size[0];
msamadani 1:a514e4de034d 288 idx = x->size[0];
msamadani 1:a514e4de034d 289 nInt2 = y->size[0];
msamadani 1:a514e4de034d 290 y->size[0] = idx;
msamadani 1:a514e4de034d 291 emxEnsureCapacity((emxArray__common *)y, nInt2, sizeof(creal32_T));
msamadani 1:a514e4de034d 292 idx = 0;
msamadani 1:a514e4de034d 293 for (ihi = 0; ihi + 1 <= rt; ihi++) {
msamadani 1:a514e4de034d 294 nt_re = wwc->data[(n1 + ihi) - 1].re;
msamadani 1:a514e4de034d 295 nt_im = wwc->data[(n1 + ihi) - 1].im;
msamadani 1:a514e4de034d 296 y->data[ihi].re = nt_re * x->data[idx];
msamadani 1:a514e4de034d 297 y->data[ihi].im = nt_im * -x->data[idx];
msamadani 1:a514e4de034d 298 idx++;
msamadani 1:a514e4de034d 299 }
msamadani 1:a514e4de034d 300
msamadani 1:a514e4de034d 301 while (rt + 1 <= n1) {
msamadani 1:a514e4de034d 302 y->data[rt].re = 0.0F;
msamadani 1:a514e4de034d 303 y->data[rt].im = 0.0F;
msamadani 1:a514e4de034d 304 rt++;
msamadani 1:a514e4de034d 305 }
msamadani 1:a514e4de034d 306
msamadani 1:a514e4de034d 307 emxInit_creal32_T(&fy, 1);
msamadani 1:a514e4de034d 308 emxInit_creal32_T(&fv, 1);
msamadani 1:a514e4de034d 309 r2br_r2dit_trig_impl(y, 0, N2blue, costab, sintab, fy);
msamadani 1:a514e4de034d 310 r2br_r2dit_trig(wwc, N2blue, costab, sintab, fv);
msamadani 1:a514e4de034d 311 nInt2 = fy->size[0];
msamadani 1:a514e4de034d 312 emxEnsureCapacity((emxArray__common *)fy, nInt2, sizeof(creal32_T));
msamadani 1:a514e4de034d 313 idx = fy->size[0];
msamadani 1:a514e4de034d 314 for (nInt2 = 0; nInt2 < idx; nInt2++) {
msamadani 1:a514e4de034d 315 nt_re = fy->data[nInt2].re;
msamadani 1:a514e4de034d 316 nt_im = fy->data[nInt2].im;
msamadani 1:a514e4de034d 317 fv_re = fv->data[nInt2].re;
msamadani 1:a514e4de034d 318 fv_im = fv->data[nInt2].im;
msamadani 1:a514e4de034d 319 fy->data[nInt2].re = nt_re * fv_re - nt_im * fv_im;
msamadani 1:a514e4de034d 320 fy->data[nInt2].im = nt_re * fv_im + nt_im * fv_re;
msamadani 1:a514e4de034d 321 }
msamadani 1:a514e4de034d 322
msamadani 1:a514e4de034d 323 b_r2br_r2dit_trig(fy, N2blue, costab, sintabinv, fv);
msamadani 1:a514e4de034d 324 idx = 0;
msamadani 1:a514e4de034d 325 ihi = (int)(float)x->size[0] - 1;
msamadani 1:a514e4de034d 326 emxFree_creal32_T(&fy);
msamadani 1:a514e4de034d 327 while (ihi + 1 <= wwc->size[0]) {
msamadani 1:a514e4de034d 328 nt_re = wwc->data[ihi].re;
msamadani 1:a514e4de034d 329 fv_re = fv->data[ihi].re;
msamadani 1:a514e4de034d 330 nt_im = wwc->data[ihi].im;
msamadani 1:a514e4de034d 331 fv_im = fv->data[ihi].im;
msamadani 1:a514e4de034d 332 temp_re = wwc->data[ihi].re;
msamadani 1:a514e4de034d 333 temp_im = fv->data[ihi].im;
msamadani 1:a514e4de034d 334 wwc_im = wwc->data[ihi].im;
msamadani 1:a514e4de034d 335 b_fv_re = fv->data[ihi].re;
msamadani 1:a514e4de034d 336 y->data[idx].re = nt_re * fv_re + nt_im * fv_im;
msamadani 1:a514e4de034d 337 y->data[idx].im = temp_re * temp_im - wwc_im * b_fv_re;
msamadani 1:a514e4de034d 338 idx++;
msamadani 1:a514e4de034d 339 ihi++;
msamadani 1:a514e4de034d 340 }
msamadani 1:a514e4de034d 341
msamadani 1:a514e4de034d 342 emxFree_creal32_T(&fv);
msamadani 1:a514e4de034d 343 emxFree_creal32_T(&wwc);
msamadani 1:a514e4de034d 344 }
msamadani 1:a514e4de034d 345
msamadani 1:a514e4de034d 346 emxFree_real32_T(&sintabinv);
msamadani 1:a514e4de034d 347 emxFree_real32_T(&sintab);
msamadani 1:a514e4de034d 348 emxFree_real32_T(&costab);
msamadani 1:a514e4de034d 349 }
msamadani 1:a514e4de034d 350 }
msamadani 1:a514e4de034d 351
msamadani 1:a514e4de034d 352 //
msamadani 1:a514e4de034d 353 // File trailer for fft.cpp
msamadani 1:a514e4de034d 354 //
msamadani 1:a514e4de034d 355 // [EOF]
msamadani 1:a514e4de034d 356 //
msamadani 1:a514e4de034d 357