Fix transmissionDetection
This commit is contained in:
@@ -10,6 +10,7 @@
|
|||||||
#include "Function3D.h"
|
#include "Function3D.h"
|
||||||
#include "Matrix.h"
|
#include "Matrix.h"
|
||||||
|
|
||||||
|
#include "common/getMeasurementMetaData.h"
|
||||||
#include "config/config.h"
|
#include "config/config.h"
|
||||||
#include "calculateBankDetectAndHilbertTransformation.hpp"
|
#include "calculateBankDetectAndHilbertTransformation.hpp"
|
||||||
|
|
||||||
@@ -146,6 +147,7 @@ namespace Recon {
|
|||||||
auto endPos = zeros(Ascan.getDimSize(1), 1);
|
auto endPos = zeros(Ascan.getDimSize(1), 1);
|
||||||
auto startPosRef = zeros(Ascan.getDimSize(1), 1);
|
auto startPosRef = zeros(Ascan.getDimSize(1), 1);
|
||||||
auto endPosRef = zeros(Ascan.getDimSize(1), 1);
|
auto endPosRef = zeros(Ascan.getDimSize(1), 1);
|
||||||
|
#pragma omp parallel for
|
||||||
for (size_t i = 0; i < Ascan.getDimSize(1); i++)
|
for (size_t i = 0; i < Ascan.getDimSize(1); i++)
|
||||||
{
|
{
|
||||||
startPos[i] = std::floor(std::max(tof[i]*sampleRate+offsetElectronicSamples,1.0));
|
startPos[i] = std::floor(std::max(tof[i]*sampleRate+offsetElectronicSamples,1.0));
|
||||||
@@ -314,11 +316,11 @@ namespace Recon {
|
|||||||
Matrix _AscanRefBlock_trim = _AscanRefBlock.getDimSize(0)!=M?_AscanRefBlock.block(0, 0, M-1):_AscanRefBlock;
|
Matrix _AscanRefBlock_trim = _AscanRefBlock.getDimSize(0)!=M?_AscanRefBlock.block(0, 0, M-1):_AscanRefBlock;
|
||||||
std::copy(_AscanBlock_trim.getData(), _AscanBlock_trim.getData() + totalSize, aScans_r);
|
std::copy(_AscanBlock_trim.getData(), _AscanBlock_trim.getData() + totalSize, aScans_r);
|
||||||
std::copy(_AscanRefBlock_trim.getData(), _AscanRefBlock_trim.getData() + totalSize,
|
std::copy(_AscanRefBlock_trim.getData(), _AscanRefBlock_trim.getData() + totalSize,
|
||||||
aScans_r);
|
aScansRef_r);
|
||||||
}
|
}
|
||||||
|
|
||||||
calculateBankDetectAndHilbertTransformation(
|
calculateBankDetectAndHilbertTransformation(
|
||||||
aScans_r, aScansRef_r, M, N, resampleFactor, nthreads,
|
aScans_r, aScansRef_r, N, M, resampleFactor, nthreads,
|
||||||
resDetect, resEnvelope, resEnvelopeRef);
|
resDetect, resEnvelope, resEnvelopeRef);
|
||||||
delete [] aScans_r;
|
delete [] aScans_r;
|
||||||
delete [] aScansRef_r;
|
delete [] aScansRef_r;
|
||||||
@@ -363,12 +365,13 @@ namespace Recon {
|
|||||||
auto endPos = zeros(_AscanBlock.getDimSize(1), 1);
|
auto endPos = zeros(_AscanBlock.getDimSize(1), 1);
|
||||||
auto startPosRef = zeros(_AscanBlock.getDimSize(1), 1);
|
auto startPosRef = zeros(_AscanBlock.getDimSize(1), 1);
|
||||||
auto endPosRef = zeros(_AscanBlock.getDimSize(1), 1);
|
auto endPosRef = zeros(_AscanBlock.getDimSize(1), 1);
|
||||||
|
#pragma omp parallel for
|
||||||
for (size_t i = 0; i < _AscanBlock.getDimSize(1); i++)
|
for (size_t i = 0; i < _AscanBlock.getDimSize(1); i++)
|
||||||
{
|
{
|
||||||
startPos[i] = std::floor(std::max(tofAbs[i]*sampleRate+offsetElectronicSamples,1.0));
|
startPos[i] = std::floor(std::max(tofAbs[i]*sampleRate+offsetElectronicSamples,1.0));
|
||||||
endPos[i] = std::ceil(std::min(sizeAscan[1], tofAbs[i]*sampleRate+offsetElectronicSamples+detectionWindowATT));
|
endPos[i] = std::ceil(std::min(sizeAscan[0], tofAbs[i]*sampleRate+offsetElectronicSamples+detectionWindowATT));
|
||||||
startPosRef[i] = std::floor(std::max( tof2[i],1.0));
|
startPosRef[i] = std::floor(std::max( tof2[i],1.0));
|
||||||
endPosRef[i] = std::ceil(std::min(sizeAscan[1], tof2[i]+detectionWindowATT));
|
endPosRef[i] = std::ceil(std::min(sizeAscan[0], tof2[i]+detectionWindowATT));
|
||||||
}
|
}
|
||||||
DetectResult result;
|
DetectResult result;
|
||||||
result.att = calculateAttenuation(resEnvelope,startPos,endPos,resEnvelopeRef,startPosRef,endPosRef);
|
result.att = calculateAttenuation(resEnvelope,startPos,endPos,resEnvelopeRef,startPosRef,endPosRef);
|
||||||
@@ -384,11 +387,13 @@ namespace Recon {
|
|||||||
const Aurora::Matrix &sosWaterBlock,
|
const Aurora::Matrix &sosWaterBlock,
|
||||||
const Aurora::Matrix &sosWaterRefBlock,
|
const Aurora::Matrix &sosWaterRefBlock,
|
||||||
double expectedSOSWater) {
|
double expectedSOSWater) {
|
||||||
|
auto _sosWaterBlock = temperatureToSoundSpeed(sosWaterBlock, "marczak");
|
||||||
|
auto _sosWaterRefBlock = temperatureToSoundSpeed(sosWaterRefBlock, "marczak");
|
||||||
switch (Recon::transParams::version) {
|
switch (Recon::transParams::version) {
|
||||||
case 1: {
|
case 1: {
|
||||||
return detectTofAndAttMex(
|
return detectTofAndAttMex(
|
||||||
AscanBlock, AscanRefBlock, distBlock, distRefBlock,
|
AscanBlock, AscanRefBlock, distBlock, distRefBlock,
|
||||||
sosWaterBlock, sosWaterRefBlock, Recon::transParams::resampleFactor, Recon::transParams::nThreads,
|
_sosWaterBlock, _sosWaterRefBlock, Recon::transParams::resampleFactor, Recon::transParams::nThreads,
|
||||||
expectedSOSWater, Recon::transParams::useTimeWindowing,
|
expectedSOSWater, Recon::transParams::useTimeWindowing,
|
||||||
Recon::transParams::aScanReconstructionFrequency, Recon::transParams::detectionWindowATT,
|
Recon::transParams::aScanReconstructionFrequency, Recon::transParams::detectionWindowATT,
|
||||||
Recon::transParams::offsetElectronic, Recon::transParams::detectionWindowSOS, Recon::transParams::minSpeedOfSound,
|
Recon::transParams::offsetElectronic, Recon::transParams::detectionWindowSOS, Recon::transParams::minSpeedOfSound,
|
||||||
@@ -398,7 +403,7 @@ namespace Recon {
|
|||||||
default:
|
default:
|
||||||
return detectTofAndAtt(
|
return detectTofAndAtt(
|
||||||
AscanBlock, AscanRefBlock, distBlock, distRefBlock,
|
AscanBlock, AscanRefBlock, distBlock, distRefBlock,
|
||||||
sosWaterBlock, sosWaterRefBlock, Recon::transParams::resampleFactor, Recon::transParams::nThreads,
|
_sosWaterBlock, _sosWaterRefBlock, Recon::transParams::resampleFactor, Recon::transParams::nThreads,
|
||||||
expectedSOSWater, Recon::transParams::useTimeWindowing,
|
expectedSOSWater, Recon::transParams::useTimeWindowing,
|
||||||
Recon::transParams::aScanReconstructionFrequency, Recon::transParams::detectionWindowATT,
|
Recon::transParams::aScanReconstructionFrequency, Recon::transParams::detectionWindowATT,
|
||||||
Recon::transParams::offsetElectronic, Recon::transParams::detectionWindowSOS, Recon::transParams::minSpeedOfSound,
|
Recon::transParams::offsetElectronic, Recon::transParams::detectionWindowSOS, Recon::transParams::minSpeedOfSound,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "MatlabReader.h"
|
#include "MatlabReader.h"
|
||||||
#include "Matrix.h"
|
#include "Matrix.h"
|
||||||
#include "config/config.h"
|
#include "config/config.h"
|
||||||
|
#include "common/getMeasurementMetaData.h"
|
||||||
#include "transmissionReconstruction/detection/detection.h"
|
#include "transmissionReconstruction/detection/detection.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -45,8 +46,8 @@ TEST_F(Detection_Test, detectTofAndAttMex) {
|
|||||||
auto AscanRefBlock = m.read("AscanRefBlock");
|
auto AscanRefBlock = m.read("AscanRefBlock");
|
||||||
auto distBlock = m.read("dists");
|
auto distBlock = m.read("dists");
|
||||||
auto distBlockRef = m.read("distRefBlock");
|
auto distBlockRef = m.read("distRefBlock");
|
||||||
auto sosWaterBlock = m.read("waterTempBlock");
|
auto sosWaterBlock = Recon::temperatureToSoundSpeed(m.read("waterTempBlock"),"marczak");
|
||||||
auto sosWaterRefBlock = m.read("waterTempRefBlock");
|
auto sosWaterRefBlock = Recon::temperatureToSoundSpeed(m.read("waterTempRefBlock"),"marczak");
|
||||||
double expectedSOSWater = 1.511948131508464e+03;
|
double expectedSOSWater = 1.511948131508464e+03;
|
||||||
|
|
||||||
auto result = Recon::detectTofAndAttMex(
|
auto result = Recon::detectTofAndAttMex(
|
||||||
@@ -55,13 +56,13 @@ TEST_F(Detection_Test, detectTofAndAttMex) {
|
|||||||
Recon::transParams::nThreads, expectedSOSWater,
|
Recon::transParams::nThreads, expectedSOSWater,
|
||||||
Recon::transParams::useTimeWindowing,
|
Recon::transParams::useTimeWindowing,
|
||||||
Recon::transParams::aScanReconstructionFrequency,
|
Recon::transParams::aScanReconstructionFrequency,
|
||||||
Recon::transParams::offsetElectronic,Recon::transParams::detectionWindowATT,
|
Recon::transParams::detectionWindowATT,Recon::transParams::offsetElectronic,
|
||||||
Recon::transParams::detectionWindowSOS,
|
Recon::transParams::detectionWindowSOS,
|
||||||
Recon::transParams::minSpeedOfSound,
|
Recon::transParams::minSpeedOfSound,
|
||||||
Recon::transParams::maxSpeedOfSound, Recon::transParams::gaussWindow);
|
Recon::transParams::maxSpeedOfSound, Recon::transParams::gaussWindow);
|
||||||
|
|
||||||
MatlabReader m2("/home/krad/TestData/sosResult.mat");
|
MatlabReader m3("/home/krad/TestData/sosResult.mat");
|
||||||
auto sosvalue = m2.read("sosValue");
|
auto sosvalue = m3.read("sosValue");
|
||||||
ASSERT_EQ(sosvalue.getDataSize(), result.tof.getDataSize());
|
ASSERT_EQ(sosvalue.getDataSize(), result.tof.getDataSize());
|
||||||
ASSERT_EQ(sosvalue.getDataSize(), result.sosValue.getDataSize());
|
ASSERT_EQ(sosvalue.getDataSize(), result.sosValue.getDataSize());
|
||||||
ASSERT_EQ(sosvalue.getDataSize(), result.att.getDataSize());
|
ASSERT_EQ(sosvalue.getDataSize(), result.att.getDataSize());
|
||||||
@@ -70,7 +71,7 @@ TEST_F(Detection_Test, detectTofAndAttMex) {
|
|||||||
{
|
{
|
||||||
EXPECT_DOUBLE_AE(0,result.tof[i])<<",index:"<<i;
|
EXPECT_DOUBLE_AE(0,result.tof[i])<<",index:"<<i;
|
||||||
EXPECT_DOUBLE_AE(sosvalue[i],result.sosValue[i])<<",index:"<<i;
|
EXPECT_DOUBLE_AE(sosvalue[i],result.sosValue[i])<<",index:"<<i;
|
||||||
EXPECT_TRUE(std::isnan(result.att[i]))<<",index:"<<i;
|
EXPECT_TRUE(result.att[i]==0)<<",index:"<<i;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -83,8 +84,8 @@ TEST_F(Detection_Test, detectTofAndAtt) {
|
|||||||
auto AscanRefBlock = m.read("AscanRefBlock");
|
auto AscanRefBlock = m.read("AscanRefBlock");
|
||||||
auto distBlock = m.read("dists");
|
auto distBlock = m.read("dists");
|
||||||
auto distBlockRef = m.read("distRefBlock");
|
auto distBlockRef = m.read("distRefBlock");
|
||||||
auto sosWaterBlock = m.read("waterTempBlock");
|
auto sosWaterBlock = Recon::temperatureToSoundSpeed(m.read("waterTempBlock"), "marczak");
|
||||||
auto sosWaterRefBlock = m.read("waterTempRefBlock");
|
auto sosWaterRefBlock = Recon::temperatureToSoundSpeed(m.read("waterTempRefBlock"), "marczak");
|
||||||
double expectedSOSWater = 1.511948131508464e+03;
|
double expectedSOSWater = 1.511948131508464e+03;
|
||||||
|
|
||||||
auto result = Recon::detectTofAndAtt(
|
auto result = Recon::detectTofAndAtt(
|
||||||
|
|||||||
Reference in New Issue
Block a user