Fix checkTofDetections bug.
This commit is contained in:
@@ -66,21 +66,24 @@ namespace Recon {
|
||||
return transData;
|
||||
}
|
||||
|
||||
Aurora::Matrix checkTofDetections(Aurora::Matrix &aVTofValues, const Aurora::Matrix &aVDists,
|
||||
checkTofDetectionsResult checkTofDetections(const Aurora::Matrix &aVTofValues, const Aurora::Matrix &aVDists,
|
||||
const Aurora::Matrix &aVSosRef,
|
||||
double minSpeedOfSound,
|
||||
double maxSpeedOfSound)
|
||||
{
|
||||
checkTofDetectionsResult result;
|
||||
auto sosValues = aVDists / (aVTofValues + (aVDists / aVSosRef));
|
||||
|
||||
auto valid = (sosValues < maxSpeedOfSound) * (sosValues > minSpeedOfSound);
|
||||
result.valid = valid;
|
||||
|
||||
auto minSpeedOfSoundM = minSpeedOfSound+ zeros(sosValues.getDimSize(0),sosValues.getDimSize(1),sosValues.getDimSize(2));
|
||||
auto maxSpeedOfSoundM = maxSpeedOfSound+zeros(sosValues.getDimSize(0),sosValues.getDimSize(1),sosValues.getDimSize(2));
|
||||
sosValues = max(minSpeedOfSoundM, sosValues);
|
||||
sosValues = min(maxSpeedOfSoundM, sosValues);
|
||||
|
||||
aVTofValues = (aVDists / sosValues) - (aVDists / aVSosRef);
|
||||
return sosValues;
|
||||
Matrix tofValues = (aVDists / sosValues) - (aVDists / aVSosRef);
|
||||
result.tofValues = tofValues;
|
||||
return result;
|
||||
}
|
||||
|
||||
Aurora::Matrix filterTransmissionData(const Aurora::Matrix &aVslBlock,
|
||||
|
||||
@@ -17,7 +17,13 @@ filterTransmissionAngle(double aAngleLowerLimit, double aAngleUpperLimit,
|
||||
const Aurora::Matrix &aMSenderNormalBlock,
|
||||
const Aurora::Matrix &aMReceiverNormalBlock);
|
||||
|
||||
Aurora::Matrix checkTofDetections(Aurora::Matrix &aVTofValues,
|
||||
struct checkTofDetectionsResult
|
||||
{
|
||||
Aurora::Matrix tofValues;
|
||||
Aurora::Matrix valid;
|
||||
};
|
||||
|
||||
checkTofDetectionsResult checkTofDetections(const Aurora::Matrix &aVTofValues,
|
||||
const Aurora::Matrix &aVDists,
|
||||
const Aurora::Matrix &aVSosRef,
|
||||
double minSpeedOfSound,
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
#include "config/config.h"
|
||||
#include "reflectionReconstruction/dataFilter.h"
|
||||
#include "transmissionReconstruction/dataFilter/dataFilter.h"
|
||||
#include "src/transmissionReconstruction/dataPreperation.h"
|
||||
#include "src/common/getMeasurementMetaData.h"
|
||||
|
||||
|
||||
|
||||
@@ -71,21 +73,30 @@ TEST_F(DataFilter_Test, filterTransmissionAngle) {
|
||||
EXPECT_DOUBLE_EQ(1.0,result.getData()[3]);
|
||||
}
|
||||
|
||||
TEST_F(DataFilter_Test, checkTofDetections) {
|
||||
double *dataA = new double[3]{-3.0e-07, -2.6e-06, -2.6e-06};
|
||||
auto tofValues = Aurora::Matrix::fromRawData(dataA, 3, 1);
|
||||
double *dataB = new double[3]{0.238, 0.249, 0.249};
|
||||
auto dists = Aurora::Matrix::fromRawData(dataB, 3, 1);
|
||||
double *data3 = new double[3]{1476.35, 1476.28, 1476.28};
|
||||
auto sosRef = Aurora::Matrix::fromRawData(data3, 3, 1);
|
||||
double minSpeedOfSound = 1400;
|
||||
double maxSpeedOfSound = 1650;
|
||||
|
||||
auto result = Recon::checkTofDetections(tofValues, dists, sosRef, minSpeedOfSound,maxSpeedOfSound);
|
||||
EXPECT_EQ(3,result.getDataSize());
|
||||
EXPECT_DOUBLE_AE(1479.1025,result.getData()[0]);
|
||||
EXPECT_DOUBLE_AE(1499.3931,result.getData()[1]);
|
||||
EXPECT_DOUBLE_AE(1499.3931,result.getData()[2]);
|
||||
TEST_F(DataFilter_Test, checkTofDetections) {
|
||||
MatlabReader m("/home/sun/testData/checkTofDetections.mat");
|
||||
auto receiverList = m.read("receiverList");
|
||||
auto senderList = m.read("senderList");
|
||||
auto tofDataTotal = m.read("tofDataTotal");
|
||||
auto waterTempList = m.read("waterTempList");
|
||||
auto tofValues = m.read("tofValues");
|
||||
auto valid = m.read("valid");
|
||||
Aurora::Matrix dists = Recon::distanceBetweenTwoPoints(senderList, receiverList);
|
||||
Aurora::Matrix sosRef = Recon::temperatureToSoundSpeed(waterTempList, "marczak");
|
||||
auto result = Recon::checkTofDetections(tofDataTotal, dists, sosRef, Recon::transParams::minSpeedOfSound,Recon::transParams::maxSpeedOfSound);
|
||||
|
||||
for (size_t i = 0; i < result.valid.getDataSize(); i++)
|
||||
{
|
||||
EXPECT_DOUBLE_AE(valid.getData()[i],result.valid.getData()[i]) << " :"<<i;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < result.tofValues.getDataSize(); i++)
|
||||
{
|
||||
EXPECT_DOUBLE_AE(tofValues.getData()[i],result.tofValues.getData()[i])<< " :"<<i;
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
}
|
||||
|
||||
TEST_F(DataFilter_Test, calculateSnr) {
|
||||
|
||||
Reference in New Issue
Block a user