plik


CMSIS DSP Software Library: arm_convolution_example_f32.c Source File Main Page Modules Data Structures Files Examples File List Globals arm_convolution_example_f32.c Go to the documentation of this file.00001 /* ---------------------------------------------------------------------- 00002 * Copyright (C) 2010 ARM Limited. All rights reserved. 00003 * 00004 * $Date: 29. November 2010 00005 * $Revision: V1.0.3 00006 * 00007 * Project: CMSIS DSP Library 00008 * Title: arm_convolution_example_f32.c 00009 * 00010 * Description: Example code demonstrating Convolution of two input signals using fft. 00011 * 00012 * Target Processor: Cortex-M4/Cortex-M3 00013 * 00014 * 00015 * Version 1.0.3 2010/11/29 00016 * Re-organized the CMSIS folders and updated documentation. 00017 * 00018 * Version 1.0.1 2010/10/05 KK 00019 * Production release and review comments incorporated. 00020 * 00021 * Version 1.0.0 2010/09/20 KK 00022 * Production release and review comments incorporated. 00023 * ------------------------------------------------------------------- */ 00024 00089 #include "arm_math.h" 00090 #include "math_helper.h" 00091 00092 /* ---------------------------------------------------------------------- 00093 * Defines each of the tests performed 00094 * ------------------------------------------------------------------- */ 00095 #define MAX_BLOCKSIZE 128 00096 #define DELTA (0.000001f) 00097 #define SNR_THRESHOLD 90 00098 00099 /* ---------------------------------------------------------------------- 00100 * Declare I/O buffers 00101 * ------------------------------------------------------------------- */ 00102 float32_t Ak[MAX_BLOCKSIZE]; /* Input A */ 00103 float32_t Bk[MAX_BLOCKSIZE]; /* Input B */ 00104 float32_t AxB[MAX_BLOCKSIZE * 2]; /* Output */ 00105 00106 /* ---------------------------------------------------------------------- 00107 * Test input data for Floating point Convolution example for 32-blockSize 00108 * Generated by the MATLAB randn() function 00109 * ------------------------------------------------------------------- */ 00110 float32_t testInputA_f32[64] = 00111 { 00112 -0.808920, 1.357369, 1.180861, -0.504544, 1.762637, -0.703285, 00113 1.696966, 0.620571, -0.151093, -0.100235, -0.872382, -0.403579, 00114 -0.860749, -0.382648, -1.052338, 0.128113, -0.646269, 1.093377, 00115 -2.209198, 0.471706, 0.408901, 1.266242, 0.598252, 1.176827, 00116 -0.203421, 0.213596, -0.851964, -0.466958, 0.021841, -0.698938, 00117 -0.604107, 0.461778, -0.318219, 0.942520, 0.577585, 0.417619, 00118 0.614665, 0.563679, -1.295073, -0.764437, 0.952194, -0.859222, 00119 -0.618554, -2.268542, -1.210592, 1.655853, -2.627219, -0.994249, 00120 -1.374704, 0.343799, 0.025619, 1.227481, -0.708031, 0.069355, 00121 -1.845228, -1.570886, 1.010668, -1.802084, 1.630088, 1.286090, 00122 -0.161050, -0.940794, 0.367961, 0.291907 00123 00124 }; 00125 00126 float32_t testInputB_f32[64] = 00127 { 00128 0.933724, 0.046881, 1.316470, 0.438345, 0.332682, 2.094885, 00129 0.512081, 0.035546, 0.050894, -2.320371, 0.168711, -1.830493, 00130 -0.444834, -1.003242, -0.531494, -1.365600, -0.155420, -0.757692, 00131 -0.431880, -0.380021, 0.096243, -0.695835, 0.558850, -1.648962, 00132 0.020369, -0.363630, 0.887146, 0.845503, -0.252864, -0.330397, 00133 1.269131, -1.109295, -1.027876, 0.135940, 0.116721, -0.293399, 00134 -1.349799, 0.166078, -0.802201, 0.369367, -0.964568, -2.266011, 00135 0.465178, 0.651222, -0.325426, 0.320245, -0.784178, -0.579456, 00136 0.093374, 0.604778, -0.048225, 0.376297, -0.394412, 0.578182, 00137 -1.218141, -1.387326, 0.692462, -0.631297, 0.153137, -0.638952, 00138 0.635474, -0.970468, 1.334057, -0.111370 00139 }; 00140 00141 const float testRefOutput_f32[126] = 00142 { 00143 -0.818943, 1.229484, -0.533664, 1.016604, 0.341875, -1.963656, 00144 5.171476, 3.478033, 7.616361, 6.648384, 0.479069, 1.792012, 00145 -1.295591, -7.447818, 0.315830, -10.657445, -2.483469, -6.524236, 00146 -7.380591, -3.739005, -8.388957, 0.184147, -1.554888, 3.786508, 00147 -1.684421, 5.400610, -1.578126, 7.403361, 8.315999, 2.080267, 00148 11.077776, 2.749673, 7.138962, 2.748762, 0.660363, 0.981552, 00149 1.442275, 0.552721, -2.576892, 4.703989, 0.989156, 8.759344, 00150 -0.564825, -3.994680, 0.954710, -5.014144, 6.592329, 1.599488, 00151 -13.979146, -0.391891, -4.453369, -2.311242, -2.948764, 1.761415, 00152 -0.138322, 10.433007, -2.309103, 4.297153, 8.535523, 3.209462, 00153 8.695819, 5.569919, 2.514304, 5.582029, 2.060199, 0.642280, 00154 7.024616, 1.686615, -6.481756, 1.343084, -3.526451, 1.099073, 00155 -2.965764, -0.173723, -4.111484, 6.528384, -6.965658, 1.726291, 00156 1.535172, 11.023435, 2.338401, -4.690188, 1.298210, 3.943885, 00157 8.407885, 5.168365, 0.684131, 1.559181, 1.859998, 2.852417, 00158 8.574070, -6.369078, 6.023458, 11.837963, -6.027632, 4.469678, 00159 -6.799093, -2.674048, 6.250367, -6.809971, -3.459360, 9.112410, 00160 -2.711621, -1.336678, 1.564249, -1.564297, -1.296760, 8.904013, 00161 -3.230109, 6.878013, -7.819823, 3.369909, -1.657410, -2.007358, 00162 -4.112825, 1.370685, -3.420525, -6.276605, 3.244873, -3.352638, 00163 1.545372, 0.902211, 0.197489, -1.408732, 0.523390, 0.348440 00164 }; 00165 00166 00167 /* ---------------------------------------------------------------------- 00168 * Declare Global variables 00169 * ------------------------------------------------------------------- */ 00170 uint32_t srcALen = 64; /* Length of Input A */ 00171 uint32_t srcBLen = 64; /* Length of Input B */ 00172 uint32_t outLen; /* Length of convolution output */ 00173 float32_t snr; /* output SNR */ 00174 00175 int32_t main(void) 00176 { 00177 arm_status status; /* Status of the example */ 00178 arm_cfft_radix4_instance_f32 cfft_instance; /* CFFT Structure instance */ 00179 00180 /* CFFT Structure instance pointer */ 00181 arm_cfft_radix4_instance_f32 *cfft_instance_ptr = 00182 (arm_cfft_radix4_instance_f32*) &cfft_instance; 00183 00184 /* output length of convolution */ 00185 outLen = srcALen + srcBLen - 1; 00186 00187 /* Initialise the fft input buffers with all zeros */ 00188 arm_fill_f32(0.0, Ak, MAX_BLOCKSIZE); 00189 arm_fill_f32(0.0, Bk, MAX_BLOCKSIZE); 00190 00191 /* Copy the input values to the fft input buffers */ 00192 arm_copy_f32(testInputA_f32, Ak, MAX_BLOCKSIZE/2); 00193 arm_copy_f32(testInputB_f32, Bk, MAX_BLOCKSIZE/2); 00194 00195 /* Initialize the CFFT function to compute 64 point fft */ 00196 status = arm_cfft_radix4_init_f32(cfft_instance_ptr, 64, 0, 1); 00197 00198 /* Transform input a[n] from time domain to frequency domain A[k] */ 00199 arm_cfft_radix4_f32(cfft_instance_ptr, Ak); 00200 /* Transform input b[n] from time domain to frequency domain B[k] */ 00201 arm_cfft_radix4_f32(cfft_instance_ptr, Bk); 00202 00203 /* Complex Multiplication of the two input buffers in frequency domain */ 00204 arm_cmplx_mult_cmplx_f32(Ak, Bk, AxB, MAX_BLOCKSIZE/2); 00205 00206 /* Initialize the CIFFT function to compute 64 point ifft */ 00207 status = arm_cfft_radix4_init_f32(cfft_instance_ptr, 64, 1, 1); 00208 00209 /* Transform the multiplication output from frequency domain to time domain, 00210 that gives the convolved output */ 00211 arm_cfft_radix4_f32(cfft_instance_ptr, AxB); 00212 00213 /* SNR Calculation */ 00214 snr = arm_snr_f32((float32_t *)testRefOutput_f32, AxB, srcALen + srcBLen - 1); 00215 00216 /* Compare the SNR with threshold to test whether the 00217 computed output is matched with the reference output values. */ 00218 if( snr > SNR_THRESHOLD) 00219 { 00220 status = ARM_MATH_SUCCESS; 00221 } 00222 00223 if( status != ARM_MATH_SUCCESS) 00224 { 00225 while(1); 00226 } 00227 } 00228  All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines Generated on Mon Nov 29 2010 17:19:56 for CMSIS DSP Software Library by  1.7.2

Wyszukiwarka

Podobne podstrony:
arm dotproduct example ?2? source
arm fir example ?2? source
arm variance example ?2? source
arm matrix example ?2? source
arm convolution example ?2?
arm linear interp example ?2? source
arm signal converge example ?2? source
arm class marks example ?2? source
arm sin cos example ?2? source
arm sin cos example ?2? source
arm ?t bin example ?2? source
arm matrix example ?2?
arm cmplx mag ?2? source
arm fir interpolate ?2? source
arm mat trans ?2? source
arm variance example ?2?
arm fir lattice ?2? source
arm mat ?d ?2? source
arm mat sub ?2? source

więcej podobnych podstron