pyroomacoustics.beamforming module

class pyroomacoustics.beamforming.Beamformer(R, fs, N=1024, Lg=None, hop=None, zpf=0, zpb=0)

Bases: MicrophoneArray

At some point, in some nice way, the design methods should also go here. Probably with generic arguments.

Parameters
  • R (numpy.ndarray) – Mics positions

  • fs (int) – Sampling frequency

  • N (int, optional) – Length of FFT, i.e. number of FD beamforming weights, equally spaced. Defaults to 1024.

  • Lg (int, optional) – Length of time-domain filters. Default to N.

  • hop (int, optional) – Hop length for frequency domain processing. Default to N/2.

  • zpf (int, optional) – Front zero padding length for frequency domain processing. Default is 0.

  • zpb (int, optional) – Zero padding length for frequency domain processing. Default is 0.

far_field_weights(phi)

This method computes weight for a far field at infinity phi: direction of beam

filters_from_weights(non_causal=0.0)

Compute time-domain filters from frequency domain weights. :param non_causal: ratio of filter coefficients used for non-causal part :type non_causal: float, optional

plot(sum_ir=False, FD=True)
plot_beam_response()
plot_response_from_point(x, legend=None)
process(FD=False)
rake_delay_and_sum_weights(source, interferer=None, R_n=None, attn=True, ff=False)
rake_distortionless_filters(source, interferer, R_n, delay=0.03, epsilon=0.005)

Compute time-domain filters of a beamformer minimizing noise and interference while forcing a distortionless response towards the source.

rake_max_sinr_filters(source, interferer, R_n, epsilon=0.005, delay=0.0)

Compute the time-domain filters of SINR maximizing beamformer.

rake_max_sinr_weights(source, interferer=None, R_n=None, rcond=0.0, ff=False, attn=True)

This method computes a beamformer focusing on a number of specific sources and ignoring a number of interferers.

Parameters
  • source (array_like) – source locations

  • interferer (array_like) – interferer locations

rake_max_udr_filters(source, interferer=None, R_n=None, delay=0.03, epsilon=0.005)

Compute directly the time-domain filters maximizing the Useful-to-Detrimental Ratio (UDR). This beamformer is not practical. It maximizes the UDR ratio in the time domain directly without imposing flat response towards the source of interest. This results in severe distortion of the desired signal.

Parameters
  • source (pyroomacoustics.SoundSource) – the desired source

  • interferer (pyroomacoustics.SoundSource, optional) – the interfering source

  • R_n (ndarray, optional) – the noise covariance matrix, it should be (M * Lg)x(M * Lg) where M is the number of sensors and Lg the filter length

  • delay (float, optional) – the signal delay introduced by the beamformer (default 0.03 s)

  • epsilon (float) –

rake_max_udr_weights(source, interferer=None, R_n=None, ff=False, attn=True)
rake_mvdr_filters(source, interferer, R_n, delay=0.03, epsilon=0.005)

Compute the time-domain filters of the minimum variance distortionless response beamformer.

rake_one_forcing_filters(sources, interferers, R_n, epsilon=0.005)

Compute the time-domain filters of a beamformer with unit response towards multiple sources.

rake_one_forcing_weights(source, interferer=None, R_n=None, ff=False, attn=True)
rake_perceptual_filters(source, interferer=None, R_n=None, delay=0.03, d_relax=0.035, epsilon=0.005)

Compute directly the time-domain filters for a perceptually motivated beamformer. The beamformer minimizes noise and interference, but relaxes the response of the filter within the 30 ms following the delay.

response(phi_list, frequency)
response_from_point(x, frequency)
snr(source, interferer, f, R_n=None, dB=False)
steering_vector_2D(frequency, phi, dist, attn=False)
steering_vector_2D_from_point(frequency, source, attn=True, ff=False)

Creates a steering vector for a particular frequency and source :param frequency: :param source: location in cartesian coordinates :param attn: include attenuation factor if True :param ff: uses far-field distance if true

Returns

A 2x1 ndarray containing the steering vector.

udr(source, interferer, f, R_n=None, dB=False)
weights_from_filters()
pyroomacoustics.beamforming.H(A, **kwargs)

Returns the conjugate (Hermitian) transpose of a matrix.

class pyroomacoustics.beamforming.MicrophoneArray(R, fs, directivity=None)

Bases: object

Microphone array class.

property M
append(locs)

Add some microphones to the array.

Parameters

locs (numpy.ndarray (2 or 3, n_mics)) – Adds n_mics microphones to the array. The coordinates are passed as a numpy.ndarray with each column containing the coordinates of a microphone.

record(signals, fs)

This simulates the recording of the signals by the microphones. In particular, if the microphones and the room simulation do not use the same sampling frequency, down/up-sampling is done here. :param signals: An ndarray with as many lines as there are microphones. :param fs: the sampling frequency of the signals.

set_directivity(directivities)

This functions sets self.directivity as a list of directivities with n_mics entries, where n_mics is the number of microphones :param directivities: single directivity for all microphones or a list of directivities for each microphone

to_wav(filename, mono=False, norm=False, bitdepth=<class 'float'>)

Save all the signals to wav files.

Parameters
  • filename (str) – the name of the file

  • mono (bool, optional) – if true, records only the center channel floor(M / 2) (default False)

  • norm (bool, optional) – if true, normalize the signal to fit in the dynamic range (default False)

  • bitdepth (int, optional) – the format of output samples [np.int8/16/32/64 or np.float (default)]

pyroomacoustics.beamforming.circular_2D_array(center, M, phi0, radius)

Create an array of uniformly spaced circular points in 2D.

Parameters
  • center (array_like) – The center of the array

  • M (int) – The number of points

  • phi0 (float) – The counterclockwise rotation of the first element in the array (from the x-axis)

  • radius (float) – The radius of the array

Returns

The array of points

Return type

ndarray (2, M)

pyroomacoustics.beamforming.circular_microphone_array_xyplane(center, M, phi0, radius, fs, directivity=None, ax=None)

Create a microphone array with directivities pointing outwards (if provided).

Parameters
  • center (array_like) – The center of the microphone array. 2D or 3D.

  • M (int) – The number of microphones.

  • phi0 (float) – The counterclockwise rotation (in degrees) of the first element in the microphone array (from the x-axis).

  • radius (float) – The radius of the microphone array.

  • fs (int) – The sampling frequency.

  • directivity (Directivity object, optional.) – Directivity pattern for each microphone which will be re-oriented to face outward. If not provided, microphones are omnidirectional.

  • ax (axes object, optional) – Axes on which to plot microphone array with its directivities.

Return type

MicrophoneArray object

pyroomacoustics.beamforming.distance(x, y)

Computes the distance matrix E. E[i,j] = sqrt(sum((x[:,i]-y[:,j])**2)). x and y are DxN ndarray containing N D-dimensional vectors.

pyroomacoustics.beamforming.fir_approximation_ls(weights, T, n1, n2)
pyroomacoustics.beamforming.linear_2D_array(center, M, phi, d)

Creates an array of uniformly spaced linear points in 2D :param center: The center of the array :type center: array_like :param M: The number of points :type M: int :param phi: The counterclockwise rotation of the array (from the x-axis) :type phi: float :param d: The distance between neighboring points :type d: float

Returns

The array of points

Return type

ndarray (2, M)

pyroomacoustics.beamforming.mdot(*args)

Left-to-right associative matrix multiplication of multiple 2D ndarrays.

pyroomacoustics.beamforming.poisson_2D_array(center, M, d)

Create array of 2D positions drawn from Poisson process. :param center: The center of the array :type center: array_like :param M: The number of points in the first dimension :type M: int :param M: The number of points in the second dimension :type M: int :param phi: The counterclockwise rotation of the array (from the x-axis) :type phi: float :param d: The distance between neighboring points :type d: float

Returns

The array of points

Return type

ndarray (2, M * N)

pyroomacoustics.beamforming.spiral_2D_array(center, M, radius=1.0, divi=3, angle=None)

Generate an array of points placed on a spiral :param center: location of the center of the array :type center: array_like :param M: number of microphones :type M: int :param radius: microphones are contained within a cirle of this radius (default 1) :type radius: float :param divi: number of rotations of the spiral (default 3) :type divi: int :param angle: the angle offset of the spiral (default random) :type angle: float

Returns

The array of points

Return type

ndarray (2, M * N)

pyroomacoustics.beamforming.square_2D_array(center, M, N, phi, d)

Creates an array of uniformly spaced grid points in 2D :param center: The center of the array :type center: array_like :param M: The number of points in the first dimension :type M: int :param N: The number of points in the second dimension :type N: int :param phi: The counterclockwise rotation of the array (from the x-axis) :type phi: float :param d: The distance between neighboring points :type d: float

Returns

The array of points

Return type

ndarray (2, M * N)

pyroomacoustics.beamforming.sumcols(A)

Sums the columns of a matrix (np.array). The output is a 2D np.array of dimensions M x 1.

pyroomacoustics.beamforming.unit_vec2D(phi)