Skip to content

Commit 6b8a440

Browse files
authored
Merge pull request miek#214 from catkira/add_ci32
add support for sigmf ci32 files
2 parents 679454b + c3b704b commit 6b8a440

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ inspectrum supports the following file types:
2525
* `*.sigmf-meta, *.sigmf-data` - SigMF recordings
2626
* `*.cf32`, `*.cfile` - Complex 32-bit floating point samples (GNU Radio, osmocom_fft)
2727
* `*.cf64` - Complex 64-bit floating point samples
28+
* `*.cs32` - Complex 16-bit signed integer samples (SDRAngel)
2829
* `*.cs16` - Complex 16-bit signed integer samples (BladeRF)
2930
* `*.cs8` - Complex 8-bit signed integer samples (HackRF)
3031
* `*.cu8` - Complex 8-bit unsigned integer samples (RTL-SDR)

src/inputsource.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,23 @@ class ComplexF64SampleAdapter : public SampleAdapter {
6868
}
6969
};
7070

71+
class ComplexS32SampleAdapter : public SampleAdapter {
72+
public:
73+
size_t sampleSize() override {
74+
return sizeof(std::complex<int32_t>);
75+
}
76+
77+
void copyRange(const void* const src, size_t start, size_t length, std::complex<float>* const dest) override {
78+
auto s = reinterpret_cast<const std::complex<int32_t>*>(src);
79+
std::transform(&s[start], &s[start + length], dest,
80+
[](const std::complex<int32_t>& v) -> std::complex<float> {
81+
const float k = 1.0f / 2147483648.0f;
82+
return { v.real() * k, v.imag() * k };
83+
}
84+
);
85+
}
86+
};
87+
7188
class ComplexS16SampleAdapter : public SampleAdapter {
7289
public:
7390
size_t sampleSize() override {
@@ -249,6 +266,8 @@ void InputSource::readMetaData(const QString &filename)
249266
auto datatype = global["core:datatype"].toString();
250267
if (datatype.compare("cf32_le") == 0) {
251268
sampleAdapter = std::make_unique<ComplexF32SampleAdapter>();
269+
} else if (datatype.compare("ci32_le") == 0) {
270+
sampleAdapter = std::make_unique<ComplexS32SampleAdapter>();
252271
} else if (datatype.compare("ci16_le") == 0) {
253272
sampleAdapter = std::make_unique<ComplexS16SampleAdapter>();
254273
} else if (datatype.compare("ci8") == 0) {

0 commit comments

Comments
 (0)