Statistics
| Branch: | Tag: | Revision:

root / gnuradio-core / src / lib / general / gr_complex_to_xxx.cc @ 4a63bc91

History | View | Annotate | Download (6.2 kB)

1 5d69a524 jcorgan
/* -*- c++ -*- */
2 5d69a524 jcorgan
/*
3 0a9b999b Eric Blossom
 * Copyright 2004,2008,2010 Free Software Foundation, Inc.
4 5d69a524 jcorgan
 * 
5 5d69a524 jcorgan
 * This file is part of GNU Radio
6 5d69a524 jcorgan
 * 
7 5d69a524 jcorgan
 * GNU Radio is free software; you can redistribute it and/or modify
8 5d69a524 jcorgan
 * it under the terms of the GNU General Public License as published by
9 937b719d eb
 * the Free Software Foundation; either version 3, or (at your option)
10 5d69a524 jcorgan
 * any later version.
11 5d69a524 jcorgan
 * 
12 5d69a524 jcorgan
 * GNU Radio is distributed in the hope that it will be useful,
13 5d69a524 jcorgan
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 5d69a524 jcorgan
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 5d69a524 jcorgan
 * GNU General Public License for more details.
16 5d69a524 jcorgan
 * 
17 5d69a524 jcorgan
 * You should have received a copy of the GNU General Public License
18 5d69a524 jcorgan
 * along with GNU Radio; see the file COPYING.  If not, write to
19 86f5c924 eb
 * the Free Software Foundation, Inc., 51 Franklin Street,
20 86f5c924 eb
 * Boston, MA 02110-1301, USA.
21 5d69a524 jcorgan
 */
22 5d69a524 jcorgan
23 5d69a524 jcorgan
#ifdef HAVE_CONFIG_H
24 5d69a524 jcorgan
#include "config.h"
25 5d69a524 jcorgan
#endif
26 5d69a524 jcorgan
27 5d69a524 jcorgan
#include <gr_complex_to_xxx.h>
28 5d69a524 jcorgan
#include <gr_io_signature.h>
29 45221bd3 trondeau
#include <gr_math.h>
30 5d69a524 jcorgan
31 5d69a524 jcorgan
// ----------------------------------------------------------------
32 5d69a524 jcorgan
33 5d69a524 jcorgan
gr_complex_to_float_sptr
34 5d69a524 jcorgan
gr_make_complex_to_float (unsigned int vlen)
35 5d69a524 jcorgan
{
36 0a9b999b Eric Blossom
  return gnuradio::get_initial_sptr(new gr_complex_to_float (vlen));
37 5d69a524 jcorgan
}
38 5d69a524 jcorgan
39 5d69a524 jcorgan
gr_complex_to_float::gr_complex_to_float (unsigned int vlen)
40 5d69a524 jcorgan
  : gr_sync_block ("complex_to_float",
41 5d69a524 jcorgan
                   gr_make_io_signature (1, 1, sizeof (gr_complex) * vlen),
42 5d69a524 jcorgan
                   gr_make_io_signature (1, 2, sizeof (float) * vlen)),
43 5d69a524 jcorgan
    d_vlen(vlen)
44 5d69a524 jcorgan
{
45 5d69a524 jcorgan
}
46 5d69a524 jcorgan
47 5d69a524 jcorgan
int
48 5d69a524 jcorgan
gr_complex_to_float::work (int noutput_items,
49 5d69a524 jcorgan
                           gr_vector_const_void_star &input_items,
50 5d69a524 jcorgan
                           gr_vector_void_star &output_items)
51 5d69a524 jcorgan
{
52 5d69a524 jcorgan
  const gr_complex *in = (const gr_complex *) input_items[0];
53 5d69a524 jcorgan
  float *out0 = (float *) output_items[0];
54 dda0c8ce eb
  float* out1;
55 5d69a524 jcorgan
  int noi = noutput_items * d_vlen;
56 5d69a524 jcorgan
57 5d69a524 jcorgan
  switch (output_items.size ()){
58 5d69a524 jcorgan
  case 1:
59 5d69a524 jcorgan
    for (int i = 0; i < noi; i++){
60 5d69a524 jcorgan
      out0[i] = in[i].real ();
61 5d69a524 jcorgan
    }
62 5d69a524 jcorgan
    break;
63 5d69a524 jcorgan
64 5d69a524 jcorgan
  case 2:
65 dda0c8ce eb
    out1 = (float *) output_items[1];
66 5d69a524 jcorgan
    for (int i = 0; i < noi; i++){
67 5d69a524 jcorgan
      out0[i] = in[i].real ();
68 5d69a524 jcorgan
      out1[i] = in[i].imag ();
69 5d69a524 jcorgan
    }
70 5d69a524 jcorgan
    break;
71 5d69a524 jcorgan
72 5d69a524 jcorgan
  default:
73 5d69a524 jcorgan
    abort ();
74 5d69a524 jcorgan
  }
75 5d69a524 jcorgan
76 5d69a524 jcorgan
  return noutput_items;
77 5d69a524 jcorgan
}
78 5d69a524 jcorgan
79 5d69a524 jcorgan
// ----------------------------------------------------------------
80 5d69a524 jcorgan
81 5d69a524 jcorgan
gr_complex_to_real_sptr
82 5d69a524 jcorgan
gr_make_complex_to_real (unsigned int vlen)
83 5d69a524 jcorgan
{
84 0a9b999b Eric Blossom
  return gnuradio::get_initial_sptr(new gr_complex_to_real (vlen));
85 5d69a524 jcorgan
}
86 5d69a524 jcorgan
87 5d69a524 jcorgan
gr_complex_to_real::gr_complex_to_real (unsigned int vlen)
88 5d69a524 jcorgan
  : gr_sync_block ("complex_to_real",
89 5d69a524 jcorgan
                   gr_make_io_signature (1, 1, sizeof (gr_complex) * vlen),
90 5d69a524 jcorgan
                   gr_make_io_signature (1, 1, sizeof (float) * vlen)),
91 5d69a524 jcorgan
    d_vlen(vlen)
92 5d69a524 jcorgan
{
93 5d69a524 jcorgan
}
94 5d69a524 jcorgan
95 5d69a524 jcorgan
int
96 5d69a524 jcorgan
gr_complex_to_real::work (int noutput_items,
97 5d69a524 jcorgan
                          gr_vector_const_void_star &input_items,
98 5d69a524 jcorgan
                          gr_vector_void_star &output_items)
99 5d69a524 jcorgan
{
100 5d69a524 jcorgan
  const gr_complex *in = (const gr_complex *) input_items[0];
101 5d69a524 jcorgan
  float *out = (float *) output_items[0];
102 5d69a524 jcorgan
  int noi = noutput_items * d_vlen;
103 5d69a524 jcorgan
104 5d69a524 jcorgan
  for (int i = 0; i < noi; i++){
105 5d69a524 jcorgan
    out[i] = in[i].real ();
106 5d69a524 jcorgan
  }
107 5d69a524 jcorgan
  return noutput_items;
108 5d69a524 jcorgan
}
109 5d69a524 jcorgan
110 5d69a524 jcorgan
// ----------------------------------------------------------------
111 5d69a524 jcorgan
112 5d69a524 jcorgan
gr_complex_to_imag_sptr
113 5d69a524 jcorgan
gr_make_complex_to_imag (unsigned int vlen)
114 5d69a524 jcorgan
{
115 0a9b999b Eric Blossom
  return gnuradio::get_initial_sptr(new gr_complex_to_imag (vlen));
116 5d69a524 jcorgan
}
117 5d69a524 jcorgan
118 5d69a524 jcorgan
gr_complex_to_imag::gr_complex_to_imag (unsigned int vlen)
119 5d69a524 jcorgan
  : gr_sync_block ("complex_to_imag",
120 5d69a524 jcorgan
                   gr_make_io_signature (1, 1, sizeof (gr_complex) * vlen),
121 5d69a524 jcorgan
                   gr_make_io_signature (1, 1, sizeof (float) * vlen)),
122 5d69a524 jcorgan
    d_vlen(vlen)
123 5d69a524 jcorgan
{
124 5d69a524 jcorgan
}
125 5d69a524 jcorgan
126 5d69a524 jcorgan
int
127 5d69a524 jcorgan
gr_complex_to_imag::work (int noutput_items,
128 5d69a524 jcorgan
                          gr_vector_const_void_star &input_items,
129 5d69a524 jcorgan
                          gr_vector_void_star &output_items)
130 5d69a524 jcorgan
{
131 5d69a524 jcorgan
  const gr_complex *in = (const gr_complex *) input_items[0];
132 5d69a524 jcorgan
  float *out = (float *) output_items[0];
133 5d69a524 jcorgan
  int noi = noutput_items * d_vlen;
134 5d69a524 jcorgan
135 5d69a524 jcorgan
  for (int i = 0; i < noi; i++){
136 5d69a524 jcorgan
    out[i] = in[i].imag ();
137 5d69a524 jcorgan
  }
138 5d69a524 jcorgan
  return noutput_items;
139 5d69a524 jcorgan
}
140 5d69a524 jcorgan
141 5d69a524 jcorgan
// ----------------------------------------------------------------
142 5d69a524 jcorgan
143 5d69a524 jcorgan
gr_complex_to_mag_sptr
144 5d69a524 jcorgan
gr_make_complex_to_mag (unsigned int vlen)
145 5d69a524 jcorgan
{
146 0a9b999b Eric Blossom
  return gnuradio::get_initial_sptr(new gr_complex_to_mag (vlen));
147 5d69a524 jcorgan
}
148 5d69a524 jcorgan
149 5d69a524 jcorgan
gr_complex_to_mag::gr_complex_to_mag (unsigned int vlen)
150 5d69a524 jcorgan
  : gr_sync_block ("complex_to_mag",
151 5d69a524 jcorgan
                   gr_make_io_signature (1, 1, sizeof (gr_complex) * vlen),
152 5d69a524 jcorgan
                   gr_make_io_signature (1, 1, sizeof (float) * vlen)),
153 5d69a524 jcorgan
    d_vlen(vlen)
154 5d69a524 jcorgan
{
155 5d69a524 jcorgan
}
156 5d69a524 jcorgan
157 5d69a524 jcorgan
int
158 5d69a524 jcorgan
gr_complex_to_mag::work (int noutput_items,
159 5d69a524 jcorgan
                          gr_vector_const_void_star &input_items,
160 5d69a524 jcorgan
                          gr_vector_void_star &output_items)
161 5d69a524 jcorgan
{
162 5d69a524 jcorgan
  const gr_complex *in = (const gr_complex *) input_items[0];
163 5d69a524 jcorgan
  float *out = (float *) output_items[0];
164 5d69a524 jcorgan
  int noi = noutput_items * d_vlen;
165 5d69a524 jcorgan
166 5d69a524 jcorgan
  for (int i = 0; i < noi; i++){
167 5d69a524 jcorgan
    out[i] = std::abs (in[i]);
168 5d69a524 jcorgan
  }
169 5d69a524 jcorgan
  return noutput_items;
170 5d69a524 jcorgan
}
171 5d69a524 jcorgan
172 5d69a524 jcorgan
// ----------------------------------------------------------------
173 5d69a524 jcorgan
174 b15586bb eb
gr_complex_to_mag_squared_sptr
175 b15586bb eb
gr_make_complex_to_mag_squared (unsigned int vlen)
176 b15586bb eb
{
177 0a9b999b Eric Blossom
  return gnuradio::get_initial_sptr(new gr_complex_to_mag_squared (vlen));
178 b15586bb eb
}
179 b15586bb eb
180 b15586bb eb
gr_complex_to_mag_squared::gr_complex_to_mag_squared (unsigned int vlen)
181 b15586bb eb
  : gr_sync_block ("complex_to_mag_squared",
182 b15586bb eb
                   gr_make_io_signature (1, 1, sizeof (gr_complex) * vlen),
183 b15586bb eb
                   gr_make_io_signature (1, 1, sizeof (float) * vlen)),
184 b15586bb eb
    d_vlen(vlen)
185 b15586bb eb
{
186 b15586bb eb
}
187 b15586bb eb
188 b15586bb eb
int
189 b15586bb eb
gr_complex_to_mag_squared::work (int noutput_items,
190 b15586bb eb
                                 gr_vector_const_void_star &input_items,
191 b15586bb eb
                                 gr_vector_void_star &output_items)
192 b15586bb eb
{
193 b15586bb eb
  const gr_complex *in = (const gr_complex *) input_items[0];
194 b15586bb eb
  float *out = (float *) output_items[0];
195 b15586bb eb
  int noi = noutput_items * d_vlen;
196 b15586bb eb
197 b15586bb eb
  for (int i = 0; i < noi; i++){
198 b15586bb eb
    const float __x = in[i].real();
199 b15586bb eb
    const float __y = in[i].imag();
200 b15586bb eb
    out[i] = __x * __x + __y * __y;
201 b15586bb eb
  }
202 b15586bb eb
  return noutput_items;
203 b15586bb eb
}
204 b15586bb eb
205 b15586bb eb
// ----------------------------------------------------------------
206 b15586bb eb
207 5d69a524 jcorgan
gr_complex_to_arg_sptr
208 5d69a524 jcorgan
gr_make_complex_to_arg (unsigned int vlen)
209 5d69a524 jcorgan
{
210 0a9b999b Eric Blossom
  return gnuradio::get_initial_sptr(new gr_complex_to_arg (vlen));
211 5d69a524 jcorgan
}
212 5d69a524 jcorgan
213 5d69a524 jcorgan
gr_complex_to_arg::gr_complex_to_arg (unsigned int vlen)
214 5d69a524 jcorgan
  : gr_sync_block ("complex_to_arg",
215 5d69a524 jcorgan
                   gr_make_io_signature (1, 1, sizeof (gr_complex) * vlen),
216 5d69a524 jcorgan
                   gr_make_io_signature (1, 1, sizeof (float) * vlen)),
217 5d69a524 jcorgan
    d_vlen(vlen)
218 5d69a524 jcorgan
{
219 5d69a524 jcorgan
}
220 5d69a524 jcorgan
221 5d69a524 jcorgan
int
222 5d69a524 jcorgan
gr_complex_to_arg::work (int noutput_items,
223 5d69a524 jcorgan
                          gr_vector_const_void_star &input_items,
224 5d69a524 jcorgan
                          gr_vector_void_star &output_items)
225 5d69a524 jcorgan
{
226 5d69a524 jcorgan
  const gr_complex *in = (const gr_complex *) input_items[0];
227 5d69a524 jcorgan
  float *out = (float *) output_items[0];
228 5d69a524 jcorgan
  int noi = noutput_items * d_vlen;
229 5d69a524 jcorgan
230 5d69a524 jcorgan
  for (int i = 0; i < noi; i++){
231 45221bd3 trondeau
    //    out[i] = std::arg (in[i]);
232 45221bd3 trondeau
    out[i] = gr_fast_atan2f(in[i]);
233 5d69a524 jcorgan
  }
234 5d69a524 jcorgan
  return noutput_items;
235 5d69a524 jcorgan
}