linux/include/linux/cordic.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2011 Broadcom Corporation
   3 *
   4 * Permission to use, copy, modify, and/or distribute this software for any
   5 * purpose with or without fee is hereby granted, provided that the above
   6 * copyright notice and this permission notice appear in all copies.
   7 *
   8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
  11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15 */
  16#ifndef __CORDIC_H_
  17#define __CORDIC_H_
  18
  19#include <linux/types.h>
  20
  21/**
  22 * struct cordic_iq - i/q coordinate.
  23 *
  24 * @i: real part of coordinate (in phase).
  25 * @q: imaginary part of coordinate (quadrature).
  26 */
  27struct cordic_iq {
  28        s32 i;
  29        s32 q;
  30};
  31
  32/**
  33 * cordic_calc_iq() - calculates the i/q coordinate for given angle.
  34 *
  35 * @theta: angle in degrees for which i/q coordinate is to be calculated.
  36 * @coord: function output parameter holding the i/q coordinate.
  37 *
  38 * The function calculates the i/q coordinate for a given angle using the
  39 * CORDIC algorithm. The coordinate consists of a real (i) and an
  40 * imaginary (q) part. The real part is essentially the cosine of the
  41 * angle and the imaginary part is the sine of the angle. The returned
  42 * values are scaled by 2^16 for precision. The range for theta is
  43 * for -180 degrees to +180 degrees. Passed values outside this range are
  44 * converted before doing the actual calculation.
  45 */
  46struct cordic_iq cordic_calc_iq(s32 theta);
  47
  48#endif /* __CORDIC_H_ */
  49