Skip to content

Commit

Permalink
fix: remove DC offset if AQ_mod is qsim (#1804)
Browse files Browse the repository at this point in the history
  • Loading branch information
jobo322 committed Oct 13, 2022
1 parent bc1bd11 commit 135a072
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 5 deletions.
Expand Up @@ -2,7 +2,6 @@ import { xyReduce } from 'ml-spectra-processing';

import { Data1D } from '../../../../../data/types/data1d';
import { Data2D } from '../../../../../data/types/data2d';

import { calculateSanPlot } from '../../../../../data/utilities/calculateSanPlot';

export function processSnapPlot<T extends '1D' | '2D'>(
Expand Down
36 changes: 32 additions & 4 deletions src/data/data1d/filter1d/fft.ts
@@ -1,4 +1,4 @@
import { reimFFT, reimPhaseCorrection } from 'ml-spectra-processing';
import { reimFFT, reimPhaseCorrection, xMean } from 'ml-spectra-processing';

import { Datum1D } from '../../types/data1d/Datum1D';

Expand All @@ -21,21 +21,26 @@ export function apply(datum1D: Datum1D) {
(e) => e.name === 'digitalFilter' && e.flag,
);

const { data } = datum1D;
const data =
datum1D.meta.AQ_mod === 1
? removeDCOffset(datum1D, digitalFilterApplied)
: { ...datum1D.data };

if (data.x.length !== data.re.length || data.x.length !== data.im.length) {
throw new Error('The length of data should be equal');
} else if (!isPowerOfTwo(datum1D.data.x.length)) {
padDataToNextPowerOfTwo(datum1D, digitalFilterApplied);
}

Object.assign(datum1D.data, reimFFT(datum1D.data, { applyZeroShift: true }));
Object.assign(data, reimFFT(data, { applyZeroShift: true }));

if (digitalFilterApplied) {
let { digitalFilter = 0 } = datum1D.info;
let ph1 = (digitalFilter - Math.floor(digitalFilter)) * Math.PI * 2;
Object.assign(datum1D.data, reimPhaseCorrection(datum1D.data, 0, ph1));
Object.assign(data, reimPhaseCorrection(data, 0, ph1));
}

Object.assign(datum1D.data, data);
datum1D.data.x = generateXAxis(datum1D);
datum1D.info = { ...datum1D.info, isFid: false, isFt: true };
}
Expand Down Expand Up @@ -73,3 +78,26 @@ function generateXAxis(datum1D) {
function isPowerOfTwo(n) {
return n !== 0 && (n & (n - 1)) === 0;
}

function removeDCOffset(datum1D, digitalFilterApplied) {
let { digitalFilter = 0 } = digitalFilterApplied ? datum1D.info : {};
const data = { ...datum1D.data };
const nbPoints = data.re.length;
const newRe = new Float64Array(data.re);
const newIm = new Float64Array(data.im);
const averageRe = xMean(
data.re.slice((nbPoints * 0.75) >> 0, nbPoints - digitalFilter),
);
const averageIm = xMean(
data.im.slice((nbPoints * 0.75) >> 0, nbPoints - digitalFilter),
);
for (
let i = digitalFilterApplied ? 0 : digitalFilter;
i < nbPoints - digitalFilter;
i++
) {
newRe[i] -= averageRe;
newIm[i] -= averageIm;
}
return { x: data.x, re: newRe, im: newIm };
}

0 comments on commit 135a072

Please sign in to comment.