Fix detectTofAndAtt and main log time
This commit is contained in:
@@ -151,7 +151,7 @@ namespace Recon {
|
||||
for (size_t i = 0; i < Ascan.getDimSize(1); i++)
|
||||
{
|
||||
startPos[i] = std::floor(std::max(tof[i]*sampleRate+offsetElectronicSamples,1.0));
|
||||
endPos[i] = std::ceil(std::min(sizeAscan[1], tof[i]*sampleRate+offsetElectronicSamples+detectionWindowATT));
|
||||
endPos[i] = std::ceil(std::min(sizeAscan[0], tof[i]*sampleRate+offsetElectronicSamples+detectionWindowATT));
|
||||
startPosRef[i] = std::floor(std::max( tof2[i],1.0));
|
||||
endPosRef[i] = std::ceil(std::min(sizeAscan[1], tof2[i]+detectionWindowATT));
|
||||
}
|
||||
@@ -194,7 +194,7 @@ namespace Recon {
|
||||
expectedSOSWater, offsetElectronicSamples, detectionWindowSOS,
|
||||
minSpeedOfSound, maxSpeedOfSound, gaussWindow);
|
||||
|
||||
diffStartSearch = timeResult1.startSearch - timeResult1.startSearch;
|
||||
diffStartSearch = timeResult1.startSearch - timeResult2.startSearch;
|
||||
}
|
||||
auto _AscanBlock = timeResult1.AscanBlockProcessed;
|
||||
auto _AscanRefBlock = timeResult2.AscanBlockProcessed;
|
||||
@@ -213,15 +213,17 @@ namespace Recon {
|
||||
|
||||
auto c1 = real(c_1_2);
|
||||
auto c = zeros(mxl + mxl + 1, c1.getDimSize(1));
|
||||
#pragma omp parallel for
|
||||
for (size_t i = 0; i < mxl; i++) {
|
||||
c(i, $) = c1(m2 - mxl + i, $);
|
||||
c(i + mxl, $) = c1(i, $);
|
||||
}
|
||||
c(mxl + mxl, $) = c1(mxl, $);
|
||||
c.setBlock(0, 0, mxl-1, c1.block(0, m2-mxl,m2-1));
|
||||
c.setBlock(0, mxl, mxl*2, c1.block(0, 0, mxl));
|
||||
// #pragma omp parallel for
|
||||
// for (size_t i = 0; i < mxl; i++) {
|
||||
// c(i, $) = c1(m2 - mxl + i, $);
|
||||
// c(i + mxl, $) = c1(i, $);
|
||||
// }
|
||||
// c(mxl + mxl, $) = c1(mxl, $);
|
||||
|
||||
auto shiftInSamples = zeros(1, c1.getDimSize(1));
|
||||
#pragma omp parallel for
|
||||
// #pragma omp parallel for
|
||||
for (size_t i = 0; i < c1.getDimSize(1); i++) {
|
||||
long rowID = 0, colID = 0;
|
||||
max(c($, i).toMatrix(), All, rowID, colID);
|
||||
@@ -248,15 +250,69 @@ namespace Recon {
|
||||
double offsetElectronic, int detectionWindowSOS, double minSpeedOfSound,
|
||||
double maxSpeedOfSound, bool gaussWindow)
|
||||
{
|
||||
auto result = detectTofVectorized(
|
||||
AscanBlock, AscanRefBlock, distBlock, distRefBlock, sosWaterBlock,
|
||||
sosWaterRefBlock, expectedSOSWater, useTimeWindowing,
|
||||
aScanReconstructionFrequency, offsetElectronic, detectionWindowSOS,
|
||||
minSpeedOfSound, maxSpeedOfSound, gaussWindow);
|
||||
auto tofRel = result.tof - distBlock / sosWaterBlock;
|
||||
auto sampleRate = aScanReconstructionFrequency;
|
||||
double offsetElectronicSamples = offsetElectronic * sampleRate;
|
||||
Matrix diffStartSearch;
|
||||
TimeWindowResult timeResult1;
|
||||
timeResult1.AscanBlockProcessed = AscanBlock;
|
||||
TimeWindowResult timeResult2;
|
||||
timeResult2.AscanBlockProcessed = AscanRefBlock;
|
||||
if (useTimeWindowing == 1) {
|
||||
timeResult1 = applyTimeWindowing(
|
||||
AscanBlock, sampleRate, distBlock, sosWaterBlock,
|
||||
expectedSOSWater, offsetElectronicSamples, detectionWindowSOS,
|
||||
minSpeedOfSound, maxSpeedOfSound, gaussWindow);
|
||||
timeResult2 = applyTimeWindowing(
|
||||
AscanRefBlock, sampleRate, distRefBlock, sosWaterRefBlock,
|
||||
expectedSOSWater, offsetElectronicSamples, detectionWindowSOS,
|
||||
minSpeedOfSound, maxSpeedOfSound, gaussWindow);
|
||||
|
||||
diffStartSearch = timeResult1.startSearch - timeResult2.startSearch;
|
||||
}
|
||||
auto _AscanBlock = timeResult1.AscanBlockProcessed;
|
||||
auto _AscanRefBlock = timeResult2.AscanBlockProcessed;
|
||||
|
||||
auto m = std::max(size(_AscanBlock, 1), size(_AscanRefBlock, 1));
|
||||
auto maxlag =
|
||||
std::max(size(_AscanBlock, 1), size(_AscanRefBlock, 1)) - 1;
|
||||
auto mxl = std::min(maxlag, m - 1);
|
||||
auto ceilLog2 = nextpow2(2 * m - 1);
|
||||
auto m2 = pow(2, ceilLog2);
|
||||
|
||||
auto x = fft(_AscanBlock, m2);
|
||||
auto y = fft(_AscanRefBlock, m2);
|
||||
auto c_1_1 = x * conj(y);
|
||||
auto c_1_2 = ifft(c_1_1);
|
||||
|
||||
auto c1 = real(c_1_2);
|
||||
auto c = zeros(mxl + mxl + 1, c1.getDimSize(1));
|
||||
c.setBlock(0, 0, mxl-1, c1.block(0, m2-mxl,m2-1));
|
||||
c.setBlock(0, mxl, mxl*2, c1.block(0, 0, mxl));
|
||||
// #pragma omp parallel for
|
||||
// for (size_t i = 0; i < mxl; i++) {
|
||||
// c(i, $) = c1(m2 - mxl + i, $);
|
||||
// c(i + mxl, $) = c1(i, $);
|
||||
// }
|
||||
// c(mxl + mxl, $) = c1(mxl, $);
|
||||
|
||||
auto shiftInSamples = zeros(1, c1.getDimSize(1));
|
||||
#pragma omp parallel for
|
||||
for (size_t i = 0; i < c1.getDimSize(1); i++) {
|
||||
long rowID = 0, colID = 0;
|
||||
max(c($, i).toMatrix(), All, rowID, colID);
|
||||
shiftInSamples[i] = -maxlag + colID + rowID;
|
||||
}
|
||||
if (useTimeWindowing) {
|
||||
shiftInSamples = shiftInSamples - diffStartSearch;
|
||||
}
|
||||
auto tof = shiftInSamples / sampleRate + distBlock / sosWaterBlock;
|
||||
auto sosValue = distBlock / tof;
|
||||
DetectResult result;
|
||||
result.sosValue = sosValue;
|
||||
auto tofRel = tof - distBlock / sosWaterBlock;
|
||||
result.att = detectAttVectorized(
|
||||
AscanBlock, AscanRefBlock, distRefBlock, sosWaterRefBlock,
|
||||
result.tof, aScanReconstructionFrequency, offsetElectronic,
|
||||
_AscanBlock, _AscanRefBlock, distRefBlock, sosWaterRefBlock,
|
||||
tof, aScanReconstructionFrequency, offsetElectronic,
|
||||
detectionWindowATT);
|
||||
result.tof = tofRel;
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user