In python I load a file of data from a SDR (Software Defined Radio) using rtl_sdr which is stored as uint8.
I have two code blocks that have been provided that convert the array of numbers to complex, but the results are different. Pseudo array in sample code below.
METHOD 1
<code>x = np.array([124, 127, 132, 125, 127, 127, 126, 125, 129, 128])
x = x.astype(np.float32)
x = (x - 127) / 128
x = x.astype(complex)
</code>
<code>x = np.array([124, 127, 132, 125, 127, 127, 126, 125, 129, 128])
x = x.astype(np.float32)
x = (x - 127) / 128
x = x.astype(complex)
</code>
x = np.array([124, 127, 132, 125, 127, 127, 126, 125, 129, 128])
x = x.astype(np.float32)
x = (x - 127) / 128
x = x.astype(complex)
Outputs:
<code>array([-0.0234375+0.j, 0. +0.j, 0.0390625+0.j, -0.015625 +0.j,
0. +0.j, 0. +0.j, -0.0078125+0.j, -0.015625 +0.j,
0.015625 +0.j, 0.0078125+0.j])
</code>
<code>array([-0.0234375+0.j, 0. +0.j, 0.0390625+0.j, -0.015625 +0.j,
0. +0.j, 0. +0.j, -0.0078125+0.j, -0.015625 +0.j,
0.015625 +0.j, 0.0078125+0.j])
</code>
array([-0.0234375+0.j, 0. +0.j, 0.0390625+0.j, -0.015625 +0.j,
0. +0.j, 0. +0.j, -0.0078125+0.j, -0.015625 +0.j,
0.015625 +0.j, 0.0078125+0.j])
METHOD 2
<code>y = np.array([124, 127, 132, 125, 127, 127, 126, 125, 129, 128])
y = y.astype(np.float32).view(np.complex64)
y /= 127.5
y -= 1 + 1j
</code>
<code>y = np.array([124, 127, 132, 125, 127, 127, 126, 125, 129, 128])
y = y.astype(np.float32).view(np.complex64)
y /= 127.5
y -= 1 + 1j
</code>
y = np.array([124, 127, 132, 125, 127, 127, 126, 125, 129, 128])
y = y.astype(np.float32).view(np.complex64)
y /= 127.5
y -= 1 + 1j
Outputs:
<code>array([-0.02745092-0.00392151j, 0.03529418-0.01960778j,
-0.00392151-0.00392151j, ..., -0.02745092-0.05098033j,
0.01176476-0.00392151j, 0.05098045-0.01960778j], dtype=complex64)
</code>
<code>array([-0.02745092-0.00392151j, 0.03529418-0.01960778j,
-0.00392151-0.00392151j, ..., -0.02745092-0.05098033j,
0.01176476-0.00392151j, 0.05098045-0.01960778j], dtype=complex64)
</code>
array([-0.02745092-0.00392151j, 0.03529418-0.01960778j,
-0.00392151-0.00392151j, ..., -0.02745092-0.05098033j,
0.01176476-0.00392151j, 0.05098045-0.01960778j], dtype=complex64)
Since the output is different one method is correct – but which?
1