|
1 | 1 | """ |
2 | 2 | Compute the plane wave decomposition for an incident broadband plane wave |
3 | | - on an open circular array using a modal beamformer of finite order. |
| 3 | + on an rigid circular array using a modal beamformer of finite order. |
4 | 4 | """ |
5 | 5 |
|
6 | 6 | import numpy as np |
|
18 | 18 | # get uniform grid (microphone positions) of number M |
19 | 19 | pol, weights = micarray.modal.angular.grid_equal_polar_angle(M) |
20 | 20 |
|
21 | | -# get circular harmonics matrix for sensors |
| 21 | +# pressure on the surface of a rigid cylinder for an incident plane wave |
22 | 22 | bn = micarray.modal.radial.circular_pw(Nsf, k, r, setup='rigid') |
23 | 23 | D = micarray.modal.radial.circ_diagonal_mode_mat(bn) |
24 | 24 | Psi_p = micarray.modal.angular.cht_matrix(Nsf, pol, weights) |
25 | 25 | Psi_pw = micarray.modal.angular.cht_matrix(Nsf, pw_angle) |
26 | 26 | p = np.matmul(np.matmul(np.conj(Psi_pw.T), D), Psi_p) |
27 | 27 | p = np.squeeze(p) |
28 | 28 |
|
29 | | -# get circular harmonics matrix for a source ensemble of azimuthal plane wave |
| 29 | +# plane wave decomposition using modal beamforming |
30 | 30 | Psi_p = micarray.modal.angular.cht_matrix(N, pol) |
31 | 31 | Psi_q = micarray.modal.angular.cht_matrix(N, pol_pwd) |
32 | | -# get radial filters |
33 | 32 | Bn = micarray.modal.radial.circular_pw(N, k, r, setup='rigid') |
34 | 33 | Dn, _ = micarray.modal.radial.regularize(1/Bn, 100, 'softclip') |
35 | 34 | D = micarray.modal.radial.circ_diagonal_mode_mat(Dn) |
36 | | -# compute plane wave decomposition |
37 | 35 | A_pwd = np.matmul(np.matmul(np.conj(Psi_q.T), D), Psi_p) |
38 | 36 | q_pwd = np.squeeze(np.matmul(A_pwd, np.expand_dims(p, 2))) |
39 | 37 | q_pwd_t = np.fft.fftshift(np.fft.irfft(q_pwd, axis=0), axes=0) |
|
0 commit comments