diff --git a/src/blah2.cpp b/src/blah2.cpp index 75cd7e5..24fb81f 100644 --- a/src/blah2.cpp +++ b/src/blah2.cpp @@ -201,7 +201,7 @@ int main(int argc, char **argv) std::string savePath, saveMapPath; if (saveIq || saveMap) { - char startTimeStr[15]; + char startTimeStr[16]; struct timeval currentTime = {0, 0}; gettimeofday(¤tTime, NULL); strftime(startTimeStr, 16, "%Y%m%d-%H%M%S", localtime(¤tTime.tv_sec)); @@ -234,7 +234,7 @@ int main(int argc, char **argv) // extract data from buffer buffer1->lock(); buffer2->lock(); - for (int i = 0; i < nSamples; i++) + for (uint32_t i = 0; i < nSamples; i++) { x->push_back(buffer1->pop_front()); y->push_back(buffer2->pop_front()); diff --git a/src/capture/hackrf/HackRf.cpp b/src/capture/hackrf/HackRf.cpp index b328a1f..e1c4ae0 100644 --- a/src/capture/hackrf/HackRf.cpp +++ b/src/capture/hackrf/HackRf.cpp @@ -120,7 +120,7 @@ int HackRf::rx_callback(hackrf_transfer* transfer) buffer_blah2->lock(); - for (size_t i = 0; i < transfer->buffer_length; i=i+2) + for (int i = 0; i < transfer->buffer_length; i=i+2) { double iqi = static_cast(buffer_hackrf[i]); double iqq = static_cast(buffer_hackrf[i+1]); diff --git a/src/capture/kraken/Kraken.cpp b/src/capture/kraken/Kraken.cpp index 06c9def..ab8a494 100644 --- a/src/capture/kraken/Kraken.cpp +++ b/src/capture/kraken/Kraken.cpp @@ -11,7 +11,7 @@ Kraken::Kraken(std::string _type, uint32_t _fc, uint32_t _fs, : Source(_type, _fc, _fs, _path, _saveIq) { // convert gain to tenths of dB - for (int i = 0; i < _gain.size(); i++) + for (size_t i = 0; i < _gain.size(); i++) { gain.push_back(static_cast(_gain[i]*10)); channelIndex.push_back(i); @@ -33,7 +33,7 @@ Kraken::Kraken(std::string _type, uint32_t _fc, uint32_t _fs, check_status(status, "Failed to close device for available gains."); // update gains to next value if invalid - for (int i = 0; i < _gain.size(); i++) + for (size_t i = 0; i < _gain.size(); i++) { int adjustedGain = static_cast(_gain[i] * 10); auto it = std::lower_bound(validGains.begin(), diff --git a/src/capture/rspduo/RspDuo.cpp b/src/capture/rspduo/RspDuo.cpp index cce893c..44066c4 100644 --- a/src/capture/rspduo/RspDuo.cpp +++ b/src/capture/rspduo/RspDuo.cpp @@ -115,9 +115,13 @@ void RspDuo::replay(IqData *_buffer1, IqData *_buffer2, std::string _file, bool while (true) { rv = fread(&i1, 1, sizeof(short), file_replay); + if (rv != sizeof(short)) break; rv = fread(&q1, 1, sizeof(short), file_replay); + if (rv != sizeof(short)) break; rv = fread(&i2, 1, sizeof(short), file_replay); + if (rv != sizeof(short)) break; rv = fread(&q2, 1, sizeof(short), file_replay); + if (rv != sizeof(short)) break; buffer1->lock(); buffer2->lock(); if (buffer1->get_length() < buffer1->get_n()) @@ -214,7 +218,7 @@ void RspDuo::open_api() void RspDuo::get_device() { - int i; + unsigned int i; unsigned int ndev; unsigned int chosenIdx = 0; @@ -413,8 +417,8 @@ void RspDuo::stream_a_callback(short *xi, short *xq, sdrplay_api_StreamCbParamsT *params, unsigned int numSamples, unsigned int reset, void *cbContext) { - int i = 0; - int j = 0; + unsigned int i = 0; + unsigned int j = 0; // process stream callback data buffer_16_ar = (short int *)malloc(numSamples * 4 * sizeof(short)); @@ -456,8 +460,8 @@ void RspDuo::stream_b_callback(short *xi, short *xq, sdrplay_api_StreamCbParamsT *params, unsigned int numSamples, unsigned int reset, void *cbContext) { - int i = 0; - int j = 0; + unsigned int i = 0; + unsigned int j = 0; // xxxxIIQQ for (i = 0; i < numSamples; i++) @@ -473,7 +477,7 @@ unsigned int reset, void *cbContext) // write data to IqData buffer1->lock(); buffer2->lock(); - for (int i = 0; i < numSamples*4; i+=4) + for (i = 0; i < numSamples*4; i+=4) { buffer1->push_back({(double)buffer_16_ar[i], (double)buffer_16_ar[i+1]}); buffer2->push_back({(double)buffer_16_ar[i+2], (double)buffer_16_ar[i+3]}); diff --git a/src/data/Detection.cpp b/src/data/Detection.cpp index ff33b16..3e6e903 100644 --- a/src/data/Detection.cpp +++ b/src/data/Detection.cpp @@ -52,21 +52,21 @@ std::string Detection::to_json(uint64_t timestamp) // store delay array rapidjson::Value arrayDelay(rapidjson::kArrayType); - for (int i = 0; i < get_nDetections(); i++) + for (size_t i = 0; i < get_nDetections(); i++) { arrayDelay.PushBack(delay[i], allocator); } // store Doppler array rapidjson::Value arrayDoppler(rapidjson::kArrayType); - for (int i = 0; i < get_nDetections(); i++) + for (size_t i = 0; i < get_nDetections(); i++) { arrayDoppler.PushBack(doppler[i], allocator); } // store snr array rapidjson::Value arraySnr(rapidjson::kArrayType); - for (int i = 0; i < get_nDetections(); i++) + for (size_t i = 0; i < get_nDetections(); i++) { arraySnr.PushBack(snr[i], allocator); } @@ -92,7 +92,7 @@ std::string Detection::delay_bin_to_km(std::string json, uint32_t fs) document.Parse(json.c_str()); document["delay"].Clear(); - for (int i = 0; i < delay.size(); i++) + for (size_t i = 0; i < delay.size(); i++) { document["delay"].PushBack(1.0*delay[i]*(Constants::c/(double)fs)/1000, allocator); } diff --git a/src/data/IqData.cpp b/src/data/IqData.cpp index ff32c74..5373ec8 100644 --- a/src/data/IqData.cpp +++ b/src/data/IqData.cpp @@ -96,14 +96,14 @@ std::string IqData::to_json(uint64_t timestamp) // store frequency array rapidjson::Value arrayFrequency(rapidjson::kArrayType); - for (int i = 0; i < frequency.size(); i++) + for (size_t i = 0; i < frequency.size(); i++) { arrayFrequency.PushBack(frequency[i], allocator); } // store spectrum array rapidjson::Value arraySpectrum(rapidjson::kArrayType); - for (int i = 0; i < spectrum.size(); i++) + for (size_t i = 0; i < spectrum.size(); i++) { arraySpectrum.PushBack(10 * std::log10(std::abs(spectrum[i])), allocator); } diff --git a/src/data/Map.cpp b/src/data/Map.cpp index 9ec3290..30d27f3 100644 --- a/src/data/Map.cpp +++ b/src/data/Map.cpp @@ -23,7 +23,7 @@ template void Map::set_row(uint32_t i, std::vector row) { //data[i].swap(row); - for (int j = 0; j < nCols; j++) + for (uint32_t j = 0; j < nCols; j++) { data[i][j] = row[j]; } @@ -32,7 +32,7 @@ void Map::set_row(uint32_t i, std::vector row) template void Map::set_col(uint32_t i, std::vector col) { - for (int j = 0; j < nRows; j++) + for (uint32_t j = 0; j < nRows; j++) { data[j][i] = col[j]; } @@ -61,7 +61,7 @@ std::vector Map::get_col(uint32_t col) { std::vector colData; - for (int i = 0; i < nRows; i++) + for (uint32_t i = 0; i < nRows; i++) { colData.push_back(data[i][col]); } @@ -74,9 +74,9 @@ Map *Map::get_map_db() { Map *map = new Map(nRows, nCols); - for (int i = 0; i < nRows; i++) + for (uint32_t i = 0; i < nRows; i++) { - for (int j = 0; j < nCols; j++) + for (uint32_t j = 0; j < nCols; j++) { map->data[i][j] = (double)10 * std::log10(std::abs(data[i][j])); } @@ -88,9 +88,9 @@ Map *Map::get_map_db() template void Map::print() { - for (int i = 0; i < nRows; i++) + for (uint32_t i = 0; i < nRows; i++) { - for (int j = 0; j < nCols; j++) + for (uint32_t j = 0; j < nCols; j++) { std::cout << data[i][j]; std::cout << " "; @@ -121,10 +121,10 @@ std::string Map::to_json(uint64_t timestamp) // store data array rapidjson::Value array(rapidjson::kArrayType); - for (int i = 0; i < data.size(); i++) + for (size_t i = 0; i < data.size(); i++) { rapidjson::Value subarray(rapidjson::kArrayType); - for (int j = 0; j < data[i].size(); j++) + for (size_t j = 0; j < data[i].size(); j++) { subarray.PushBack(10 * std::log10(std::abs(data[i][j])) - noisePower, document.GetAllocator()); } @@ -133,14 +133,14 @@ std::string Map::to_json(uint64_t timestamp) // store delay array rapidjson::Value arrayDelay(rapidjson::kArrayType); - for (int i = 0; i < delay.size(); i++) + for (size_t i = 0; i < delay.size(); i++) { arrayDelay.PushBack(delay[i], allocator); } // store Doppler array rapidjson::Value arrayDoppler(rapidjson::kArrayType); - for (int i = 0; i < get_nRows(); i++) + for (uint32_t i = 0; i < get_nRows(); i++) { arrayDoppler.PushBack(doppler[i], allocator); } @@ -171,7 +171,7 @@ std::string Map::delay_bin_to_km(std::string json, uint32_t fs) document.Parse(json.c_str()); document["delay"].Clear(); - for (int i = 0; i < delay.size(); i++) + for (size_t i = 0; i < delay.size(); i++) { document["delay"].PushBack(1.0*delay[i]*(Constants::c/(double)fs)/1000, allocator); } @@ -191,9 +191,9 @@ void Map::set_metrics() double value; double noisePower = 0; double maxPower = 0; - for (int i = 0; i < nRows; i++) + for (uint32_t i = 0; i < nRows; i++) { - for (int j = 0; j < nCols; j++) + for (uint32_t j = 0; j < nCols; j++) { value = 10 * std::log10(std::abs(data[i][j])); noisePower = noisePower + value; diff --git a/src/data/Track.cpp b/src/data/Track.cpp index 1bf6e5c..41cd883 100644 --- a/src/data/Track.cpp +++ b/src/data/Track.cpp @@ -177,7 +177,7 @@ std::string Track::to_json(uint64_t timestamp) // store track data rapidjson::Value dataArray(rapidjson::kArrayType); - for (int i = 0; i < get_n(); i++) + for (uint64_t i = 0; i < get_n(); i++) { if (get_state(i) != STATE_TENTATIVE) { diff --git a/src/data/meta/Timing.cpp b/src/data/meta/Timing.cpp index 600de46..73e9a33 100644 --- a/src/data/meta/Timing.cpp +++ b/src/data/meta/Timing.cpp @@ -33,7 +33,7 @@ std::string Timing::to_json() document.AddMember("nCpi", n, allocator); document.AddMember("uptime", uptime, allocator); rapidjson::Value name_value; - for (int i = 0; i < time.size(); i++) + for (size_t i = 0; i < time.size(); i++) { name_value = rapidjson::StringRef(name[i].c_str()); document.AddMember(name_value, time[i], allocator); diff --git a/src/process/ambiguity/Ambiguity.cpp b/src/process/ambiguity/Ambiguity.cpp index 2d1a4a7..889b6c4 100644 --- a/src/process/ambiguity/Ambiguity.cpp +++ b/src/process/ambiguity/Ambiguity.cpp @@ -8,16 +8,20 @@ #include // constructor -Ambiguity::Ambiguity(int32_t _delayMin, int32_t _delayMax, int32_t _dopplerMin, int32_t _dopplerMax, uint32_t _fs, uint32_t _n, bool _roundHamming) - : delayMin{_delayMin} - , delayMax{_delayMax} - , dopplerMin{_dopplerMin} - , dopplerMax{_dopplerMax} - , fs{_fs} - , nSamples{_n} - , nDelayBins{static_cast(_delayMax - _delayMin + 1)} // If delayMin > delayMax = trouble, what's the exception policy? - , dopplerMiddle{(_dopplerMin + _dopplerMax) / 2.0} +Ambiguity::Ambiguity(int32_t _delayMin, int32_t _delayMax, + int32_t _dopplerMin, int32_t _dopplerMax, uint32_t _fs, + uint32_t _n, bool _roundHamming) { + // init + delayMin = _delayMin; + delayMax = _delayMax; + dopplerMin = _dopplerMin; + dopplerMax = _dopplerMax; + fs = _fs; + nSamples = _n; + nDelayBins = static_cast(_delayMax - _delayMin + 1); + dopplerMiddle = (_dopplerMin + _dopplerMax) / 2.0; + // doppler calculations std::deque doppler; double resolutionDoppler = 1.0 / (static_cast(_n) / static_cast(_fs)); @@ -91,22 +95,22 @@ Map> *Ambiguity::process(IqData *x, IqData *y) if (dopplerMiddle != 0) { std::complex j = {0, 1}; - for (int i = 0; i < x->get_length(); i++) + for (uint32_t i = 0; i < x->get_length(); i++) { x->push_back(x->pop_front() * std::exp(1.0 * j * 2.0 * M_PI * dopplerMiddle * ((double)i / fs))); } } // range processing - for (int i = 0; i < nDopplerBins; i++) + for (uint16_t i = 0; i < nDopplerBins; i++) { - for (int j = 0; j < nCorr; j++) + for (uint16_t j = 0; j < nCorr; j++) { dataXi[j] = x->pop_front(); dataYi[j] = y->pop_front(); } - for (int j = nCorr; j < nfft; j++) + for (uint16_t j = nCorr; j < nfft; j++) { dataXi[j] = {0, 0}; dataYi[j] = {0, 0}; @@ -116,7 +120,7 @@ Map> *Ambiguity::process(IqData *x, IqData *y) fftw_execute(fftYi); // compute correlation - for (int j = 0; j < nfft; j++) + for (uint32_t j = 0; j < nfft; j++) { dataZi[j] = (dataYi[j] * std::conj(dataXi[j])) / (double)nfft; } @@ -124,18 +128,18 @@ Map> *Ambiguity::process(IqData *x, IqData *y) fftw_execute(fftZi); // extract center of corr - for (int j = 0; j < nDelayBins; j++) + for (uint16_t j = 0; j < nDelayBins; j++) { dataCorr[j] = dataZi[nfft - nDelayBins + j]; } - for (int j = 0; j < nDelayBins + 1; j++) + for (uint16_t j = 0; j < nDelayBins + 1; j++) { dataCorr[j + nDelayBins] = dataZi[j]; } // cast from std::complex to std::vector corr.clear(); - for (int j = 0; j < nDelayBins; j++) + for (uint16_t j = 0; j < nDelayBins; j++) { corr.push_back(dataCorr[nDelayBins + delayMin + j - 1 + 1]); } @@ -144,10 +148,10 @@ Map> *Ambiguity::process(IqData *x, IqData *y) } // doppler processing - for (int i = 0; i < nDelayBins; i++) + for (uint16_t i = 0; i < nDelayBins; i++) { delayProfile = map->get_col(i); - for (int j = 0; j < nDopplerBins; j++) + for (uint16_t j = 0; j < nDopplerBins; j++) { dataDoppler[j] = {delayProfile[j].real(), delayProfile[j].imag()}; } @@ -155,7 +159,7 @@ Map> *Ambiguity::process(IqData *x, IqData *y) fftw_execute(fftDoppler); corr.clear(); - for (int j = 0; j < nDopplerBins; j++) + for (uint16_t j = 0; j < nDopplerBins; j++) { corr.push_back(dataDoppler[(j + int(nDopplerBins / 2) + 1) % nDopplerBins]); } diff --git a/src/process/ambiguity/Ambiguity.h b/src/process/ambiguity/Ambiguity.h index d520b09..6fe776f 100644 --- a/src/process/ambiguity/Ambiguity.h +++ b/src/process/ambiguity/Ambiguity.h @@ -6,6 +6,7 @@ /// @author 30hours /// @todo Ambiguity maps are still offset by 1 bin. /// @todo Write a performance test for hamming assisted ambiguity processing. +/// @todo If delayMin > delayMax = trouble, what's the exception policy? #include "data/IqData.h" #include "data/Map.h" @@ -73,12 +74,12 @@ private: /// @brief Number of samples. uint32_t nSamples; - /// @brief Center of Doppler bins (Hz). - double dopplerMiddle; - /// @brief Number of delay bins. uint16_t nDelayBins; + /// @brief Center of Doppler bins (Hz). + double dopplerMiddle; + /// @brief Number of Doppler bins. uint16_t nDopplerBins; diff --git a/src/process/clutter/WienerHopf.cpp b/src/process/clutter/WienerHopf.cpp index cc9af55..9fa9ddc 100644 --- a/src/process/clutter/WienerHopf.cpp +++ b/src/process/clutter/WienerHopf.cpp @@ -57,11 +57,12 @@ WienerHopf::~WienerHopf() bool WienerHopf::process(IqData *x, IqData *y) { + uint32_t i, j; xData = x->get_data(); yData = y->get_data(); // change deque to std::complex - for (int i = 0; i < nSamples; i++) + for (i = 0; i < nSamples; i++) { dataX[i] = xData[(((i - delayMin) % nSamples) + nSamples) % nSamples]; dataY[i] = yData[i]; @@ -72,21 +73,21 @@ bool WienerHopf::process(IqData *x, IqData *y) fftw_execute(fftY); // auto-correlation matrix A - for (int i = 0; i < nSamples; i++) + for (i = 0; i < nSamples; i++) { dataA[i] = (dataOutX[i] * std::conj(dataOutX[i])); } fftw_execute(fftA); - for (int i = 0; i < nBins; i++) + for (i = 0; i < nBins; i++) { a[i] = std::conj(dataA[i]) / (double)nSamples; } A = arma::toeplitz(a); // conjugate upper diagonal as arma does not - for (int i = 0; i < nBins; i++) + for (i = 0; i < nBins; i++) { - for (int j = 0; j < nBins; j++) + for (j = 0; j < nBins; j++) { if (i > j) { @@ -96,12 +97,12 @@ bool WienerHopf::process(IqData *x, IqData *y) } // cross-correlation vector b - for (int i = 0; i < nSamples; i++) + for (i = 0; i < nSamples; i++) { dataB[i] = (dataOutY[i] * std::conj(dataOutX[i])); } fftw_execute(fftB); - for (int i = 0; i < nBins; i++) + for (i = 0; i < nBins; i++) { b[i] = dataB[i] / (double)nSamples; } @@ -121,21 +122,21 @@ bool WienerHopf::process(IqData *x, IqData *y) } // assign and pad x - for (int i = 0; i < nSamples; i++) + for (i = 0; i < nSamples; i++) { filtX[i] = dataX[i]; } - for (int i = nSamples; i < nBins + nSamples + 1; i++) + for (i = nSamples; i < nBins + nSamples + 1; i++) { filtX[i] = {0, 0}; } // assign and pad w - for (int i = 0; i < nBins; i++) + for (i = 0; i < nBins; i++) { filtW[i] = w[i]; } - for (int i = nBins; i < nBins + nSamples + 1; i++) + for (i = nBins; i < nBins + nSamples + 1; i++) { filtW[i] = {0, 0}; } @@ -145,7 +146,7 @@ bool WienerHopf::process(IqData *x, IqData *y) fftw_execute(fftFiltW); // compute convolution/filter - for (int i = 0; i < nBins + nSamples + 1; i++) + for (i = 0; i < nBins + nSamples + 1; i++) { filt[i] = (filtW[i] * filtX[i]); } @@ -153,7 +154,7 @@ bool WienerHopf::process(IqData *x, IqData *y) // update surveillance signal y->clear(); - for (int i = 0; i < nSamples; i++) + for (i = 0; i < nSamples; i++) { y->push_back(dataY[i] - (filt[i] / (double)(nBins + nSamples + 1))); } diff --git a/src/process/meta/HammingNumber.cpp b/src/process/meta/HammingNumber.cpp index a67adb4..66b538b 100644 --- a/src/process/meta/HammingNumber.cpp +++ b/src/process/meta/HammingNumber.cpp @@ -25,11 +25,11 @@ HammingNumber::HammingNumber(const std::vector &pfs) const HammingNumber &HammingNumber::operator++() { - for (int i = 0; i < H.size(); i++) + for (std::vector::size_type i = 0; i < H.size(); i++) for (; hv[i] <= x.back(); hv[i] = x[++hp[i]] * H[i]) ; x.push_back(hv[0]); - for (int i = 1; i < H.size(); i++) + for (std::vector::size_type i = 1; i < H.size(); i++) if (hv[i] < x.back()) x.back() = hv[i]; return *this; diff --git a/src/process/spectrum/SpectrumAnalyser.cpp b/src/process/spectrum/SpectrumAnalyser.cpp index 413e8d3..1a17bd3 100644 --- a/src/process/spectrum/SpectrumAnalyser.cpp +++ b/src/process/spectrum/SpectrumAnalyser.cpp @@ -31,8 +31,9 @@ SpectrumAnalyser::~SpectrumAnalyser() void SpectrumAnalyser::process(IqData *x) { // load data and FFT + uint32_t i; std::deque> data = x->get_data(); - for (int i = 0; i < nfft; i++) + for (i = 0; i < nfft; i++) { dataX[i] = data[i]; } @@ -40,14 +41,14 @@ void SpectrumAnalyser::process(IqData *x) // fftshift std::vector> fftshift; - for (int i = 0; i < nfft; i++) + for (i = 0; i < nfft; i++) { fftshift.push_back(dataX[(i + int(nfft / 2) + 1) % nfft]); } // decimate std::vector> spectrum; - for (int i = 0; i < nfft; i+=decimation) + for (i = 0; i < nfft; i+=decimation) { spectrum.push_back(fftshift[i]); } @@ -60,7 +61,7 @@ void SpectrumAnalyser::process(IqData *x) { offset = bandwidth/2; } - for (int i = -nSpectrum/2; i < nSpectrum/2; i++) + for (i = -nSpectrum/2; i < nSpectrum/2; i++) { frequency.push_back(((i*bandwidth)+offset+204640000)/1000); } diff --git a/src/process/tracker/Tracker.cpp b/src/process/tracker/Tracker.cpp index 992df71..01db9d9 100644 --- a/src/process/tracker/Tracker.cpp +++ b/src/process/tracker/Tracker.cpp @@ -56,7 +56,9 @@ void Tracker::update(Detection *detection, uint64_t current) std::vector snr = detection->get_snr(); // init - double delayPredict, dopplerPredict, acc; + double delayPredict = 0.0; + double dopplerPredict = 0.0; + double acc = 0.0; uint32_t nRemove = 0; std::string state; @@ -65,7 +67,7 @@ void Tracker::update(Detection *detection, uint64_t current) timestamp = current; // loop over each track - for (int i = 0; i < track.get_n(); i++) + for (uint64_t i = 0; i < track.get_n(); i++) { // predict next position Detection detectionCurrent = track.get_current(i); diff --git a/src/process/utility/Socket.h b/src/process/utility/Socket.h index 96ab695..4ab1ac1 100644 --- a/src/process/utility/Socket.h +++ b/src/process/utility/Socket.h @@ -20,12 +20,12 @@ private: /// @brief Common MTU size for all socket objects. static const uint32_t MTU; - /// @brief The ASIO socket. - asio::ip::tcp::socket socket; - /// @brief The ASIO endpoint. asio::ip::tcp::endpoint endpoint; + /// @brief The ASIO socket. + asio::ip::tcp::socket socket; + public: /// @brief Constructor for Socket. /// @param ip IP address of data destination.