GNU Radio C++ API Reference
3.10.12.0
The Free & Open Software Radio Ecosystem
Loading...
Searching...
No Matches
rotator.h
Go to the documentation of this file.
1
/* -*- c++ -*- */
2
/*
3
* Copyright 2003,2008,2013 Free Software Foundation, Inc.
4
*
5
* This file is part of GNU Radio
6
*
7
* SPDX-License-Identifier: GPL-3.0-or-later
8
*
9
*/
10
11
#ifndef _GR_ROTATOR_H_
12
#define _GR_ROTATOR_H_
13
14
#include <
gnuradio/blocks/api.h
>
15
#include <
gnuradio/gr_complex.h
>
16
#include <volk/volk.h>
17
#include <cmath>
18
19
namespace
gr
{
20
namespace
blocks {
21
22
class
rotator
23
{
24
private
:
25
gr_complex
d_phase;
26
gr_complex
d_phase_incr;
27
unsigned
int
d_counter;
28
29
public
:
30
rotator
() : d_phase(1), d_phase_incr(1), d_counter(0) {}
31
32
gr_complex
phase
() {
return
d_phase; }
33
void
set_phase
(
gr_complex
phase
) { d_phase =
phase
/ std::abs(
phase
); }
34
void
set_phase_incr
(
gr_complex
incr) { d_phase_incr = incr / std::abs(incr); }
35
36
gr_complex
rotate
(
gr_complex
in)
37
{
38
d_counter++;
39
40
gr_complex
z = in * d_phase;
// rotate in by phase
41
d_phase *= d_phase_incr;
// incr our phase (complex mult == add phases)
42
43
if
((d_counter % 512) == 0)
44
d_phase /=
45
std::abs(d_phase);
// Normalize to ensure multiplication is rotation
46
47
return
z;
48
}
49
50
void
rotateN
(
gr_complex
* out,
const
gr_complex
* in,
int
n)
51
{
52
#if VOLK_VERSION >= 030100
53
volk_32fc_s32fc_x2_rotator2_32fc(out, in, &d_phase_incr, &d_phase, n);
54
#else
55
volk_32fc_s32fc_x2_rotator_32fc(out, in, d_phase_incr, &d_phase, n);
56
#endif
57
}
58
};
59
60
}
/* namespace blocks */
61
}
/* namespace gr */
62
63
#endif
/* _GR_ROTATOR_H_ */
gr::blocks::rotator
Definition
rotator.h:23
gr::blocks::rotator::set_phase
void set_phase(gr_complex phase)
Definition
rotator.h:33
gr::blocks::rotator::rotate
gr_complex rotate(gr_complex in)
Definition
rotator.h:36
gr::blocks::rotator::phase
gr_complex phase()
Definition
rotator.h:32
gr::blocks::rotator::rotator
rotator()
Definition
rotator.h:30
gr::blocks::rotator::set_phase_incr
void set_phase_incr(gr_complex incr)
Definition
rotator.h:34
gr::blocks::rotator::rotateN
void rotateN(gr_complex *out, const gr_complex *in, int n)
Definition
rotator.h:50
api.h
gr_complex.h
gr_complex
std::complex< float > gr_complex
Definition
gr_complex.h:15
gr
GNU Radio logging wrapper.
Definition
basic_block.h:29
gr-blocks
include
gnuradio
blocks
rotator.h
Generated by
1.9.8