Exemplo n.º 1
0
    def __init__(self,
                 dPupInMeters,
                 r0At500nm,
                 wavelenghtInMeters,
                 dPupInPixels=1024,
                 outerScaleInMeter=1e6):
        self._pupDiameterInMeters = dPupInMeters
        self._r0 = r0At500nm
        self._lambda = wavelenghtInMeters
        self._pupDiameterInPixels = dPupInPixels
        self._L0 = outerScaleInMeter

        self._tb = TurbulentPhase()
        self._pxSize = self._pupDiameterInMeters / self._pupDiameterInPixels
        self._spat_freqs = bfft.frequencies_norm_map(self._pupDiameterInPixels,
                                                     self._pxSize)
        self._dist = bfft.distances_norm_map(self._pupDiameterInPixels,
                                             self._pxSize)
        self._mapCenter = (np.asarray(self._dist.shape) / 2).astype(np.int)
        self._psd = self._tb.vonKarmanPowerSpectralDensity(
            self._r0, self._L0, self._spat_freqs)
        self._phaseAC = bfft.direct_transform(self._psd).real
        self._phaseSTF = 2 * (
            self._phaseAC[self._mapCenter[0], self._mapCenter[1]] -
            self._phaseAC)
        self._kolmSTFInRad2 = 6.88 * (
            self._dist / r0AtLambda(self._r0, self._lambda))**(5 / 3)
Exemplo n.º 2
0
 def testDirectTransformConstantMapOddSize(self):
     sz = 101
     sz2 = int(sz / 2)
     constantMap = np.ones((sz, sz))
     res = bfft.direct_transform(constantMap)
     self.assertEqual((sz, sz), res.shape)
     self.assertTrue(np.all(np.argwhere(res > 1e-10)[0] == (sz2, sz2)))
     self._checkParseval(constantMap, res)
Exemplo n.º 3
0
 def testDirectTransformSinusX(self):
     sizeInPoints = 500
     pixelSize = 0.2
     periodInLengthUnits = 4.0
     amplitude = 13.4
     phase = 0.8
     spatialMap = self._makeSinusMap(sizeInPoints, pixelSize, amplitude,
                                     periodInLengthUnits, phase)
     spectralMap = bfft.direct_transform(spatialMap)
     freqX = bfft.frequencies_x_map(sizeInPoints, pixelSize)
     freqY = bfft.frequencies_y_map(sizeInPoints, pixelSize)
     self.assertEqual((sizeInPoints, sizeInPoints), spectralMap.shape)
     self.assertEqual(
         1.0 / periodInLengthUnits,
         np.abs(freqX.flatten()[np.argmax(np.abs(spectralMap))]))
     self.assertEqual(
         0.0, np.abs(freqY.flatten()[np.argmax(np.abs(spectralMap))]))
     self._checkParseval(spatialMap, spectralMap)