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.
Files changed (139) hide show
  1. acoular/__init__.py +119 -54
  2. acoular/calib.py +29 -38
  3. acoular/configuration.py +132 -82
  4. acoular/demo/__init__.py +10 -4
  5. acoular/demo/acoular_demo.py +73 -55
  6. acoular/environments.py +270 -264
  7. acoular/fastFuncs.py +366 -196
  8. acoular/fbeamform.py +1797 -1934
  9. acoular/grids.py +504 -548
  10. acoular/h5cache.py +74 -83
  11. acoular/h5files.py +159 -142
  12. acoular/internal.py +13 -14
  13. acoular/microphones.py +57 -53
  14. acoular/sdinput.py +57 -53
  15. acoular/signals.py +180 -178
  16. acoular/sources.py +920 -724
  17. acoular/spectra.py +353 -363
  18. acoular/tbeamform.py +416 -416
  19. acoular/tfastfuncs.py +180 -104
  20. acoular/tools/__init__.py +25 -0
  21. acoular/tools/aiaa.py +185 -0
  22. acoular/tools/helpers.py +189 -0
  23. acoular/tools/metrics.py +165 -0
  24. acoular/tprocess.py +1240 -1182
  25. acoular/traitsviews.py +513 -501
  26. acoular/trajectory.py +50 -52
  27. acoular/version.py +5 -6
  28. acoular/xml/minidsp_uma-16.xml +20 -0
  29. acoular/xml/{minidsp_uma16.xml → minidsp_uma-16_mirrored.xml} +3 -0
  30. {acoular-24.3.dist-info → acoular-24.7.dist-info}/METADATA +58 -39
  31. acoular-24.7.dist-info/RECORD +50 -0
  32. {acoular-24.3.dist-info → acoular-24.7.dist-info}/WHEEL +1 -1
  33. acoular-24.7.dist-info/licenses/LICENSE +28 -0
  34. acoular/fileimport.py +0 -380
  35. acoular/nidaqimport.py +0 -273
  36. acoular/tests/reference_data/BeamformerBase.npy +0 -0
  37. acoular/tests/reference_data/BeamformerBaseFalse1.npy +0 -0
  38. acoular/tests/reference_data/BeamformerBaseFalse2.npy +0 -0
  39. acoular/tests/reference_data/BeamformerBaseFalse3.npy +0 -0
  40. acoular/tests/reference_data/BeamformerBaseFalse4.npy +0 -0
  41. acoular/tests/reference_data/BeamformerBaseTrue1.npy +0 -0
  42. acoular/tests/reference_data/BeamformerBaseTrue2.npy +0 -0
  43. acoular/tests/reference_data/BeamformerBaseTrue3.npy +0 -0
  44. acoular/tests/reference_data/BeamformerBaseTrue4.npy +0 -0
  45. acoular/tests/reference_data/BeamformerCMFLassoLarsBIC.npy +0 -0
  46. acoular/tests/reference_data/BeamformerCMFNNLS.npy +0 -0
  47. acoular/tests/reference_data/BeamformerCapon.npy +0 -0
  48. acoular/tests/reference_data/BeamformerClean.npy +0 -0
  49. acoular/tests/reference_data/BeamformerCleansc.npy +0 -0
  50. acoular/tests/reference_data/BeamformerCleant.npy +0 -0
  51. acoular/tests/reference_data/BeamformerCleantSq.npy +0 -0
  52. acoular/tests/reference_data/BeamformerCleantSqTraj.npy +0 -0
  53. acoular/tests/reference_data/BeamformerCleantTraj.npy +0 -0
  54. acoular/tests/reference_data/BeamformerDamas.npy +0 -0
  55. acoular/tests/reference_data/BeamformerDamasPlus.npy +0 -0
  56. acoular/tests/reference_data/BeamformerEig.npy +0 -0
  57. acoular/tests/reference_data/BeamformerEigFalse1.npy +0 -0
  58. acoular/tests/reference_data/BeamformerEigFalse2.npy +0 -0
  59. acoular/tests/reference_data/BeamformerEigFalse3.npy +0 -0
  60. acoular/tests/reference_data/BeamformerEigFalse4.npy +0 -0
  61. acoular/tests/reference_data/BeamformerEigTrue1.npy +0 -0
  62. acoular/tests/reference_data/BeamformerEigTrue2.npy +0 -0
  63. acoular/tests/reference_data/BeamformerEigTrue3.npy +0 -0
  64. acoular/tests/reference_data/BeamformerEigTrue4.npy +0 -0
  65. acoular/tests/reference_data/BeamformerFunctional.npy +0 -0
  66. acoular/tests/reference_data/BeamformerGIB.npy +0 -0
  67. acoular/tests/reference_data/BeamformerGridlessOrth.npy +0 -0
  68. acoular/tests/reference_data/BeamformerMusic.npy +0 -0
  69. acoular/tests/reference_data/BeamformerOrth.npy +0 -0
  70. acoular/tests/reference_data/BeamformerSODIX.npy +0 -0
  71. acoular/tests/reference_data/BeamformerTime.npy +0 -0
  72. acoular/tests/reference_data/BeamformerTimeSq.npy +0 -0
  73. acoular/tests/reference_data/BeamformerTimeSqTraj.npy +0 -0
  74. acoular/tests/reference_data/BeamformerTimeTraj.npy +0 -0
  75. acoular/tests/reference_data/Environment.npy +0 -0
  76. acoular/tests/reference_data/Example1_numerical_values_testsum.h5 +0 -0
  77. acoular/tests/reference_data/FiltFiltOctave__.npy +0 -0
  78. acoular/tests/reference_data/FiltFiltOctave_band_100_0_fraction_Thirdoctave_.npy +0 -0
  79. acoular/tests/reference_data/FiltFreqWeight_weight_A_.npy +0 -0
  80. acoular/tests/reference_data/FiltFreqWeight_weight_C_.npy +0 -0
  81. acoular/tests/reference_data/FiltFreqWeight_weight_Z_.npy +0 -0
  82. acoular/tests/reference_data/FiltOctave__.npy +0 -0
  83. acoular/tests/reference_data/FiltOctave_band_100_0_fraction_Thirdoctave_.npy +0 -0
  84. acoular/tests/reference_data/Filter__.npy +0 -0
  85. acoular/tests/reference_data/GeneralFlowEnvironment.npy +0 -0
  86. acoular/tests/reference_data/OctaveFilterBank__.npy +0 -0
  87. acoular/tests/reference_data/OpenJet.npy +0 -0
  88. acoular/tests/reference_data/PointSource.npy +0 -0
  89. acoular/tests/reference_data/PowerSpectra_csm.npy +0 -0
  90. acoular/tests/reference_data/PowerSpectra_ev.npy +0 -0
  91. acoular/tests/reference_data/RotatingFlow.npy +0 -0
  92. acoular/tests/reference_data/SlotJet.npy +0 -0
  93. acoular/tests/reference_data/TimeAverage__.npy +0 -0
  94. acoular/tests/reference_data/TimeCumAverage__.npy +0 -0
  95. acoular/tests/reference_data/TimeExpAverage_weight_F_.npy +0 -0
  96. acoular/tests/reference_data/TimeExpAverage_weight_I_.npy +0 -0
  97. acoular/tests/reference_data/TimeExpAverage_weight_S_.npy +0 -0
  98. acoular/tests/reference_data/TimeInOut__.npy +0 -0
  99. acoular/tests/reference_data/TimePower__.npy +0 -0
  100. acoular/tests/reference_data/TimeReverse__.npy +0 -0
  101. acoular/tests/reference_data/UniformFlowEnvironment.npy +0 -0
  102. acoular/tests/reference_data/beamformer_traj_time_data.h5 +0 -0
  103. acoular/tests/run_tests.sh +0 -18
  104. acoular/tests/run_tests_osx.sh +0 -16
  105. acoular/tests/test.npy +0 -0
  106. acoular/tests/test_beamformer_results.py +0 -213
  107. acoular/tests/test_classes.py +0 -60
  108. acoular/tests/test_digest.py +0 -125
  109. acoular/tests/test_environments.py +0 -73
  110. acoular/tests/test_example1.py +0 -124
  111. acoular/tests/test_grid.py +0 -92
  112. acoular/tests/test_integrate.py +0 -102
  113. acoular/tests/test_signals.py +0 -60
  114. acoular/tests/test_sources.py +0 -65
  115. acoular/tests/test_spectra.py +0 -38
  116. acoular/tests/test_timecache.py +0 -35
  117. acoular/tests/test_tprocess.py +0 -90
  118. acoular/tests/test_traj_beamformer_results.py +0 -164
  119. acoular/tests/unsupported/SpeedComparison/OvernightTestcasesBeamformer_nMics32_nGridPoints100_nFreqs4_nTrials10.png +0 -0
  120. acoular/tests/unsupported/SpeedComparison/cythonBeamformer.pyx +0 -237
  121. acoular/tests/unsupported/SpeedComparison/mainForCython.py +0 -103
  122. acoular/tests/unsupported/SpeedComparison/mainForParallelJit.py +0 -143
  123. acoular/tests/unsupported/SpeedComparison/setupCythonOpenMP.py +0 -63
  124. acoular/tests/unsupported/SpeedComparison/sharedFunctions.py +0 -153
  125. acoular/tests/unsupported/SpeedComparison/timeOverNMics_AllImportantMethods.png +0 -0
  126. acoular/tests/unsupported/SpeedComparison/timeOverNMics_faverage.png +0 -0
  127. acoular/tests/unsupported/SpeedComparison/vglOptimierungFAverage.py +0 -204
  128. acoular/tests/unsupported/SpeedComparison/vglOptimierungGaussSeidel.py +0 -182
  129. acoular/tests/unsupported/SpeedComparison/vglOptimierungR_BEAMFULL_INVERSE.py +0 -764
  130. acoular/tests/unsupported/SpeedComparison/vglOptimierungR_BEAM_OS.py +0 -231
  131. acoular/tests/unsupported/SpeedComparison/whatsFastestWayFor_absASquared.py +0 -48
  132. acoular/tests/unsupported/functionalBeamformer.py +0 -123
  133. acoular/tests/unsupported/precisionTest.py +0 -153
  134. acoular/tests/unsupported/validationOfBeamformerFuncsPOSTAcoularIntegration.py +0 -254
  135. acoular/tests/unsupported/validationOfBeamformerFuncsPREeAcoularIntegration.py +0 -531
  136. acoular/tools.py +0 -422
  137. acoular-24.3.dist-info/RECORD +0 -148
  138. acoular-24.3.dist-info/licenses/LICENSE +0 -29
  139. {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)