Stream1090

I am getting errors when compiling stream1090.

I have the right version of cmake. I am using g++ 15.2.1. I started the build by making a subdirectory and running cmake ../ in it then I typed make.

I can’t easily figure this out.

1 Like

Thank you very much. I messed up in the case that no airspy and no rtlsdr support is there. It is fixed now.

Thank you. It now compiles and I get an executable.

1 Like

Let me know what you want to pipe in there. IQ Format and speed.

I wanted to pipe in 2e6 sampling rate and 16-bit signed integers for the IQ values.

I had to up sample 2e6 to 2.4e6 and cast down to 8-bit integers for the IQ values.

It’s just for a quick test to compare what stream1090 gets in number of messages from a single antenna versus four antennas and different beamformers.

are these signed integers using the full 16 bits?

Yes, signed integers but not using the full 16 bits. It’s 11-bits and twos complement for the negative numbers.

In my code, I divide by 2049 but I think the correct number is 2048 to get full scale 0.0 to 1.0 floats.

Well can you feed floats between -1.0 and 1.0 into stream1090?

Yeah, I can feed it floats. I can feed it 32-bit or 64-bit floats.

we do float32. Give me a bit of time for custom input 1 IQ pair = 2 floats between -1.0 and 1.0

Pull a new version

cmake ../ --fresh -DENABLE_CUSTOM_INPUT=ON && make

with ./stream1090 -h you shoud see something like this:

Stream1090 build 260219_2
(custom input mode)
....
Supported sample rate combinations:
  2  →  2 (float32 IQ)
  4  →  4 (float32 IQ)

I pulled the newest version, ran cmake, and then make. But the final binary does not show support for the float type. It also gives the following warning message about -DENABLE_CUSTOM_INPUT=ON.

Sorry, its late i forgot to push the CMakeLists

Yep, that fixed it. I might test it in the next 15 minutes or a few hours from now. I can’t tell but I will let you know if it doesn’t work or something looks wrong.

You’re C++ is very good. I like how you set it up.

Thx, the current code was a bit of work, but it is flexible while at the same time remains fast. I needed that float32 input mode anyways. I haven’t tested it yet, i will do it tomorrow.

One thing you should know:

This will put stream1090 into passthrough (and stupid) mode. For 2 → 2 it will create two bit streams. It will compare x[i] > x[i+1] for i even (first stream) or i odd (second stream). Or in other words:

Stream 1: x[i] > x[i+1]
Stream 2: x[i+1] > x[i+2]

For 4->4 it will create 4 bit streams

Stream 1: x[i] > x[i+2]
Stream 2: x[i+1] > x[i+3]
Stream 3: x[i+2] > x[i+4]
Stream 4: x[i+3] > x[i+5]

IF (<- really IF) your IQ pair streams are captured at the same time. You can interleave two IQ pair streams @2Msps and feed them with a sampling speed of 4 instead. Even then complete duplicate removal is not guaranteed yet.

Edit: If it works and you need more. Well, the beauty of the current solution is that you have:

#if defined(STREAM1090_CUSTOM_INPUT) && STREAM1090_CUSTOM_INPUT
constexpr auto presets = std::make_tuple(
    // Custom Input
    Preset<IQ_FLOAT32, Rate_2_0_Mhz, Rate_2_0_Mhz, IQPipelineOptions::NONE>{},
    Preset<IQ_FLOAT32, Rate_4_0_Mhz, Rate_4_0_Mhz, IQPipelineOptions::NONE>{}
);
#else

and there is

enum SampleRate {
    Rate_1_0_Mhz  =  1000000,
    Rate_2_0_Mhz  =  2000000,
    Rate_2_4_Mhz  =  2400000,
    Rate_2_56_Mhz =  2560000,
    Rate_3_0_Mhz  =  3000000,
    Rate_3_2_Mhz  =  3200000,
    Rate_4_0_Mhz  =  4000000,
    Rate_6_0_Mhz  =  6000000,
    Rate_8_0_Mhz  =  8000000,
    Rate_10_0_Mhz = 10000000,
    Rate_12_0_Mhz = 12000000,
    Rate_16_0_Mhz = 16000000,
    Rate_20_0_Mhz = 20000000,
    Rate_24_0_Mhz = 24000000,
    Rate_40_0_Mhz = 40000000,
    Rate_48_0_Mhz = 48000000
};

For passthrough mode, the compiler will put together what you want without any more changes except in the preset table.

Conversation moved to the beamforming thread. Here things will focus a bit more on the filter and rtlsdr business. Currently i have a lack of proper 2.56 Msps data. If someone has the patience to capture some for me, that would be really nice.

I have a 2.56 Msps file. 2.9 GB, How do I get it to you?

1 Like

Can you try: https://www.swisstransfer.com/ and send me a link? It is free and does not need an account.
Edit: Or use some other free site of your choice like https://www.file.io/

Link to file samples.raw is: SwissTransfer - Send large files securely and free of charge

Edit: I thought that would just be sent via e-mail and not shown here. Is there a way to do that?

On the other hand, if someone wants to download that large file (2.9 GB), I guess they’re welcome to it. Transfer rates are kinda slow though.

1 Like