acoular 24.3__py3-none-any.whl → 24.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- acoular/__init__.py +119 -54
- acoular/calib.py +29 -38
- acoular/configuration.py +132 -82
- acoular/demo/__init__.py +10 -4
- acoular/demo/acoular_demo.py +73 -55
- acoular/environments.py +270 -264
- acoular/fastFuncs.py +366 -196
- acoular/fbeamform.py +1797 -1934
- acoular/grids.py +504 -548
- acoular/h5cache.py +74 -83
- acoular/h5files.py +159 -142
- acoular/internal.py +13 -14
- acoular/microphones.py +57 -53
- acoular/sdinput.py +57 -53
- acoular/signals.py +180 -178
- acoular/sources.py +920 -724
- acoular/spectra.py +353 -363
- acoular/tbeamform.py +416 -416
- acoular/tfastfuncs.py +180 -104
- acoular/tools/__init__.py +25 -0
- acoular/tools/aiaa.py +185 -0
- acoular/tools/helpers.py +189 -0
- acoular/tools/metrics.py +165 -0
- acoular/tprocess.py +1240 -1182
- acoular/traitsviews.py +513 -501
- acoular/trajectory.py +50 -52
- acoular/version.py +5 -6
- acoular/xml/minidsp_uma-16.xml +20 -0
- acoular/xml/{minidsp_uma16.xml → minidsp_uma-16_mirrored.xml} +3 -0
- {acoular-24.3.dist-info → acoular-24.7.dist-info}/METADATA +58 -39
- acoular-24.7.dist-info/RECORD +50 -0
- {acoular-24.3.dist-info → acoular-24.7.dist-info}/WHEEL +1 -1
- acoular-24.7.dist-info/licenses/LICENSE +28 -0
- acoular/fileimport.py +0 -380
- acoular/nidaqimport.py +0 -273
- acoular/tests/reference_data/BeamformerBase.npy +0 -0
- acoular/tests/reference_data/BeamformerBaseFalse1.npy +0 -0
- acoular/tests/reference_data/BeamformerBaseFalse2.npy +0 -0
- acoular/tests/reference_data/BeamformerBaseFalse3.npy +0 -0
- acoular/tests/reference_data/BeamformerBaseFalse4.npy +0 -0
- acoular/tests/reference_data/BeamformerBaseTrue1.npy +0 -0
- acoular/tests/reference_data/BeamformerBaseTrue2.npy +0 -0
- acoular/tests/reference_data/BeamformerBaseTrue3.npy +0 -0
- acoular/tests/reference_data/BeamformerBaseTrue4.npy +0 -0
- acoular/tests/reference_data/BeamformerCMFLassoLarsBIC.npy +0 -0
- acoular/tests/reference_data/BeamformerCMFNNLS.npy +0 -0
- acoular/tests/reference_data/BeamformerCapon.npy +0 -0
- acoular/tests/reference_data/BeamformerClean.npy +0 -0
- acoular/tests/reference_data/BeamformerCleansc.npy +0 -0
- acoular/tests/reference_data/BeamformerCleant.npy +0 -0
- acoular/tests/reference_data/BeamformerCleantSq.npy +0 -0
- acoular/tests/reference_data/BeamformerCleantSqTraj.npy +0 -0
- acoular/tests/reference_data/BeamformerCleantTraj.npy +0 -0
- acoular/tests/reference_data/BeamformerDamas.npy +0 -0
- acoular/tests/reference_data/BeamformerDamasPlus.npy +0 -0
- acoular/tests/reference_data/BeamformerEig.npy +0 -0
- acoular/tests/reference_data/BeamformerEigFalse1.npy +0 -0
- acoular/tests/reference_data/BeamformerEigFalse2.npy +0 -0
- acoular/tests/reference_data/BeamformerEigFalse3.npy +0 -0
- acoular/tests/reference_data/BeamformerEigFalse4.npy +0 -0
- acoular/tests/reference_data/BeamformerEigTrue1.npy +0 -0
- acoular/tests/reference_data/BeamformerEigTrue2.npy +0 -0
- acoular/tests/reference_data/BeamformerEigTrue3.npy +0 -0
- acoular/tests/reference_data/BeamformerEigTrue4.npy +0 -0
- acoular/tests/reference_data/BeamformerFunctional.npy +0 -0
- acoular/tests/reference_data/BeamformerGIB.npy +0 -0
- acoular/tests/reference_data/BeamformerGridlessOrth.npy +0 -0
- acoular/tests/reference_data/BeamformerMusic.npy +0 -0
- acoular/tests/reference_data/BeamformerOrth.npy +0 -0
- acoular/tests/reference_data/BeamformerSODIX.npy +0 -0
- acoular/tests/reference_data/BeamformerTime.npy +0 -0
- acoular/tests/reference_data/BeamformerTimeSq.npy +0 -0
- acoular/tests/reference_data/BeamformerTimeSqTraj.npy +0 -0
- acoular/tests/reference_data/BeamformerTimeTraj.npy +0 -0
- acoular/tests/reference_data/Environment.npy +0 -0
- acoular/tests/reference_data/Example1_numerical_values_testsum.h5 +0 -0
- acoular/tests/reference_data/FiltFiltOctave__.npy +0 -0
- acoular/tests/reference_data/FiltFiltOctave_band_100_0_fraction_Thirdoctave_.npy +0 -0
- acoular/tests/reference_data/FiltFreqWeight_weight_A_.npy +0 -0
- acoular/tests/reference_data/FiltFreqWeight_weight_C_.npy +0 -0
- acoular/tests/reference_data/FiltFreqWeight_weight_Z_.npy +0 -0
- acoular/tests/reference_data/FiltOctave__.npy +0 -0
- acoular/tests/reference_data/FiltOctave_band_100_0_fraction_Thirdoctave_.npy +0 -0
- acoular/tests/reference_data/Filter__.npy +0 -0
- acoular/tests/reference_data/GeneralFlowEnvironment.npy +0 -0
- acoular/tests/reference_data/OctaveFilterBank__.npy +0 -0
- acoular/tests/reference_data/OpenJet.npy +0 -0
- acoular/tests/reference_data/PointSource.npy +0 -0
- acoular/tests/reference_data/PowerSpectra_csm.npy +0 -0
- acoular/tests/reference_data/PowerSpectra_ev.npy +0 -0
- acoular/tests/reference_data/RotatingFlow.npy +0 -0
- acoular/tests/reference_data/SlotJet.npy +0 -0
- acoular/tests/reference_data/TimeAverage__.npy +0 -0
- acoular/tests/reference_data/TimeCumAverage__.npy +0 -0
- acoular/tests/reference_data/TimeExpAverage_weight_F_.npy +0 -0
- acoular/tests/reference_data/TimeExpAverage_weight_I_.npy +0 -0
- acoular/tests/reference_data/TimeExpAverage_weight_S_.npy +0 -0
- acoular/tests/reference_data/TimeInOut__.npy +0 -0
- acoular/tests/reference_data/TimePower__.npy +0 -0
- acoular/tests/reference_data/TimeReverse__.npy +0 -0
- acoular/tests/reference_data/UniformFlowEnvironment.npy +0 -0
- acoular/tests/reference_data/beamformer_traj_time_data.h5 +0 -0
- acoular/tests/run_tests.sh +0 -18
- acoular/tests/run_tests_osx.sh +0 -16
- acoular/tests/test.npy +0 -0
- acoular/tests/test_beamformer_results.py +0 -213
- acoular/tests/test_classes.py +0 -60
- acoular/tests/test_digest.py +0 -125
- acoular/tests/test_environments.py +0 -73
- acoular/tests/test_example1.py +0 -124
- acoular/tests/test_grid.py +0 -92
- acoular/tests/test_integrate.py +0 -102
- acoular/tests/test_signals.py +0 -60
- acoular/tests/test_sources.py +0 -65
- acoular/tests/test_spectra.py +0 -38
- acoular/tests/test_timecache.py +0 -35
- acoular/tests/test_tprocess.py +0 -90
- acoular/tests/test_traj_beamformer_results.py +0 -164
- acoular/tests/unsupported/SpeedComparison/OvernightTestcasesBeamformer_nMics32_nGridPoints100_nFreqs4_nTrials10.png +0 -0
- acoular/tests/unsupported/SpeedComparison/cythonBeamformer.pyx +0 -237
- acoular/tests/unsupported/SpeedComparison/mainForCython.py +0 -103
- acoular/tests/unsupported/SpeedComparison/mainForParallelJit.py +0 -143
- acoular/tests/unsupported/SpeedComparison/setupCythonOpenMP.py +0 -63
- acoular/tests/unsupported/SpeedComparison/sharedFunctions.py +0 -153
- acoular/tests/unsupported/SpeedComparison/timeOverNMics_AllImportantMethods.png +0 -0
- acoular/tests/unsupported/SpeedComparison/timeOverNMics_faverage.png +0 -0
- acoular/tests/unsupported/SpeedComparison/vglOptimierungFAverage.py +0 -204
- acoular/tests/unsupported/SpeedComparison/vglOptimierungGaussSeidel.py +0 -182
- acoular/tests/unsupported/SpeedComparison/vglOptimierungR_BEAMFULL_INVERSE.py +0 -764
- acoular/tests/unsupported/SpeedComparison/vglOptimierungR_BEAM_OS.py +0 -231
- acoular/tests/unsupported/SpeedComparison/whatsFastestWayFor_absASquared.py +0 -48
- acoular/tests/unsupported/functionalBeamformer.py +0 -123
- acoular/tests/unsupported/precisionTest.py +0 -153
- acoular/tests/unsupported/validationOfBeamformerFuncsPOSTAcoularIntegration.py +0 -254
- acoular/tests/unsupported/validationOfBeamformerFuncsPREeAcoularIntegration.py +0 -531
- acoular/tools.py +0 -422
- acoular-24.3.dist-info/RECORD +0 -148
- acoular-24.3.dist-info/licenses/LICENSE +0 -29
- {acoular-24.3.dist-info → acoular-24.7.dist-info}/licenses/AUTHORS.rst +0 -0
|
@@ -1,531 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python2
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
"""
|
|
4
|
-
This script is used for Validation of the new numba version of the old 'beamformer.cpp'.
|
|
5
|
-
This is the pre-acoular integration check.
|
|
6
|
-
|
|
7
|
-
Essentially the NUMBA versions are checked againts the old WEAVE versions AND
|
|
8
|
-
against NUMPY code (which is much clearer to varify with the bare eye).
|
|
9
|
-
|
|
10
|
-
This script needs the 'fastFuncs.py' with all the NUMBA optimized code and the
|
|
11
|
-
'beamformer.so' with all the WEAVE code in its directory.
|
|
12
|
-
--> Only runs under python=2
|
|
13
|
-
|
|
14
|
-
Created on Tue Aug 22 12:41:50 2017
|
|
15
|
-
|
|
16
|
-
@author: tomgensch
|
|
17
|
-
"""
|
|
18
|
-
import numpy as np
|
|
19
|
-
import time as tm
|
|
20
|
-
|
|
21
|
-
import beamformer # the old weave benchmark
|
|
22
|
-
import fastFuncs as beamNew # The new module
|
|
23
|
-
|
|
24
|
-
def vectorized(csm, e, h, r0, rm, kj, normalizeFactor):
|
|
25
|
-
nFreqs = csm.shape[0]
|
|
26
|
-
nGridPoints = r0.shape[0]
|
|
27
|
-
beamformOutput = np.zeros((nFreqs, nGridPoints), np.complex128)
|
|
28
|
-
for cntFreqs in xrange(nFreqs):
|
|
29
|
-
for cntGrid in xrange(nGridPoints):
|
|
30
|
-
steeringVector = np.exp(-1j * kj[cntFreqs].imag * (rm[cntGrid, :] - r0[cntGrid]))
|
|
31
|
-
beamformOutput[cntFreqs, cntGrid] = np.inner(np.inner(csm[cntFreqs, :, :], steeringVector), steeringVector.conj())
|
|
32
|
-
return beamformOutput.real / normalizeFactor
|
|
33
|
-
|
|
34
|
-
def beamformerRef(csm, steer):
|
|
35
|
-
nFreqs = csm.shape[0]
|
|
36
|
-
nGridPoints = r0.shape[0]
|
|
37
|
-
beamformOutput = np.zeros((nFreqs, nGridPoints), np.complex128)
|
|
38
|
-
for cntFreqs in xrange(nFreqs):
|
|
39
|
-
for cntGrid in xrange(nGridPoints):
|
|
40
|
-
beamformOutput[cntFreqs, cntGrid] = np.inner(np.inner(csm[cntFreqs, :, :], steer[cntFreqs, cntGrid, :]), steer[cntFreqs, cntGrid, :].conj())
|
|
41
|
-
return beamformOutput.real
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
nFreqs = 1
|
|
45
|
-
nMics = 56
|
|
46
|
-
nGridPoints = 100#1521
|
|
47
|
-
|
|
48
|
-
csm = np.random.rand(nFreqs, nMics, nMics) + 1j*np.random.rand(nFreqs, nMics, nMics) # cross spectral matrix
|
|
49
|
-
for cntFreqs in range(nFreqs):
|
|
50
|
-
csm[cntFreqs, :, :] += csm[cntFreqs, :, :].T.conj() # make CSM hermetical
|
|
51
|
-
csmRemovedDiag = np.array(csm)
|
|
52
|
-
[np.fill_diagonal(csmRemovedDiag[cntFreq, :, :], 0.0) for cntFreq in range(csmRemovedDiag.shape[0])]
|
|
53
|
-
|
|
54
|
-
e = np.random.rand(nMics) + 1j*np.random.rand(nMics) # has no usage
|
|
55
|
-
h = np.zeros((nFreqs, nGridPoints)) # results are stored here, if function has no return value
|
|
56
|
-
r0 = np.random.rand(nGridPoints) # distance between gridpoints and middle of array
|
|
57
|
-
rm = np.random.rand(nGridPoints, nMics) # distance between gridpoints and all mics in the array
|
|
58
|
-
kj = np.zeros(nFreqs) + 1j*np.random.rand(nFreqs) # complex
|
|
59
|
-
eigVal, eigVec = np.linalg.eigh(csm)
|
|
60
|
-
eigValTrans, eigVecTrans = np.linalg.eigh(csm.transpose(0,2,1)) # of transpose CSM, to compare with old weave mistake
|
|
61
|
-
indLow = 0
|
|
62
|
-
indHigh = nMics
|
|
63
|
-
|
|
64
|
-
#%% Validate the PSF-formulations - Against Numpy
|
|
65
|
-
steerFormulation1 = np.zeros((nFreqs, nGridPoints, nMics), np.complex128)
|
|
66
|
-
steerFormulation2 = np.zeros((nFreqs, nGridPoints, nMics), np.complex128)
|
|
67
|
-
steerFormulation3 = np.zeros((nFreqs, nGridPoints, nMics), np.complex128)
|
|
68
|
-
steerFormulation4 = np.zeros((nFreqs, nGridPoints, nMics), np.complex128)
|
|
69
|
-
steerFormulation1normalized = np.zeros((nFreqs, nGridPoints, nMics), np.complex128)
|
|
70
|
-
steerFormulation2normalized = np.zeros((nFreqs, nGridPoints, nMics), np.complex128)
|
|
71
|
-
steerFormulation3normalized = np.zeros((nFreqs, nGridPoints, nMics), np.complex128)
|
|
72
|
-
steerFormulation4normalized = np.zeros((nFreqs, nGridPoints, nMics), np.complex128)
|
|
73
|
-
transfer = np.zeros((nFreqs, nGridPoints, nMics), np.complex128)
|
|
74
|
-
csmPsf = np.zeros((nFreqs, nMics, nMics), np.complex128)
|
|
75
|
-
|
|
76
|
-
indSource = [1, 3]
|
|
77
|
-
indSourceCalcWithNumpy = 0
|
|
78
|
-
|
|
79
|
-
for cntFreqs in xrange(nFreqs):
|
|
80
|
-
for cntGrid in xrange(nGridPoints):
|
|
81
|
-
steerFormulation1[cntFreqs, cntGrid, :] = np.exp(-1j * kj[cntFreqs].imag * (rm[cntGrid, :] - r0[cntGrid])) / nMics
|
|
82
|
-
steerFormulation2[cntFreqs, cntGrid, :] = np.exp(-1j * kj[cntFreqs].imag * (rm[cntGrid, :] - r0[cntGrid])) * rm[cntGrid, :] / r0[cntGrid] / nMics
|
|
83
|
-
steerFormulation3[cntFreqs, cntGrid, :] = np.exp(-1j * kj[cntFreqs].imag * (rm[cntGrid, :] - r0[cntGrid])) / rm[cntGrid, :] / r0[cntGrid] / np.sum(1.0 / rm[cntGrid, :]**2)
|
|
84
|
-
steerFormulation4[cntFreqs, cntGrid, :] = np.exp(-1j * kj[cntFreqs].imag * (rm[cntGrid, :] - r0[cntGrid])) / rm[cntGrid, :] / np.sqrt(nMics * np.sum(1.0 / rm[cntGrid, :]**2))
|
|
85
|
-
|
|
86
|
-
steerFormulation1normalized[cntFreqs, cntGrid, :] = steerFormulation1[cntFreqs, cntGrid, :] / np.sqrt(np.vdot(steerFormulation1[cntFreqs, cntGrid, :], steerFormulation1[cntFreqs, cntGrid, :]))
|
|
87
|
-
steerFormulation2normalized[cntFreqs, cntGrid, :] = steerFormulation2[cntFreqs, cntGrid, :] / np.sqrt(np.vdot(steerFormulation2[cntFreqs, cntGrid, :], steerFormulation2[cntFreqs, cntGrid, :]))
|
|
88
|
-
steerFormulation3normalized[cntFreqs, cntGrid, :] = steerFormulation3[cntFreqs, cntGrid, :] / np.sqrt(np.vdot(steerFormulation3[cntFreqs, cntGrid, :], steerFormulation3[cntFreqs, cntGrid, :]))
|
|
89
|
-
steerFormulation4normalized[cntFreqs, cntGrid, :] = steerFormulation4[cntFreqs, cntGrid, :] / np.sqrt(np.vdot(steerFormulation4[cntFreqs, cntGrid, :], steerFormulation4[cntFreqs, cntGrid, :]))
|
|
90
|
-
|
|
91
|
-
transfer[cntFreqs, cntGrid, :] = np.exp(-1j * kj[cntFreqs].imag * (rm[cntGrid, :] - r0[cntGrid])) * r0[cntGrid] / rm[cntGrid, :]
|
|
92
|
-
csmPsf[cntFreqs, :] = np.outer(transfer[cntFreqs, indSource[indSourceCalcWithNumpy], :], transfer[cntFreqs, indSource[indSourceCalcWithNumpy], :].conj())
|
|
93
|
-
|
|
94
|
-
psf1 = beamNew.calcPointSpreadFunction(1, (r0, rm, kj, indSource))[:, :, indSourceCalcWithNumpy]
|
|
95
|
-
psf1Ref = beamformerRef(csmPsf, steerFormulation1)
|
|
96
|
-
relDiff = (psf1 - psf1Ref) / (psf1 + psf1Ref) * 2
|
|
97
|
-
psf1DiffNumpy = np.amax(np.amax(relDiff, 1), 0)
|
|
98
|
-
|
|
99
|
-
psf2 = beamNew.calcPointSpreadFunction(2, (r0, rm, kj, indSource))[:, :, indSourceCalcWithNumpy]
|
|
100
|
-
psf2Ref = beamformerRef(csmPsf, steerFormulation2)
|
|
101
|
-
relDiff = (psf2 - psf2Ref) / (psf2 + psf2Ref) * 2
|
|
102
|
-
psf2DiffNumpy = np.amax(np.amax(relDiff, 1), 0)
|
|
103
|
-
|
|
104
|
-
psf3 = beamNew.calcPointSpreadFunction(3, (r0, rm, kj, indSource))[:, :, indSourceCalcWithNumpy]
|
|
105
|
-
psf3Ref = beamformerRef(csmPsf, steerFormulation3)
|
|
106
|
-
relDiff = (psf3 - psf3Ref) / (psf3 + psf3Ref) * 2
|
|
107
|
-
psf3DiffNumpy = np.amax(np.amax(relDiff, 1), 0)
|
|
108
|
-
|
|
109
|
-
psf4 = beamNew.calcPointSpreadFunction(4, (r0, rm, kj, indSource))[:, :, indSourceCalcWithNumpy]
|
|
110
|
-
psf4Ref = beamformerRef(csmPsf, steerFormulation4)
|
|
111
|
-
relDiff = (psf4 - psf4Ref) / (psf4 + psf4Ref) * 2
|
|
112
|
-
psf4DiffNumpy = np.amax(np.amax(relDiff, 1), 0)
|
|
113
|
-
|
|
114
|
-
### --> looks good, except for formulation 4, where there is a known mistake (see Issue #5 in gitlab)
|
|
115
|
-
|
|
116
|
-
#%% Validate the PSF-formulations - Against Weave
|
|
117
|
-
|
|
118
|
-
indSource = [0, 42, 80]
|
|
119
|
-
hPSF = np.zeros((nGridPoints, len(indSource)), np.float64)
|
|
120
|
-
|
|
121
|
-
psf1 = beamNew.calcPointSpreadFunction(1, (r0, rm, kj, indSource))
|
|
122
|
-
beamformer.r_beam_psf1(hPSF, r0, r0[indSource], rm, rm[indSource, :], kj[0])
|
|
123
|
-
relDiff = (psf1[0,:,:] - hPSF) / (psf1[0,:,:] + hPSF) * 2
|
|
124
|
-
psf1DiffWeave = np.amax(np.amax(relDiff, 0), 0)
|
|
125
|
-
|
|
126
|
-
psf2 = beamNew.calcPointSpreadFunction(2, (r0, rm, kj, indSource))
|
|
127
|
-
beamformer.r_beam_psf2(hPSF, r0, r0[indSource], rm, rm[indSource, :], kj[0])
|
|
128
|
-
relDiff = (psf2[0,:,:] - hPSF) / (psf2[0,:,:] + hPSF) * 2
|
|
129
|
-
psf2DiffWeave = np.amax(np.amax(relDiff, 0), 0)
|
|
130
|
-
|
|
131
|
-
psf3 = beamNew.calcPointSpreadFunction(3, (r0, rm, kj, indSource))
|
|
132
|
-
beamformer.r_beam_psf3(hPSF, r0, r0[indSource], rm, rm[indSource, :], kj[0])
|
|
133
|
-
relDiff = (psf3[0,:,:] - hPSF) / (psf3[0,:,:] + hPSF) * 2
|
|
134
|
-
psf3DiffWeave = np.amax(np.amax(relDiff, 0), 0)
|
|
135
|
-
|
|
136
|
-
psf4 = beamNew.calcPointSpreadFunction(4, (r0, rm, kj, indSource))
|
|
137
|
-
beamformer.r_beam_psf4(hPSF, r0, r0[indSource], rm, rm[indSource, :], kj[0])
|
|
138
|
-
relDiff = (psf4[0,:,:] - hPSF) / (psf4[0,:,:] + hPSF) * 2
|
|
139
|
-
psf4DiffWeave = np.amax(np.amax(relDiff, 0), 0)
|
|
140
|
-
|
|
141
|
-
### --> looks good, but this means that at the moment there is a mistake in formulation 4 (see comment in last section)
|
|
142
|
-
|
|
143
|
-
#%% PSF - runtime comparison between weave and numba
|
|
144
|
-
t0 = tm.time()
|
|
145
|
-
psf1 = beamNew.calcPointSpreadFunction(1, (r0, rm, kj, indSource))
|
|
146
|
-
tNumba = tm.time() - t0
|
|
147
|
-
|
|
148
|
-
t0 = tm.time()
|
|
149
|
-
for cntFreqs in xrange(len(kj)):
|
|
150
|
-
beamformer.r_beam_psf1(hPSF, r0, r0[indSource], rm, rm[indSource, :], kj[cntFreqs])
|
|
151
|
-
tWeave = tm.time() - t0
|
|
152
|
-
|
|
153
|
-
print('tNumba: %s' %tNumba)
|
|
154
|
-
print('tWeave: %s' %tWeave)
|
|
155
|
-
|
|
156
|
-
#%% new beamformer - against numpy
|
|
157
|
-
indLow = 0
|
|
158
|
-
indHigh = nMics # when all eigenvalues are taken into account --> eigVal beamformer and conventional beamformer should give same reults
|
|
159
|
-
|
|
160
|
-
normFull = 1.0
|
|
161
|
-
normDiag = np.float64(nMics) / np.float64(nMics - 1)
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
comp1Voll, dummy = beamNew.beamformerFreq(False, 1, False, normFull, (r0, rm, kj, csm))
|
|
165
|
-
comp1VollRefNumpy = beamformerRef(csm, steerFormulation1)
|
|
166
|
-
relDiff = (comp1Voll - comp1VollRefNumpy) / (comp1Voll + comp1VollRefNumpy) * 2
|
|
167
|
-
error1VollAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
168
|
-
|
|
169
|
-
comp1Diag, dummy = beamNew.beamformerFreq(False, 1, True, normDiag, (r0, rm, kj, csm))
|
|
170
|
-
comp1DiagRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation1) * normDiag
|
|
171
|
-
relDiff = (comp1Diag - comp1DiagRefNumpy) / (comp1Diag + comp1DiagRefNumpy) * 2
|
|
172
|
-
error1DiagAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
173
|
-
|
|
174
|
-
comp1VollEig, dummy = beamNew.beamformerFreq(True, 1, False, normFull, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
175
|
-
comp1VollEigRefNumpy = beamformerRef(csm, steerFormulation1)
|
|
176
|
-
relDiff = (comp1VollEig - comp1VollEigRefNumpy) / (comp1VollEig + comp1VollEigRefNumpy) * 2
|
|
177
|
-
error1VollEigAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
178
|
-
|
|
179
|
-
comp1DiagEig, dummy = beamNew.beamformerFreq(True, 1, True, normDiag, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
180
|
-
comp1DiagEigRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation1) * normDiag
|
|
181
|
-
relDiff = (comp1DiagEig - comp1DiagEigRefNumpy) / (comp1DiagEig + comp1DiagEigRefNumpy) * 2
|
|
182
|
-
error1DiagEigAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
comp2Voll, dummy = beamNew.beamformerFreq(False, 2, False, normFull, (r0, rm, kj, csm))
|
|
187
|
-
comp2VollRefNumpy = beamformerRef(csm, steerFormulation2)
|
|
188
|
-
relDiff = (comp2Voll - comp2VollRefNumpy) / (comp2Voll + comp2VollRefNumpy) * 2
|
|
189
|
-
error2VollAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
190
|
-
|
|
191
|
-
comp2Diag, dummy = beamNew.beamformerFreq(False, 2, True, normDiag, (r0, rm, kj, csm))
|
|
192
|
-
comp2DiagRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation2) * normDiag
|
|
193
|
-
relDiff = (comp2Diag - comp2DiagRefNumpy) / (comp2Diag + comp2DiagRefNumpy) * 2
|
|
194
|
-
error2DiagAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
195
|
-
|
|
196
|
-
comp2VollEig, dummy = beamNew.beamformerFreq(True, 2, False, normFull, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
197
|
-
comp2VollEigRefNumpy = beamformerRef(csm, steerFormulation2)
|
|
198
|
-
relDiff = (comp2VollEig - comp2VollEigRefNumpy) / (comp2VollEig + comp2VollEigRefNumpy) * 2
|
|
199
|
-
error2VollEigAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
200
|
-
|
|
201
|
-
comp2DiagEig, dummy = beamNew.beamformerFreq(True, 2, True, normDiag, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
202
|
-
comp2DiagEigRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation2) * normDiag
|
|
203
|
-
relDiff = (comp2DiagEig - comp2DiagEigRefNumpy) / (comp2DiagEig + comp2DiagEigRefNumpy) * 2
|
|
204
|
-
error2DiagEigAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
comp3Voll, dummy = beamNew.beamformerFreq(False, 3, False, normFull, (r0, rm, kj, csm))
|
|
209
|
-
comp3VollRefNumpy = beamformerRef(csm, steerFormulation3)
|
|
210
|
-
relDiff = (comp3Voll - comp3VollRefNumpy) / (comp3Voll + comp3VollRefNumpy) * 2
|
|
211
|
-
error3VollAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
212
|
-
|
|
213
|
-
comp3Diag, dummy = beamNew.beamformerFreq(False, 3, True, normDiag, (r0, rm, kj, csm))
|
|
214
|
-
comp3DiagRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation3) * normDiag
|
|
215
|
-
relDiff = (comp3Diag - comp3DiagRefNumpy) / (comp3Diag + comp3DiagRefNumpy) * 2
|
|
216
|
-
error3DiagAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
217
|
-
|
|
218
|
-
comp3VollEig, dummy = beamNew.beamformerFreq(True, 3, False, normFull, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
219
|
-
comp3VollEigRefNumpy = beamformerRef(csm, steerFormulation3)
|
|
220
|
-
relDiff = (comp3VollEig - comp3VollEigRefNumpy) / (comp3VollEig + comp3VollEigRefNumpy) * 2
|
|
221
|
-
error3VollEigAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
222
|
-
|
|
223
|
-
comp3DiagEig, dummy = beamNew.beamformerFreq(True, 3, True, normDiag, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
224
|
-
comp3DiagEigRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation3) * normDiag
|
|
225
|
-
relDiff = (comp3DiagEig - comp3DiagEigRefNumpy) / (comp3DiagEig + comp3DiagEigRefNumpy) * 2
|
|
226
|
-
error3DiagEigAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
comp4Voll, dummy = beamNew.beamformerFreq(False, 4, False, normFull, (r0, rm, kj, csm))
|
|
231
|
-
comp4VollRefNumpy = beamformerRef(csm, steerFormulation4)
|
|
232
|
-
relDiff = (comp4Voll - comp4VollRefNumpy) / (comp4Voll + comp4VollRefNumpy) * 2
|
|
233
|
-
error4VollAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
234
|
-
|
|
235
|
-
comp4Diag, dummy = beamNew.beamformerFreq(False, 4, True, normDiag, (r0, rm, kj, csm))
|
|
236
|
-
comp4DiagRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation4) * normDiag
|
|
237
|
-
relDiff = (comp4Diag - comp4DiagRefNumpy) / (comp4Diag + comp4DiagRefNumpy) * 2
|
|
238
|
-
error4DiagAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
239
|
-
|
|
240
|
-
comp4VollEig, dummy = beamNew.beamformerFreq(True, 4, False, normFull, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
241
|
-
comp4VollEigRefNumpy = beamformerRef(csm, steerFormulation4)
|
|
242
|
-
relDiff = (comp4VollEig - comp4VollEigRefNumpy) / (comp4VollEig + comp4VollEigRefNumpy) * 2
|
|
243
|
-
error4VollEigAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
244
|
-
|
|
245
|
-
comp4DiagEig, dummy = beamNew.beamformerFreq(True, 4, True, normDiag, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
246
|
-
comp4DiagEigRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation4) * normDiag
|
|
247
|
-
relDiff = (comp4DiagEig - comp4DiagEigRefNumpy) / (comp4DiagEig + comp4DiagEigRefNumpy) * 2
|
|
248
|
-
error4DiagEigAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
compSpecificVoll, dummy = beamNew.beamformerFreq(False, 'custom', False, normFull, (steerFormulation4, csm))
|
|
253
|
-
compSpecificVollRefNumpy = beamformerRef(csm, steerFormulation4)
|
|
254
|
-
relDiff = (compSpecificVoll - compSpecificVollRefNumpy) / (compSpecificVoll + compSpecificVollRefNumpy) * 2
|
|
255
|
-
errorSpecificVollAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
256
|
-
|
|
257
|
-
compSpecificDiag, dummy = beamNew.beamformerFreq(False, 'custom', True, normDiag, (steerFormulation4, csm))
|
|
258
|
-
compSpecificDiagRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation4) * normDiag
|
|
259
|
-
relDiff = (compSpecificDiag - compSpecificDiagRefNumpy) / (compSpecificDiag + compSpecificDiagRefNumpy) * 2
|
|
260
|
-
errorSpecificDiagAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
261
|
-
|
|
262
|
-
compSpecificVollEig, dummy = beamNew.beamformerFreq(True, 'custom', False, normFull, (steerFormulation4, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
263
|
-
compSpecificVollEigRefNumpy = beamformerRef(csm, steerFormulation4)
|
|
264
|
-
relDiff = (compSpecificVollEig - compSpecificVollEigRefNumpy) / (compSpecificVollEig + compSpecificVollEigRefNumpy) * 2
|
|
265
|
-
errorSpecificVollEigAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
266
|
-
|
|
267
|
-
compSpecificDiagEig, dummy = beamNew.beamformerFreq(True, 'custom', True, normDiag, (steerFormulation4, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
268
|
-
compSpecificDiagEigRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation4) * normDiag
|
|
269
|
-
relDiff = (compSpecificDiagEig - compSpecificDiagEigRefNumpy) / (compSpecificDiagEig + compSpecificDiagEigRefNumpy) * 2
|
|
270
|
-
errorSpecificDiagEigAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
## now check the normalization of steering vector functionality
|
|
278
|
-
|
|
279
|
-
comp1VollNormalizedSteer, steerNorm = beamNew.beamformerFreq(False, 1, False, normFull, (r0, rm, kj, csm))
|
|
280
|
-
comp1VollNormalizedSteer /= steerNorm
|
|
281
|
-
comp1VollNormalizedSteerRefNumpy = beamformerRef(csm, steerFormulation1normalized)
|
|
282
|
-
relDiff = (comp1VollNormalizedSteer - comp1VollNormalizedSteerRefNumpy) / (comp1VollNormalizedSteer + comp1VollNormalizedSteerRefNumpy) * 2
|
|
283
|
-
error1VollNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
284
|
-
|
|
285
|
-
comp1DiagNormalizedSteer, steerNorm = beamNew.beamformerFreq(False, 1, True, normDiag, (r0, rm, kj, csm))
|
|
286
|
-
comp1DiagNormalizedSteer /= steerNorm
|
|
287
|
-
comp1DiagNormalizedSteerRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation1normalized) * normDiag
|
|
288
|
-
relDiff = (comp1DiagNormalizedSteer - comp1DiagNormalizedSteerRefNumpy) / (comp1DiagNormalizedSteer + comp1DiagNormalizedSteerRefNumpy) * 2
|
|
289
|
-
error1DiagNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
290
|
-
|
|
291
|
-
comp1VollEigNormalizedSteer, steerNorm = beamNew.beamformerFreq(True, 1, False, normFull, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
292
|
-
comp1VollEigNormalizedSteer /= steerNorm
|
|
293
|
-
comp1VollEigNormalizedSteerRefNumpy = beamformerRef(csm, steerFormulation1normalized)
|
|
294
|
-
relDiff = (comp1VollEigNormalizedSteer - comp1VollEigNormalizedSteerRefNumpy) / (comp1VollEigNormalizedSteer + comp1VollEigNormalizedSteerRefNumpy) * 2
|
|
295
|
-
error1VollEigNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
296
|
-
|
|
297
|
-
comp1DiagEigNormalizedSteer, steerNorm = beamNew.beamformerFreq(True, 1, True, normDiag, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
298
|
-
comp1DiagEigNormalizedSteer /= steerNorm
|
|
299
|
-
comp1DiagEigNormalizedSteerRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation1normalized) * normDiag
|
|
300
|
-
relDiff = (comp1DiagEigNormalizedSteer - comp1DiagEigNormalizedSteerRefNumpy) / (comp1DiagEigNormalizedSteer + comp1DiagEigNormalizedSteerRefNumpy) * 2
|
|
301
|
-
error1DiagEigNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
comp2VollNormalizedSteer, steerNorm = beamNew.beamformerFreq(False, 2, False, normFull, (r0, rm, kj, csm))
|
|
306
|
-
comp2VollNormalizedSteer /= steerNorm
|
|
307
|
-
comp2VollNormalizedSteerRefNumpy = beamformerRef(csm, steerFormulation2normalized)
|
|
308
|
-
relDiff = (comp2VollNormalizedSteer - comp2VollNormalizedSteerRefNumpy) / (comp2VollNormalizedSteer + comp2VollNormalizedSteerRefNumpy) * 2
|
|
309
|
-
error2VollNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
310
|
-
|
|
311
|
-
comp2DiagNormalizedSteer, steerNorm = beamNew.beamformerFreq(False, 2, True, normDiag, (r0, rm, kj, csm))
|
|
312
|
-
comp2DiagNormalizedSteer /= steerNorm
|
|
313
|
-
comp2DiagNormalizedSteerRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation2normalized) * normDiag
|
|
314
|
-
relDiff = (comp2DiagNormalizedSteer - comp2DiagNormalizedSteerRefNumpy) / (comp2DiagNormalizedSteer + comp2DiagNormalizedSteerRefNumpy) * 2
|
|
315
|
-
error2DiagNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
316
|
-
|
|
317
|
-
comp2VollEigNormalizedSteer, steerNorm = beamNew.beamformerFreq(True, 2, False, normFull, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
318
|
-
comp2VollEigNormalizedSteer /= steerNorm
|
|
319
|
-
comp2VollEigNormalizedSteerRefNumpy = beamformerRef(csm, steerFormulation2normalized)
|
|
320
|
-
relDiff = (comp2VollEigNormalizedSteer - comp2VollEigNormalizedSteerRefNumpy) / (comp2VollEigNormalizedSteer + comp2VollEigNormalizedSteerRefNumpy) * 2
|
|
321
|
-
error2VollEigNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
322
|
-
|
|
323
|
-
comp2DiagEigNormalizedSteer, steerNorm = beamNew.beamformerFreq(True, 2, True, normDiag, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
324
|
-
comp2DiagEigNormalizedSteer /= steerNorm
|
|
325
|
-
comp2DiagEigNormalizedSteerRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation2normalized) * normDiag
|
|
326
|
-
relDiff = (comp2DiagEigNormalizedSteer - comp2DiagEigNormalizedSteerRefNumpy) / (comp2DiagEigNormalizedSteer + comp2DiagEigNormalizedSteerRefNumpy) * 2
|
|
327
|
-
error2DiagEigNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
comp3VollNormalizedSteer, steerNorm = beamNew.beamformerFreq(False, 3, False, normFull, (r0, rm, kj, csm))
|
|
332
|
-
comp3VollNormalizedSteer /= steerNorm
|
|
333
|
-
comp3VollNormalizedSteerRefNumpy = beamformerRef(csm, steerFormulation3normalized)
|
|
334
|
-
relDiff = (comp3VollNormalizedSteer - comp3VollNormalizedSteerRefNumpy) / (comp3VollNormalizedSteer + comp3VollNormalizedSteerRefNumpy) * 2
|
|
335
|
-
error3VollNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
336
|
-
|
|
337
|
-
comp3DiagNormalizedSteer, steerNorm = beamNew.beamformerFreq(False, 3, True, normDiag, (r0, rm, kj, csm))
|
|
338
|
-
comp3DiagNormalizedSteer /= steerNorm
|
|
339
|
-
comp3DiagNormalizedSteerRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation3normalized) * normDiag
|
|
340
|
-
relDiff = (comp3DiagNormalizedSteer - comp3DiagNormalizedSteerRefNumpy) / (comp3DiagNormalizedSteer + comp3DiagNormalizedSteerRefNumpy) * 2
|
|
341
|
-
error3DiagNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
342
|
-
|
|
343
|
-
comp3VollEigNormalizedSteer, steerNorm = beamNew.beamformerFreq(True, 3, False, normFull, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
344
|
-
comp3VollEigNormalizedSteer /= steerNorm
|
|
345
|
-
comp3VollEigNormalizedSteerRefNumpy = beamformerRef(csm, steerFormulation3normalized)
|
|
346
|
-
relDiff = (comp3VollEigNormalizedSteer - comp3VollEigNormalizedSteerRefNumpy) / (comp3VollEigNormalizedSteer + comp3VollEigNormalizedSteerRefNumpy) * 2
|
|
347
|
-
error3VollEigNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
348
|
-
|
|
349
|
-
comp3DiagEigNormalizedSteer, steerNorm = beamNew.beamformerFreq(True, 3, True, normDiag, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
350
|
-
comp3DiagEigNormalizedSteer /= steerNorm
|
|
351
|
-
comp3DiagEigNormalizedSteerRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation3normalized) * normDiag
|
|
352
|
-
relDiff = (comp3DiagEigNormalizedSteer - comp3DiagEigNormalizedSteerRefNumpy) / (comp3DiagEigNormalizedSteer + comp3DiagEigNormalizedSteerRefNumpy) * 2
|
|
353
|
-
error3DiagEigNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
comp4VollNormalizedSteer, steerNorm = beamNew.beamformerFreq(False, 4, False, normFull, (r0, rm, kj, csm))
|
|
358
|
-
comp4VollNormalizedSteer /= steerNorm
|
|
359
|
-
comp4VollNormalizedSteerRefNumpy = beamformerRef(csm, steerFormulation4normalized)
|
|
360
|
-
relDiff = (comp4VollNormalizedSteer - comp4VollNormalizedSteerRefNumpy) / (comp4VollNormalizedSteer + comp4VollNormalizedSteerRefNumpy) * 2
|
|
361
|
-
error4VollNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
362
|
-
|
|
363
|
-
comp4DiagNormalizedSteer, steerNorm = beamNew.beamformerFreq(False, 4, True, normDiag, (r0, rm, kj, csm))
|
|
364
|
-
comp4DiagNormalizedSteer /= steerNorm
|
|
365
|
-
comp4DiagNormalizedSteerRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation4normalized) * normDiag
|
|
366
|
-
relDiff = (comp4DiagNormalizedSteer - comp4DiagNormalizedSteerRefNumpy) / (comp4DiagNormalizedSteer + comp4DiagNormalizedSteerRefNumpy) * 2
|
|
367
|
-
error4DiagNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
368
|
-
|
|
369
|
-
comp4VollEigNormalizedSteer, steerNorm = beamNew.beamformerFreq(True, 4, False, normFull, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
370
|
-
comp4VollEigNormalizedSteer /= steerNorm
|
|
371
|
-
comp4VollEigNormalizedSteerRefNumpy = beamformerRef(csm, steerFormulation4normalized)
|
|
372
|
-
relDiff = (comp4VollEigNormalizedSteer - comp4VollEigNormalizedSteerRefNumpy) / (comp4VollEigNormalizedSteer + comp4VollEigNormalizedSteerRefNumpy) * 2
|
|
373
|
-
error4VollEigNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
374
|
-
|
|
375
|
-
comp4DiagEigNormalizedSteer, steerNorm = beamNew.beamformerFreq(True, 4, True, normDiag, (r0, rm, kj, eigVal[:, indLow : indHigh], eigVec[:, :, indLow : indHigh]))
|
|
376
|
-
comp4DiagEigNormalizedSteer /= steerNorm
|
|
377
|
-
comp4DiagEigNormalizedSteerRefNumpy = beamformerRef(csmRemovedDiag, steerFormulation4normalized) * normDiag
|
|
378
|
-
relDiff = (comp4DiagEigNormalizedSteer - comp4DiagEigNormalizedSteerRefNumpy) / (comp4DiagEigNormalizedSteer + comp4DiagEigNormalizedSteerRefNumpy) * 2
|
|
379
|
-
error4DiagEigNormalizedSteerAgainstNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
### --> loojks good
|
|
383
|
-
|
|
384
|
-
#%% new beamformer - against weave
|
|
385
|
-
indLow = 0
|
|
386
|
-
indHigh = nMics
|
|
387
|
-
|
|
388
|
-
# the normalization factors as used in future with NUMBA
|
|
389
|
-
normFull = 1.0
|
|
390
|
-
normDiag = np.float64(nMics) / np.float64(nMics - 1)
|
|
391
|
-
|
|
392
|
-
# the normalization factors as used at the moment with weave
|
|
393
|
-
normFullWeave = np.float64(nMics ** 2)
|
|
394
|
-
normDiagWeave = np.float64(nMics * (nMics - 1))
|
|
395
|
-
|
|
396
|
-
#==============================================================================
|
|
397
|
-
# # see below why the csm can't be transposed as the input of weave
|
|
398
|
-
# # (but must be transposed as input of numpy and new beamformer)
|
|
399
|
-
#==============================================================================
|
|
400
|
-
comp1Voll, steerNorm = beamNew.beamformerFreq(False, 1, False, normFull, (r0, rm, kj, csm.transpose(0,2,1)))
|
|
401
|
-
beamformer.r_beamfull_classic(csm, e, h, r0, rm, kj)
|
|
402
|
-
comp1VollRefWeave = h / normFullWeave
|
|
403
|
-
relDiff = (comp1Voll - comp1VollRefWeave) / (comp1Voll + comp1VollRefWeave) * 2
|
|
404
|
-
error1VollAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
405
|
-
|
|
406
|
-
comp1Diag, steerNorm = beamNew.beamformerFreq(False, 1, True, normDiag, (r0, rm, kj, csm.transpose(0,2,1)))
|
|
407
|
-
beamformer.r_beamdiag_classic(csm, e, h, r0, rm, kj)
|
|
408
|
-
comp1DiagRefWeave = h / normDiagWeave
|
|
409
|
-
relDiff = (comp1Diag - comp1DiagRefWeave) / (comp1Diag + comp1DiagRefWeave) * 2
|
|
410
|
-
error1DiagAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
411
|
-
|
|
412
|
-
comp1VollEig, steerNorm = beamNew.beamformerFreq(True, 1, False, normFull, (r0, rm, kj, eigValTrans[:, indLow : indHigh], eigVecTrans[:, :, indLow : indHigh]))
|
|
413
|
-
beamformer.r_beamfull_os_classic(e, h, r0, rm, kj, eigVal, eigVec, indLow, indHigh)
|
|
414
|
-
comp1VollEigRefWeave = h / normFullWeave
|
|
415
|
-
relDiff = (comp1VollEig - comp1VollEigRefWeave) / (comp1VollEig + comp1VollEigRefWeave) * 2
|
|
416
|
-
error1VollEigAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
417
|
-
|
|
418
|
-
comp1DiagEig, steerNorm = beamNew.beamformerFreq(True, 1, True, normDiag, (r0, rm, kj, eigValTrans[:, indLow : indHigh], eigVecTrans[:, :, indLow : indHigh]))
|
|
419
|
-
beamformer.r_beamdiag_os_classic(e, h, r0, rm, kj, eigVal, eigVec, indLow, indHigh)
|
|
420
|
-
comp1DiagEigRefWeave = h / normDiagWeave
|
|
421
|
-
relDiff = (comp1DiagEig - comp1DiagEigRefWeave) / (comp1DiagEig + comp1DiagEigRefWeave) * 2
|
|
422
|
-
error1DiagEigAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
comp2Voll, steerNorm = beamNew.beamformerFreq(False, 2, False, normFull, (r0, rm, kj, csm.transpose(0,2,1)))
|
|
427
|
-
beamformer.r_beamfull_inverse(csm, e, h, r0, rm, kj)
|
|
428
|
-
comp2VollRefWeave = h / normFullWeave
|
|
429
|
-
relDiff = (comp2Voll - comp2VollRefWeave) / (comp2Voll + comp2VollRefWeave) * 2
|
|
430
|
-
error2VollAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
431
|
-
|
|
432
|
-
comp2Diag, steerNorm = beamNew.beamformerFreq(False, 2, True, normDiag, (r0, rm, kj, csm.transpose(0,2,1)))
|
|
433
|
-
beamformer.r_beamdiag_inverse(csm, e, h, r0, rm, kj)
|
|
434
|
-
comp2DiagRefWeave = h / normDiagWeave
|
|
435
|
-
relDiff = (comp2Diag - comp2DiagRefWeave) / (comp2Diag + comp2DiagRefWeave) * 2
|
|
436
|
-
error2DiagAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
437
|
-
|
|
438
|
-
comp2VollEig, steerNorm = beamNew.beamformerFreq(True, 2, False, normFull, (r0, rm, kj, eigValTrans[:, indLow : indHigh], eigVecTrans[:, :, indLow : indHigh]))
|
|
439
|
-
beamformer.r_beamfull_os_inverse(e, h, r0, rm, kj, eigVal, eigVec, indLow, indHigh)
|
|
440
|
-
comp2VollEigRefWeave = h / normFullWeave
|
|
441
|
-
relDiff = (comp2VollEig - comp2VollEigRefWeave) / (comp2VollEig + comp2VollEigRefWeave) * 2
|
|
442
|
-
error2VollEigAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
443
|
-
|
|
444
|
-
comp2DiagEig, steerNorm = beamNew.beamformerFreq(True, 2, True, normDiag, (r0, rm, kj, eigValTrans[:, indLow : indHigh], eigVecTrans[:, :, indLow : indHigh]))
|
|
445
|
-
beamformer.r_beamdiag_os_inverse(e, h, r0, rm, kj, eigVal, eigVec, indLow, indHigh)
|
|
446
|
-
comp2DiagEigRefWeave = h / normDiagWeave
|
|
447
|
-
relDiff = (comp2DiagEig - comp2DiagEigRefWeave) / (comp2DiagEig + comp2DiagEigRefWeave) * 2
|
|
448
|
-
error2DiagEigAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
comp3Voll, steerNorm = beamNew.beamformerFreq(False, 3, False, normFull, (r0, rm, kj, csm.transpose(0,2,1)))
|
|
453
|
-
beamformer.r_beamfull(csm, e, h, r0, rm, kj)
|
|
454
|
-
comp3VollRefWeave = h / normFullWeave
|
|
455
|
-
relDiff = (comp3Voll - comp3VollRefWeave) / (comp3Voll + comp3VollRefWeave) * 2
|
|
456
|
-
error3VollAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
457
|
-
|
|
458
|
-
comp3Diag, steerNorm = beamNew.beamformerFreq(False, 3, True, normDiag, (r0, rm, kj, csm.transpose(0,2,1)))
|
|
459
|
-
beamformer.r_beamdiag(csm, e, h, r0, rm, kj)
|
|
460
|
-
comp3DiagRefWeave = h / normDiagWeave
|
|
461
|
-
relDiff = (comp3Diag - comp3DiagRefWeave) / (comp3Diag + comp3DiagRefWeave) * 2
|
|
462
|
-
error3DiagAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
463
|
-
|
|
464
|
-
comp3VollEig, steerNorm = beamNew.beamformerFreq(True, 3, False, normFull, (r0, rm, kj, eigValTrans[:, indLow : indHigh], eigVecTrans[:, :, indLow : indHigh]))
|
|
465
|
-
beamformer.r_beamfull_os(e, h, r0, rm, kj, eigVal, eigVec, indLow, indHigh)
|
|
466
|
-
comp3VollEigRefWeave = h / normFullWeave
|
|
467
|
-
relDiff = (comp3VollEig - comp3VollEigRefWeave) / (comp3VollEig + comp3VollEigRefWeave) * 2
|
|
468
|
-
error3VollEigAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
469
|
-
|
|
470
|
-
comp3DiagEig, steerNorm = beamNew.beamformerFreq(True, 3, True, normDiag, (r0, rm, kj, eigValTrans[:, indLow : indHigh], eigVecTrans[:, :, indLow : indHigh]))
|
|
471
|
-
beamformer.r_beamdiag_os(e, h, r0, rm, kj, eigVal, eigVec, indLow, indHigh)
|
|
472
|
-
comp3DiagEigRefWeave = h / normDiagWeave
|
|
473
|
-
relDiff = (comp3DiagEig - comp3DiagEigRefWeave) / (comp3DiagEig + comp3DiagEigRefWeave) * 2
|
|
474
|
-
error3DiagEigAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
comp4Voll, steerNorm = beamNew.beamformerFreq(False, 4, False, normFull, (r0, rm, kj, csm.transpose(0,2,1)))
|
|
479
|
-
beamformer.r_beamfull_3d(csm, e, h, r0, rm, kj)
|
|
480
|
-
comp4VollRefWeave = h / normFullWeave
|
|
481
|
-
relDiff = (comp4Voll - comp4VollRefWeave) / (comp4Voll + comp4VollRefWeave) * 2
|
|
482
|
-
error4VollAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
483
|
-
|
|
484
|
-
comp4Diag, steerNorm = beamNew.beamformerFreq(False, 4, True, normDiag, (r0, rm, kj, csm.transpose(0,2,1)))
|
|
485
|
-
beamformer.r_beamdiag_3d(csm, e, h, r0, rm, kj)
|
|
486
|
-
comp4DiagRefWeave = h / normDiagWeave
|
|
487
|
-
relDiff = (comp4Diag - comp4DiagRefWeave) / (comp4Diag + comp4DiagRefWeave) * 2
|
|
488
|
-
error4DiagAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
489
|
-
|
|
490
|
-
comp4VollEig, steerNorm = beamNew.beamformerFreq(True, 4, False, normFull, (r0, rm, kj, eigValTrans[:, indLow : indHigh], eigVecTrans[:, :, indLow : indHigh]))
|
|
491
|
-
beamformer.r_beamfull_os_3d(e, h, r0, rm, kj, eigVal, eigVec, indLow, indHigh)
|
|
492
|
-
comp4VollEigRefWeave = h / normFullWeave
|
|
493
|
-
relDiff = (comp4VollEig - comp4VollEigRefWeave) / (comp4VollEig + comp4VollEigRefWeave) * 2
|
|
494
|
-
error4VollEigAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
495
|
-
|
|
496
|
-
comp4DiagEig, steerNorm = beamNew.beamformerFreq(True, 4, True, normDiag, (r0, rm, kj, eigValTrans[:, indLow : indHigh], eigVecTrans[:, :, indLow : indHigh]))
|
|
497
|
-
beamformer.r_beamdiag_os_3d(e, h, r0, rm, kj, eigVal, eigVec, indLow, indHigh)
|
|
498
|
-
comp4DiagEigRefWeave = h / normDiagWeave
|
|
499
|
-
relDiff = (comp4DiagEig - comp4DiagEigRefWeave) / (comp4DiagEig + comp4DiagEigRefWeave) * 2
|
|
500
|
-
error4DiagEigAgainstWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
501
|
-
|
|
502
|
-
### --> looks good
|
|
503
|
-
|
|
504
|
-
#%% Use only float32 for all calculations in beamformer
|
|
505
|
-
erg64 = beamformerRef(csm, steerFormulation1)
|
|
506
|
-
erg32 = beamformerRef(np.complex64(csm), np.complex64(steerFormulation1))
|
|
507
|
-
relDiff = np.amax(np.amax((erg64 - erg32) / (erg64 + erg32), 0), 0)
|
|
508
|
-
|
|
509
|
-
### --> there will be massive errors, if one uses only float32 datatypes!
|
|
510
|
-
|
|
511
|
-
#%% weave reacts strange
|
|
512
|
-
#==============================================================================
|
|
513
|
-
# There is a difference when giving weave the transpose of the csm (and 'correct'-algo gets the normal csm),
|
|
514
|
-
# or giving the 'correct' algorithm the csm-transpose and the weave gets the untransposed csm.
|
|
515
|
-
# Theoretically this should produce the same results. Maybe the problem is the ffast03 compiling option in weave?
|
|
516
|
-
#==============================================================================
|
|
517
|
-
normalizationFull = np.float64(nMics ** 2)
|
|
518
|
-
|
|
519
|
-
numpyResult = vectorized(csm.transpose(0,2,1), e, h, r0, rm, kj, normalizationFull)
|
|
520
|
-
neu, steerNorm = beamNew.beamformerFreq(False, 1, False, normFull, (r0, rm, kj, csm.transpose(0,2,1)))
|
|
521
|
-
beamformer.r_beamfull_classic(csm, e, h, r0, rm, kj)
|
|
522
|
-
weave = h / normalizationFull
|
|
523
|
-
|
|
524
|
-
relDiff = (neu - weave) / (neu + weave) * 2
|
|
525
|
-
errorNeuVsWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
526
|
-
|
|
527
|
-
relDiff = (neu - numpyResult) / (neu + numpyResult) * 2
|
|
528
|
-
errorNeuVsNumpy = np.amax(np.amax(abs(relDiff), 0), 0)
|
|
529
|
-
|
|
530
|
-
relDiff = (weave - numpyResult) / (weave + numpyResult) * 2
|
|
531
|
-
errorNPvsWeave = np.amax(np.amax(abs(relDiff), 0), 0)
|