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:
Thu Oct 05 17:44:39 2017 +0000
Revision:
2:8c5b6522139f
Parent:
1:a514e4de034d
A version of the code that initializes the SD RAM, activates the codec, measures the signal and saves the signal onto the SD Card.

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