acoular 25.3.post1__py3-none-any.whl → 25.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 +2 -4
- acoular/aiaa/aiaa.py +9 -4
- acoular/base.py +14 -33
- acoular/calib.py +4 -4
- acoular/configuration.py +1 -1
- acoular/demo/__init__.py +6 -1
- acoular/demo/acoular_demo.py +34 -10
- acoular/deprecation.py +14 -2
- acoular/environments.py +6 -5
- acoular/fastFuncs.py +16 -10
- acoular/fbeamform.py +12 -107
- acoular/fprocess.py +3 -32
- acoular/grids.py +145 -38
- acoular/h5cache.py +5 -3
- acoular/h5files.py +10 -0
- acoular/internal.py +4 -0
- acoular/microphones.py +21 -3
- acoular/process.py +3 -45
- acoular/sdinput.py +12 -4
- acoular/signals.py +2 -2
- acoular/sources.py +28 -25
- acoular/spectra.py +17 -17
- acoular/tbeamform.py +3 -0
- acoular/tools/helpers.py +27 -0
- acoular/tools/utils.py +1 -2
- acoular/tprocess.py +1251 -470
- acoular/traitsviews.py +1 -3
- acoular/version.py +4 -3
- {acoular-25.3.post1.dist-info → acoular-25.7.dist-info}/METADATA +3 -3
- acoular-25.7.dist-info/RECORD +56 -0
- acoular-25.3.post1.dist-info/RECORD +0 -56
- {acoular-25.3.post1.dist-info → acoular-25.7.dist-info}/WHEEL +0 -0
- {acoular-25.3.post1.dist-info → acoular-25.7.dist-info}/licenses/AUTHORS.rst +0 -0
- {acoular-25.3.post1.dist-info → acoular-25.7.dist-info}/licenses/LICENSE +0 -0
acoular/__init__.py
CHANGED
|
@@ -16,7 +16,6 @@ from .base import (
|
|
|
16
16
|
SamplesGenerator,
|
|
17
17
|
SpectraGenerator,
|
|
18
18
|
SpectraOut,
|
|
19
|
-
TimeInOut,
|
|
20
19
|
TimeOut,
|
|
21
20
|
)
|
|
22
21
|
from .calib import Calib
|
|
@@ -52,7 +51,7 @@ from .fbeamform import (
|
|
|
52
51
|
SteeringVector,
|
|
53
52
|
integrate,
|
|
54
53
|
)
|
|
55
|
-
from .fprocess import IRFFT, RFFT, AutoPowerSpectra, CrossPowerSpectra
|
|
54
|
+
from .fprocess import IRFFT, RFFT, AutoPowerSpectra, CrossPowerSpectra
|
|
56
55
|
from .grids import (
|
|
57
56
|
CircSector,
|
|
58
57
|
ConvexSector,
|
|
@@ -69,7 +68,7 @@ from .grids import (
|
|
|
69
68
|
Sector,
|
|
70
69
|
)
|
|
71
70
|
from .microphones import MicGeom
|
|
72
|
-
from .process import Average, Cache, SampleSplitter
|
|
71
|
+
from .process import Average, Cache, SampleSplitter
|
|
73
72
|
from .sdinput import SoundDeviceSamplesGenerator
|
|
74
73
|
from .signals import (
|
|
75
74
|
FiltWNoiseGenerator,
|
|
@@ -117,7 +116,6 @@ from .tprocess import (
|
|
|
117
116
|
FiltFiltOctave,
|
|
118
117
|
FiltFreqWeight,
|
|
119
118
|
FiltOctave,
|
|
120
|
-
MaskedTimeInOut,
|
|
121
119
|
MaskedTimeOut,
|
|
122
120
|
Mixer,
|
|
123
121
|
OctaveFilterBank,
|
acoular/aiaa/aiaa.py
CHANGED
|
@@ -32,6 +32,7 @@ from traits.api import (
|
|
|
32
32
|
File,
|
|
33
33
|
Instance,
|
|
34
34
|
Property,
|
|
35
|
+
Union,
|
|
35
36
|
cached_property,
|
|
36
37
|
on_trait_change,
|
|
37
38
|
property_depends_on,
|
|
@@ -84,12 +85,12 @@ class TriggerAIAABenchmark(TimeSamplesAIAABenchmark):
|
|
|
84
85
|
(self.num_samples, self.num_channels) = self.data.shape
|
|
85
86
|
|
|
86
87
|
|
|
87
|
-
@deprecated_alias({'name': 'file'})
|
|
88
|
+
@deprecated_alias({'name': 'file'}, removal_version='25.10')
|
|
88
89
|
class CsmAIAABenchmark(PowerSpectraImport):
|
|
89
90
|
"""Class to load the CSM that is stored in AIAA Benchmark HDF5 file."""
|
|
90
91
|
|
|
91
92
|
#: Full name of the .h5 file with data
|
|
92
|
-
file = File(filter=['*.h5'], exists=True, desc='name of data file')
|
|
93
|
+
file = Union(None, File(filter=['*.h5'], exists=True), desc='name of data file')
|
|
93
94
|
|
|
94
95
|
#: Basename of the .h5 file with data, is set automatically.
|
|
95
96
|
basename = Property(
|
|
@@ -167,11 +168,15 @@ class MicAIAABenchmark(MicGeom):
|
|
|
167
168
|
"""
|
|
168
169
|
|
|
169
170
|
#: Name of the .h5-file from which to read the data.
|
|
170
|
-
file =
|
|
171
|
+
file = Union(
|
|
172
|
+
None, File(filter=['*.h5'], exists=True), desc='name of the h5 file containing the microphone geometry'
|
|
173
|
+
)
|
|
171
174
|
|
|
172
175
|
@on_trait_change('file')
|
|
173
176
|
def _import_mpos(self):
|
|
174
|
-
"""
|
|
177
|
+
"""
|
|
178
|
+
Import the microphone positions from .h5 file.
|
|
179
|
+
|
|
175
180
|
Called when :attr:`basename` changes.
|
|
176
181
|
"""
|
|
177
182
|
file = _get_h5file_class()
|
acoular/base.py
CHANGED
|
@@ -16,7 +16,6 @@ to be used directly, but to be subclassed by classes that implement the actual s
|
|
|
16
16
|
InOut
|
|
17
17
|
TimeOut
|
|
18
18
|
SpectraOut
|
|
19
|
-
TimeInOut
|
|
20
19
|
"""
|
|
21
20
|
|
|
22
21
|
from abc import abstractmethod
|
|
@@ -37,7 +36,7 @@ from .deprecation import deprecated_alias
|
|
|
37
36
|
from .internal import digest
|
|
38
37
|
|
|
39
38
|
|
|
40
|
-
@deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples'})
|
|
39
|
+
@deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples'}, removal_version='25.10')
|
|
41
40
|
class Generator(ABCHasStrictTraits):
|
|
42
41
|
"""Interface for any generating signal processing block.
|
|
43
42
|
|
|
@@ -157,10 +156,10 @@ class SpectraGenerator(Generator):
|
|
|
157
156
|
"""
|
|
158
157
|
|
|
159
158
|
|
|
160
|
-
@deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples'}, read_only=True)
|
|
159
|
+
@deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples'}, read_only=True, removal_version='25.10')
|
|
161
160
|
class TimeOut(SamplesGenerator):
|
|
162
|
-
"""
|
|
163
|
-
:attr:`source`
|
|
161
|
+
"""
|
|
162
|
+
Abstract base class receiving from a :attr:`source` and returning time domain signals.
|
|
164
163
|
|
|
165
164
|
It provides a base class that can be used to create signal processing blocks that receive data
|
|
166
165
|
from any generating :attr:`source` and generates a time signal output via the generator
|
|
@@ -205,10 +204,14 @@ class TimeOut(SamplesGenerator):
|
|
|
205
204
|
"""
|
|
206
205
|
|
|
207
206
|
|
|
208
|
-
@deprecated_alias(
|
|
207
|
+
@deprecated_alias(
|
|
208
|
+
{'numchannels': 'num_channels', 'numsamples': 'num_samples', 'numfreqs': 'num_freqs'},
|
|
209
|
+
read_only=True,
|
|
210
|
+
removal_version='25.10',
|
|
211
|
+
)
|
|
209
212
|
class SpectraOut(SpectraGenerator):
|
|
210
|
-
"""
|
|
211
|
-
:attr:`source`
|
|
213
|
+
"""
|
|
214
|
+
Abstract base class receiving from a :attr:`source` and returning frequency domain signals.
|
|
212
215
|
|
|
213
216
|
It provides a base class that can be used to create signal processing blocks that receive data
|
|
214
217
|
from any generating :attr:`source` domain and generates a frequency domain output via the
|
|
@@ -260,10 +263,10 @@ class SpectraOut(SpectraGenerator):
|
|
|
260
263
|
"""
|
|
261
264
|
|
|
262
265
|
|
|
263
|
-
@deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples'}, read_only=True)
|
|
266
|
+
@deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples'}, read_only=True, removal_version='25.10')
|
|
264
267
|
class InOut(SamplesGenerator, SpectraGenerator):
|
|
265
|
-
"""
|
|
266
|
-
:attr:`source`
|
|
268
|
+
"""
|
|
269
|
+
Abstract base class receiving from a :attr:`source` and returning signals in the same domain.
|
|
267
270
|
|
|
268
271
|
It provides a base class that can be used to create signal processing blocks that receive data
|
|
269
272
|
from any generating :attr:`source` and generates an output via the generator :meth:`result` in
|
|
@@ -308,25 +311,3 @@ class InOut(SamplesGenerator, SpectraGenerator):
|
|
|
308
311
|
numpy.ndarray
|
|
309
312
|
Two-dimensional output data block of shape (num, ...)
|
|
310
313
|
"""
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
class TimeInOut(TimeOut):
|
|
314
|
-
"""Deprecated alias for :class:`~acoular.base.TimeOut`.
|
|
315
|
-
|
|
316
|
-
.. deprecated:: 24.10
|
|
317
|
-
Using :class:`~acoular.base.TimeInOut` is deprecated and will be removed in Acoular 25.07.
|
|
318
|
-
Use :class:`~acoular.base.TimeOut` instead.
|
|
319
|
-
"""
|
|
320
|
-
|
|
321
|
-
#: Data source; :class:`~acoular.base.SamplesGenerator` or derived object.
|
|
322
|
-
source = Instance(SamplesGenerator)
|
|
323
|
-
|
|
324
|
-
def __init__(self, *args, **kwargs):
|
|
325
|
-
super().__init__(*args, **kwargs)
|
|
326
|
-
import warnings
|
|
327
|
-
|
|
328
|
-
warnings.warn(
|
|
329
|
-
'TimeInOut is deprecated and will be removed in Acoular 25.07. Use TimeOut instead.',
|
|
330
|
-
DeprecationWarning,
|
|
331
|
-
stacklevel=2,
|
|
332
|
-
)
|
acoular/calib.py
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import xml.dom.minidom
|
|
14
14
|
|
|
15
15
|
from numpy import array, newaxis
|
|
16
|
-
from traits.api import CArray, CInt, File, List, Property, cached_property, on_trait_change
|
|
16
|
+
from traits.api import CArray, CInt, File, List, Property, Union, cached_property, on_trait_change
|
|
17
17
|
|
|
18
18
|
import acoular as ac
|
|
19
19
|
|
|
@@ -24,7 +24,7 @@ from .deprecation import deprecated_alias
|
|
|
24
24
|
from .internal import digest
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
@deprecated_alias({'from_file': 'file'})
|
|
27
|
+
@deprecated_alias({'from_file': 'file'}, removal_version='25.10')
|
|
28
28
|
class Calib(InOut):
|
|
29
29
|
"""Processing block for handling calibration data in `*.xml` or NumPy format.
|
|
30
30
|
|
|
@@ -72,13 +72,12 @@ class Calib(InOut):
|
|
|
72
72
|
0.07458428+0.49657939j 1.772696 +3.92233098j 3.19543248+0.17988554j
|
|
73
73
|
0.3379041 -3.93342331j 0.93949242+2.5328611j 2.97352574+0.j ]]
|
|
74
74
|
|
|
75
|
-
Deprecated and will be removed in Acoular 25.10:
|
|
76
75
|
This class serves as interface to load calibration data for the used
|
|
77
76
|
microphone array. The calibration factors are stored as [Pa/unit].
|
|
78
77
|
"""
|
|
79
78
|
|
|
80
79
|
#: Name of the .xml file to be imported.
|
|
81
|
-
file = File(filter=['*.xml'], exists=True, desc='name of the xml file to import')
|
|
80
|
+
file = Union(None, File(filter=['*.xml'], exists=True), desc='name of the xml file to import')
|
|
82
81
|
|
|
83
82
|
#: Number of microphones in the calibration data,
|
|
84
83
|
#: is set automatically when read from file or when data is set.
|
|
@@ -102,6 +101,7 @@ class Calib(InOut):
|
|
|
102
101
|
|
|
103
102
|
@on_trait_change('data')
|
|
104
103
|
def set_num_mics(self):
|
|
104
|
+
"""Sets the number of microphones based on the shape of the data array."""
|
|
105
105
|
self.num_mics = self.data.shape[0]
|
|
106
106
|
|
|
107
107
|
@cached_property
|
acoular/configuration.py
CHANGED
acoular/demo/__init__.py
CHANGED
acoular/demo/acoular_demo.py
CHANGED
|
@@ -33,28 +33,52 @@ Source Location RMS
|
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
def create_three_sources(mg, h5savefile='three_sources.h5'):
|
|
36
|
-
"""
|
|
37
|
-
|
|
36
|
+
"""
|
|
37
|
+
Create three noise sources and return them as Mixer.
|
|
38
|
+
|
|
39
|
+
Alias for :func:`create_three_sources_2d`.
|
|
40
|
+
"""
|
|
41
|
+
return create_three_sources_2d(mg, h5savefile=h5savefile)
|
|
42
|
+
|
|
38
43
|
|
|
39
|
-
|
|
44
|
+
def _create_three_sources(mg, locs, h5savefile='', sfreq=51200, duration=1):
|
|
45
|
+
"""Create three noise sources with custom locations and return them as Mixer."""
|
|
46
|
+
import acoular as ac
|
|
40
47
|
|
|
41
|
-
sfreq = 51200
|
|
42
|
-
duration = 1
|
|
43
48
|
nsamples = duration * sfreq
|
|
44
49
|
|
|
45
50
|
n1 = ac.WNoiseGenerator(sample_freq=sfreq, num_samples=nsamples, seed=1)
|
|
46
51
|
n2 = ac.WNoiseGenerator(sample_freq=sfreq, num_samples=nsamples, seed=2, rms=0.7)
|
|
47
52
|
n3 = ac.WNoiseGenerator(sample_freq=sfreq, num_samples=nsamples, seed=3, rms=0.5)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
pa = ac.Mixer(source=
|
|
53
|
+
|
|
54
|
+
noises = [n1, n2, n3]
|
|
55
|
+
ps = [ac.PointSource(signal=n, mics=mg, loc=loc) for n, loc in list(zip(noises, locs))]
|
|
56
|
+
pa = ac.Mixer(source=ps[0], sources=ps[1:])
|
|
57
|
+
|
|
52
58
|
if h5savefile:
|
|
53
59
|
wh5 = ac.WriteH5(source=pa, file=h5savefile)
|
|
54
60
|
wh5.save()
|
|
55
61
|
return pa
|
|
56
62
|
|
|
57
63
|
|
|
64
|
+
def create_three_sources_1d(mg, h5savefile='three_sources_1d.h5'):
|
|
65
|
+
"""Create three noise sources on a 1D line and return them as Mixer."""
|
|
66
|
+
locs = [(-0.1, 0, -0.3), (0.15, 0, -0.3), (0, 0, -0.3)]
|
|
67
|
+
return _create_three_sources(mg, locs, h5savefile=h5savefile)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def create_three_sources_2d(mg, h5savefile='three_sources_2d.h5'):
|
|
71
|
+
"""Create three noise sources in a 2D plane and return them as Mixer."""
|
|
72
|
+
locs = [(-0.1, -0.1, -0.3), (0.15, 0, -0.3), (0, 0.1, -0.3)]
|
|
73
|
+
return _create_three_sources(mg, locs, h5savefile=h5savefile)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def create_three_sources_3d(mg, h5savefile='three_sources_3d.h5'):
|
|
77
|
+
"""Create three noise sources in 3D space and return them as Mixer."""
|
|
78
|
+
locs = [(-0.1, -0.1, -0.3), (0.15, 0, -0.17), (0, 0.1, -0.25)]
|
|
79
|
+
return _create_three_sources(mg, locs, h5savefile=h5savefile)
|
|
80
|
+
|
|
81
|
+
|
|
58
82
|
def run():
|
|
59
83
|
"""Run the Acoular demo."""
|
|
60
84
|
from pathlib import Path
|
|
@@ -87,7 +111,7 @@ def run():
|
|
|
87
111
|
from matplotlib.pyplot import axis, colorbar, figure, imshow, plot, show
|
|
88
112
|
|
|
89
113
|
# show map
|
|
90
|
-
imshow(spl.T, origin='lower', vmin=spl.max() - 10, extent=rg.
|
|
114
|
+
imshow(spl.T, origin='lower', vmin=spl.max() - 10, extent=rg.extent, interpolation='bicubic')
|
|
91
115
|
colorbar()
|
|
92
116
|
|
|
93
117
|
# plot microphone geometry
|
acoular/deprecation.py
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# ------------------------------------------------------------------------------
|
|
2
2
|
# Copyright (c) Acoular Development Team.
|
|
3
3
|
# ------------------------------------------------------------------------------
|
|
4
|
+
"""Implements helper functions for deprecation handling.
|
|
5
|
+
|
|
6
|
+
.. autosummary::
|
|
7
|
+
:toctree: generated/
|
|
8
|
+
|
|
9
|
+
deprecated_alias
|
|
10
|
+
"""
|
|
4
11
|
|
|
5
12
|
from warnings import warn
|
|
6
13
|
|
|
@@ -8,7 +15,9 @@ from traits.api import Property
|
|
|
8
15
|
|
|
9
16
|
|
|
10
17
|
def deprecated_alias(old2new, read_only=False, removal_version=''):
|
|
11
|
-
"""
|
|
18
|
+
"""
|
|
19
|
+
Decorator function for deprecating renamed class traits.
|
|
20
|
+
|
|
12
21
|
Replaced traits should no longer be part of the class definition
|
|
13
22
|
and only mentioned in this decorator's parameter list.
|
|
14
23
|
The replacement trait has to be defined in the updated class and
|
|
@@ -66,7 +75,10 @@ def deprecated_alias(old2new, read_only=False, removal_version=''):
|
|
|
66
75
|
else:
|
|
67
76
|
current_removal_version = ''
|
|
68
77
|
# Define Trait Property type
|
|
69
|
-
trait_type = Property(
|
|
78
|
+
trait_type = Property(
|
|
79
|
+
*_alias_accessor_factory(old, new, current_read_only, current_removal_version),
|
|
80
|
+
transient=True,
|
|
81
|
+
)
|
|
70
82
|
|
|
71
83
|
# If the new trait exists, set or update alias
|
|
72
84
|
if new in cls.class_traits():
|
acoular/environments.py
CHANGED
|
@@ -557,8 +557,7 @@ class OpenJet(FlowField):
|
|
|
557
557
|
|
|
558
558
|
class RotatingFlow(FlowField):
|
|
559
559
|
"""
|
|
560
|
-
Analytical approximation of a rotating flow field with
|
|
561
|
-
in z-direction.
|
|
560
|
+
Analytical approximation of a rotating flow field with velocity component in z-direction.
|
|
562
561
|
|
|
563
562
|
This class provides an analytical model for a fluid flow field with a
|
|
564
563
|
rigid-body-like rotation about the z-axis. The flow combines rotational motion
|
|
@@ -591,11 +590,12 @@ class RotatingFlow(FlowField):
|
|
|
591
590
|
# Positive values indicate clockwise rotation of the flow.
|
|
592
591
|
# This is contrary to the usual definition of the direction of rotation.
|
|
593
592
|
# Deprecated! Please use the differently defined :attr:`rps` attribute instead.
|
|
594
|
-
rpm = Property(desc='revolutions per minute of the flow; positive values for clockwise rotation')
|
|
593
|
+
rpm = Property(transient=True, desc='revolutions per minute of the flow; positive values for clockwise rotation')
|
|
595
594
|
|
|
596
595
|
def _get_rpm(self):
|
|
597
596
|
warn(
|
|
598
|
-
'Deprecated use of "rpm" trait
|
|
597
|
+
'Deprecated use of "rpm" trait (will be removed in version 26.01). \
|
|
598
|
+
Please use the "rps" trait instead.',
|
|
599
599
|
DeprecationWarning,
|
|
600
600
|
stacklevel=2,
|
|
601
601
|
)
|
|
@@ -603,7 +603,8 @@ class RotatingFlow(FlowField):
|
|
|
603
603
|
|
|
604
604
|
def _set_rpm(self, rpm):
|
|
605
605
|
warn(
|
|
606
|
-
'Deprecated use of "rpm" trait
|
|
606
|
+
'Deprecated use of "rpm" trait (will be removed in version 26.01). \
|
|
607
|
+
Please use the "rps" trait instead (divide rpm value by -60).',
|
|
607
608
|
DeprecationWarning,
|
|
608
609
|
stacklevel=2,
|
|
609
610
|
)
|
acoular/fastFuncs.py
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
# ------------------------------------------------------------------------------
|
|
2
2
|
# Copyright (c) Acoular Development Team.
|
|
3
3
|
# ------------------------------------------------------------------------------
|
|
4
|
-
"""Contains all
|
|
5
|
-
computational costs. All functionalities are optimized via NUMBA.
|
|
6
|
-
"""
|
|
4
|
+
"""Contains all computationally expensive operations and accelerates them with NUMBA."""
|
|
7
5
|
|
|
8
6
|
import numba as nb
|
|
9
7
|
import numpy as np
|
|
@@ -27,7 +25,8 @@ FAST_OPTION = True # fastmath options
|
|
|
27
25
|
)
|
|
28
26
|
def calcCSM(csm, SpecAllMics):
|
|
29
27
|
"""Adds a given spectrum to the Cross-Spectral-Matrix (CSM).
|
|
30
|
-
|
|
28
|
+
|
|
29
|
+
Here, only the upper triangular matrix of the CSM is calculated. After
|
|
31
30
|
averaging over the various ensembles, the whole CSM is created via complex
|
|
32
31
|
conjugation transposing. This happens outside
|
|
33
32
|
(in :class:`PowerSpectra<acoular.spectra.PowerSpectra>`).
|
|
@@ -56,9 +55,11 @@ def calcCSM(csm, SpecAllMics):
|
|
|
56
55
|
|
|
57
56
|
|
|
58
57
|
def beamformerFreq(steerVecType, boolRemovedDiagOfCSM, normFactor, inputTupleSteer, inputTupleCsm):
|
|
59
|
-
r"""
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
r"""
|
|
59
|
+
Conventional beamformer in frequency domain.
|
|
60
|
+
|
|
61
|
+
Use either a predefined steering vector formulation (see Sarradj 2012) or pass your own steering
|
|
62
|
+
vector.
|
|
62
63
|
|
|
63
64
|
Parameters
|
|
64
65
|
----------
|
|
@@ -545,8 +546,11 @@ def _freqBeamformer_EigValProb_SpecificSteerVec_CsmRemovedDiag(
|
|
|
545
546
|
|
|
546
547
|
# %% Point - Spread - Function
|
|
547
548
|
def calcPointSpreadFunction(steerVecType, distGridToArrayCenter, distGridToAllMics, waveNumber, indSource, dtype):
|
|
548
|
-
r"""
|
|
549
|
-
|
|
549
|
+
r"""
|
|
550
|
+
Calculates the Point-Spread-Functions.
|
|
551
|
+
|
|
552
|
+
Use either a predefined steering vector formulation (see :ref:`Sarradj, 2012<Sarradj2012>`) or
|
|
553
|
+
pass it your own steering vector.
|
|
550
554
|
|
|
551
555
|
Parameters
|
|
552
556
|
----------
|
|
@@ -789,7 +793,9 @@ def _psf_Formulation4AkaTrueLocation(
|
|
|
789
793
|
fastmath=FAST_OPTION,
|
|
790
794
|
)
|
|
791
795
|
def damasSolverGaussSeidel(A, dirtyMap, nIterations, relax, damasSolution):
|
|
792
|
-
"""
|
|
796
|
+
"""
|
|
797
|
+
Solves the DAMAS inverse problem via modified gauss seidel.
|
|
798
|
+
|
|
793
799
|
This is the original formulation from :ref:`Brooks and Humphreys, 2006<BrooksHumphreys2006>`.
|
|
794
800
|
|
|
795
801
|
Parameters
|