Add common to common folder

This commit is contained in:
kradchen
2023-05-08 10:13:51 +08:00
parent 5199974fcb
commit 6700a48d1b
2 changed files with 72 additions and 0 deletions

55
src/common/common.cpp Normal file
View File

@@ -0,0 +1,55 @@
#include "common.h"
#include <iostream>
#include "Function.h"
#include "Function1D.h"
#include "Function2D.h"
#include "Function3D.h"
#include "Matrix.h"
namespace Recon
{
Aurora::Matrix reconstructBandpasssubsampling(Aurora::Matrix aMatrix, double aAScanReconstructionFreq, double aSampleRate)
{
double downsamplingfactor = aAScanReconstructionFreq / aSampleRate;
double minimalExpectedAScanLength = 48;
int expectedAScanlengthDS = (int)std::ceil(minimalExpectedAScanLength/downsamplingfactor);
double expectedAScanLength = std::max(expectedAScanlengthDS*downsamplingfactor, aMatrix.getDimSize(0)*downsamplingfactor);
expectedAScanlengthDS = std::ceil(expectedAScanLength/downsamplingfactor);
double s1 = aAScanReconstructionFreq;
double f1Stride = s1 / (expectedAScanLength - 1);
double * f1Data = Aurora::malloc(expectedAScanLength);
auto f1 = Aurora::Matrix::New(f1Data,expectedAScanLength,1,1);
for (int i = 0; i<expectedAScanLength; ++i) {
f1Data[i] = i*f1Stride;
}
auto f2 = Aurora::Matrix::New(f1Data,expectedAScanLength,1,1);
auto Data2 = Aurora::zeros(expectedAScanLength,aMatrix.getDimSize(1));
auto datafft = Aurora::fft(aMatrix, expectedAScanlengthDS);
Aurora::fftshift(datafft);
datafft(expectedAScanlengthDS/2+1) = 0.0;
auto idx_l = (f1 > (aSampleRate/2)) *(f1 <= aSampleRate);
auto idx_r = (f1 > (aAScanReconstructionFreq-aSampleRate)) * (f1 <= (aAScanReconstructionFreq-aSampleRate/2));
if (Aurora::sum(idx_l).getScalar() == 0.0 || Aurora::sum(idx_r).getScalar() == 0.0){
std::cerr<<"downsampled data, you have to set AScanReconstructionFreq higher"<<std::endl;
return Aurora::Matrix();
}
if (datafft.getDimSize(0)/2 != idx_r.getDataSize())
{
std::cerr<<"error: Fourier resolution (->length) needs to be fixed by padding"<<std::endl;
return Aurora::Matrix();
}
//TODO:2代逻辑暂时不写了
//Code:
//for j = 1:size(Data, 2)
// Data2(idx_l(1:end-0), j) = (datafft(1:floor(size(datafft, 1)/2)-0, j));
// Data2(idx_r(1:end-0)+1, j) = (flipud(conj(datafft(1:(size(datafft, 1) / 2)-0, j))));
// end
// % in old version without scaling to downsamplingfactor!
// Data2 = ifft(Data2, [], 1);
return Aurora::Matrix();
}
}

17
src/common/common.h Normal file
View File

@@ -0,0 +1,17 @@
#ifndef RECON_COMMON_H
#define RECON_COMMON_H
#include "Matrix.h"
namespace Recon {
/**
* @brief 未完成该函数目前暂时只应用于2代设备
* @attention 未完成
* @param aMatrix
* @param aAScanReconstructionFreq
* @param SampleRate
* @return Aurora::Matrix
*/
Aurora::Matrix reconstructBandpasssubsampling(Aurora::Matrix aMatrix, double aAScanReconstructionFreq, double SampleRate);
}
#endif //RECON_COMMON_H