| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
Similar to b431866a5, this reduces logging in static initializer blocks.
Those are prone to hang during DLL initialization.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The existence of SSSE3 intrinsic headers is not a sufficient
condition that SSSE3 support is available, which may lead to
'illegal instruction' runtime failuire on some platforms. Major
OS distributions (Ubuntu, Fedora, etc.) include x86_64
intrinsic headers, though the underlying architecture may or
may not support the instruction set.
Assuming SSE2 availability is safe as instructions are present on
all x86_64 architectures for which instrinsic headers would be
present. The same cannot be said for SSSE3.
Issue: #1761
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Implementation uses SSSE3 intructions to perform 12-bit
sample pack/unpack operations to/from standard 16 and 32
bit host values. Input/output shuffle orderings for a
single 128-bit SSE register with 16-bit integers shown
below.
16-bit interleaved I/Q
---------------------------------------
| Q3 | I3 | Q2 | I2 | Q1 | I1 | Q0 | I0 | Input
---------------------------------------
| 127 0 |
12-bit packed I/Q byteswapped
-----------------------
| I0 | Q0 | I1 | 0
|-----------------------|
| I1 | Q1 | I2 | Q2 | Output
|-----------------------|
| Q2 | I3 | Q3 |
|-----------------------|
| Unused | 3
-----------------------
31 0
Fixes: #1740, #966
Related: #1739
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Create missing sc12-sc16 and sc16-sc12 type converters. To avoid
replicating the full sc12 converter class object, overload the
converter calls with C++11 std::enable_if metafunctions. When
used with std::is_floating and std::is_integral templates, this
allow a single template interface with compile time function
selection and static type checking.
Note the below std::enable_if interface is confusing, but quite
effective in this case.
typename enable_if<is_floating_point<type>::value>::type* = NULL
Fixes: #966
Related: #967, #1721
|
| |
|
|
|
|
|
| |
Note: This is the first commit that uses for-range, and range-based
for-loops are now usable for UHD development.
|
|
|
|
|
|
|
|
| |
types)
- Also removes all references to boost/cstdint.hpp and replaces it with
stdint.h (The 'correct' replacement would be <cstdint>, but not all of our
compilers support that).
|
|\
| |
| |
| |
| | |
Conflicts:
host/lib/usrp/b200/b200_impl.cpp
|
| | |
|
|\| |
|
| | |
|
|\| |
|
| |
| |
| |
| |
| |
| |
| |
| | |
Unrolling the RX loop showed marked improvement with perf. The TX path
was only slightly better. Checked signal correctness with shinysdr to verify
received signal and tx_waveforms into a spectrum analyzer for TX.
Signed-off-by: Philip Balister <philip@opensdr.com>
|
| | |
|
|\| |
|
| | |
|
|/ |
|
|
|
|
|
| |
- u8: Converts arbitrary-length strings from and to item32
- item32->item32 memcpy non-conversion
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The sc16-sc16 wire to host type converter is effectively an I/Q swap
or 16-bit byteswap for little and big endian cases respectively. This
implmentation is a subset of fc32 and fc64 converters without the
floating point portion and scaling.
The resulting byte ordering is as follows:
-----------------
| A | B | C | D | Wire
-----------------
0 1 2 3
-----------------
| C | D | A | B | Litte-endian
-----------------
0 1 2 3
-----------------
| B | A | D | C | Big-endian
-----------------
0 1 2 3
Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
|
| |
|
|
|
|
|
| |
- Converter ID symbols are exported
- to_string() function for lighter feedback
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch addresses issue #648 "B200: TX with SC12 format and MIMO".
The observed MIMO header corruption was caused by overwriting the
end of the packed 12-bit sample output buffer. The overwrite was due to
the converter call always writing out 4 complex samples even if less
than 4 samples were available. The extra samples would corrupt data with
zero padding.
Avoid the overwrite condition by only writing the minimum number of
32-bit lines necessary rather than the entire 12 byte struct.
Samples 32-bit lines
1 1
2 2
3 3
4 3
Signed-off-by: Tom Tsou <tom@tsou.cc>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Resolve issue #666 "B200: Rx signal distortion when using SC12".
During 12-bit unpacking, OTW samples are shifted into the high order
bits of the 16-bit intermediate values. The remaining 4-bits are not
zeroed and contain bits from adjacent samples. Consequently, signal
distortion becomes noticable with spurs and other random signal
garbage when operating at low signal levels.
Signed-off-by: Tom Tsou <tom@tsou.cc>
|
| |
|
| |
|
|
|
|
|
| |
* The UNSET command didn't exist back then, but using SET with no value does the same thing
* CMake 2.6 doesn't like nested parantheses in IF statements, so tweak IF/ELSE statements
|
|\ |
|
| | |
|
|/
|
|
|
|
|
| |
Use the flags passed in from the toolchain. If this test runs on a hard-float
system, bad things happen.
Signed-off-by: Philip Balister <philip@opensdr.com>
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
neon: missing header
windows: shuffle needs to be deemed "constant expression",
fixed with a template parameter.
|
| |
|
|\ |
|
| |
| |
| |
| |
| |
| |
| | |
Its important to use a signed cast when converting float to int.
Then assign that signed int to an unsigned type of the same width.
Its undefined behaviour when converting a negative float to an unsigned int.
|
|/
|
|
| |
We can now test generic conversion implementations against SIMD (for example)
|
|
|
|
|
|
|
|
| |
given performance benchmarks involving the converter,
when the driver is also doing other things
sc8 conversions will still involve tables since
no SIMD implementations exist yet
|