Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of dsp by
arm_cmplx_mag_f32.c
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_cmplx_mag_f32.c 00009 * 00010 * Description: Floating-point complex magnitude. 00011 * 00012 * Target Processor: Cortex-M4/Cortex-M3 00013 * 00014 * Version 1.0.3 2010/11/29 00015 * Re-organized the CMSIS folders and updated documentation. 00016 * 00017 * Version 1.0.2 2010/11/11 00018 * Documentation updated. 00019 * 00020 * Version 1.0.1 2010/10/05 00021 * Production release and review comments incorporated. 00022 * 00023 * Version 1.0.0 2010/09/20 00024 * Production release and review comments incorporated. 00025 * ---------------------------------------------------------------------------- */ 00026 00027 #include "arm_math.h" 00028 00029 /** 00030 * @ingroup groupCmplxMath 00031 */ 00032 00033 /** 00034 * @defgroup cmplx_mag Complex Magnitude 00035 * 00036 * Computes the magnitude of the elements of a complex data vector. 00037 * 00038 * The <code>pSrc</code> points to the source data and 00039 * <code>pDst</code> points to the where the result should be written. 00040 * <code>numSamples</code> specifies the number of complex samples 00041 * in the input array and the data is stored in an interleaved fashion 00042 * (real, imag, real, imag, ...). 00043 * The input array has a total of <code>2*numSamples</code> values; 00044 * the output array has a total of <code>numSamples</code> values. 00045 * The underlying algorithm is used: 00046 * 00047 * <pre> 00048 * for(n=0; n<numSamples; n++) { 00049 * pDst[n] = sqrt(pSrc[(2*n)+0]^2 + pSrc[(2*n)+1]^2); 00050 * } 00051 * </pre> 00052 * 00053 * There are separate functions for floating-point, Q15, and Q31 data types. 00054 */ 00055 00056 /** 00057 * @addtogroup cmplx_mag 00058 * @{ 00059 */ 00060 /** 00061 * @brief Floating-point complex magnitude. 00062 * @param[in] *pSrc points to complex input buffer 00063 * @param[out] *pDst points to real output buffer 00064 * @param[in] numSamples number of complex samples in the input vector 00065 * @return none. 00066 * 00067 */ 00068 00069 00070 void arm_cmplx_mag_f32( 00071 float32_t * pSrc, 00072 float32_t * pDst, 00073 uint32_t numSamples) 00074 { 00075 uint32_t blkCnt; /* loop counter */ 00076 float32_t realIn, imagIn; /* Temporary variables to hold input values */ 00077 00078 00079 /*loop Unrolling */ 00080 blkCnt = numSamples >> 2u; 00081 00082 /* First part of the processing with loop unrolling. Compute 4 outputs at a time. 00083 ** a second loop below computes the remaining 1 to 3 samples. */ 00084 while(blkCnt > 0u) 00085 { 00086 00087 /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ 00088 realIn = *pSrc++; 00089 imagIn = *pSrc++; 00090 /* store the result in the destination buffer. */ 00091 arm_sqrt_f32((realIn * realIn) + (imagIn * imagIn), pDst++); 00092 00093 realIn = *pSrc++; 00094 imagIn = *pSrc++; 00095 arm_sqrt_f32((realIn * realIn) + (imagIn * imagIn), pDst++); 00096 00097 realIn = *pSrc++; 00098 imagIn = *pSrc++; 00099 arm_sqrt_f32((realIn * realIn) + (imagIn * imagIn), pDst++); 00100 00101 realIn = *pSrc++; 00102 imagIn = *pSrc++; 00103 arm_sqrt_f32((realIn * realIn) + (imagIn * imagIn), pDst++); 00104 00105 00106 /* Decrement the loop counter */ 00107 blkCnt--; 00108 } 00109 00110 /* If the numSamples is not a multiple of 4, compute any remaining output samples here. 00111 ** No loop unrolling is used. */ 00112 blkCnt = numSamples % 0x4u; 00113 00114 while(blkCnt > 0u) 00115 { 00116 /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ 00117 realIn = *pSrc++; 00118 imagIn = *pSrc++; 00119 /* store the result in the destination buffer. */ 00120 arm_sqrt_f32((realIn * realIn) + (imagIn * imagIn), pDst++); 00121 00122 /* Decrement the loop counter */ 00123 blkCnt--; 00124 } 00125 } 00126 00127 /** 00128 * @} end of cmplx_mag group 00129 */
Generated on Tue Jul 12 2022 19:55:42 by
 1.7.2
 1.7.2 
    