Add ifftshift

This commit is contained in:
kradchen
2023-06-08 15:24:49 +08:00
parent eca0e77fcc
commit a0db3777d2
3 changed files with 38 additions and 4 deletions

View File

@@ -837,13 +837,30 @@ Matrix Aurora::ifft_symmetric(const Matrix &aMatrix,long length)
void Aurora::fftshift(Matrix &aMatrix){
int backwardLength = aMatrix.getDimSize(0)/2;
if (aMatrix.getDimSize(0)%2!=0)++backwardLength;
int forwardLength = aMatrix.getDimSize(0) - backwardLength;
double* buffer = malloc(forwardLength,true);
int valueStep = aMatrix.isComplex()?2:1;
for (int i = 0; i<aMatrix.getDimSize(1); ++i) {
double* dataPtr = aMatrix.getData()+aMatrix.getDimSize(0)*i*2;
cblas_dcopy(forwardLength*2, dataPtr+backwardLength*2, 1, buffer, 1);
cblas_dcopy(backwardLength*2, dataPtr, 1, dataPtr+forwardLength*2, 1);
cblas_dcopy(forwardLength*2, buffer, 1, dataPtr, 1);
double* dataPtr = aMatrix.getData()+aMatrix.getDimSize(0)*i*valueStep;
cblas_dcopy(forwardLength*valueStep, dataPtr+backwardLength*valueStep, 1, buffer, 1);
cblas_dcopy(backwardLength*valueStep, dataPtr, 1, dataPtr+forwardLength*valueStep, 1);
cblas_dcopy(forwardLength*valueStep, buffer, 1, dataPtr, 1);
}
Aurora::free(buffer);
}
void Aurora::ifftshift(Matrix &aMatrix){
int forwardLength= aMatrix.getDimSize(0)/2;
if (aMatrix.getDimSize(0)%2!=0)++forwardLength;
int backwardLength = aMatrix.getDimSize(0) - forwardLength;
double* buffer = malloc(forwardLength,true);
int valueStep = aMatrix.isComplex()?2:1;
for (int i = 0; i<aMatrix.getDimSize(1); ++i) {
double* dataPtr = aMatrix.getData()+aMatrix.getDimSize(0)*i*valueStep;
cblas_dcopy(forwardLength*valueStep, dataPtr+backwardLength*valueStep, 1, buffer, 1);
cblas_dcopy(backwardLength*valueStep, dataPtr, 1, dataPtr+forwardLength*valueStep, 1);
cblas_dcopy(forwardLength*valueStep, buffer, 1, dataPtr, 1);
}
Aurora::free(buffer);
}