Skip to content

Commit 1bc8bca

Browse files
committed
Fixed examples
1 parent b9351df commit 1bc8bca

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

examples/modal_beamforming_open_array.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010
N = 20 # order of modal beamformer/microphone array
1111
pw_angle = (np.pi, np.pi/2) # incidence angle of plane wave
1212
azi_pwd = np.linspace(0, 2*np.pi, 91, endpoint=False) # angles for plane wave decomposition
13-
kr = np.linspace(0.1, 20, 100) # wavenumber-radius vector
13+
k = np.linspace(0.1, 20, 100) # wavenumber vector
14+
r = 1 # radius of array
1415

1516

1617
def dot_product_sph(v, u):
1718
# evaluate dot-product between u and v in spherical coordinates
18-
return (np.cos(v[0])*np.sin(v[1])*np.cos(u[0])*np.sin(u[1])
19-
+ np.sin(v[0])*np.sin(v[1])*np.sin(u[0])*np.sin(u[1])
20-
+ np.cos(v[1])*np.cos(u[1]))
19+
return (np.cos(v[0])*np.sin(v[1])*np.cos(u[0])*np.sin(u[1]) +
20+
np.sin(v[0])*np.sin(v[1])*np.sin(u[0])*np.sin(u[1]) +
21+
np.cos(v[1])*np.cos(u[1]))
2122

2223

2324
# get quadrature grid (microphone positions) of order N
@@ -27,28 +28,28 @@ def dot_product_sph(v, u):
2728
# get spherical harmonics matrix for a source ensemble of azimuthal plane waves
2829
Y_q = micarray.modal.angular.sht_matrix(N, azi_pwd, np.pi/2)
2930
# get radial filters
30-
bn = micarray.modal.radial.spherical(N, kr, setup='open', plane_wave=True)
31+
bn = micarray.modal.radial.spherical_pw(N, k, r, setup='open')
3132
dn, _ = micarray.modal.radial.regularize(1/bn, 100, 'softclip')
3233
D = micarray.modal.radial.diagonal_mode_mat(dn)
3334

3435
# compute microphone signals for an incident broad-band plane wave
35-
p = np.exp(1j * kr[:, np.newaxis] * dot_product_sph((azi, elev), pw_angle))
36+
p = np.exp(1j * k[:, np.newaxis]*r * dot_product_sph((azi, elev), pw_angle))
3637
# compute the plane wave dcomposition
3738
A_pwd = np.matmul(np.matmul(np.conj(Y_q.T), D), Y_p)
3839
q_pwd = np.squeeze(np.matmul(A_pwd, np.expand_dims(p, 2)))
3940
q_pwd_t = np.fft.fftshift(np.fft.irfft(q_pwd, axis=0), axes=0)
4041

4142
# visualize plane wave decomposition (aka beampattern)
4243
plt.figure()
43-
plt.pcolormesh(kr, azi_pwd/np.pi, 20*np.log10(np.abs(q_pwd.T)), vmin=-10)
44+
plt.pcolormesh(k, azi_pwd/np.pi, 20*np.log10(np.abs(q_pwd.T)), vmin=-40)
4445
plt.colorbar()
4546
plt.xlabel(r'$kr$')
4647
plt.ylabel(r'$\phi / \pi$')
4748
plt.title('Plane wave docomposition by modal beamformer (frequency domain)')
4849
plt.savefig('modal_open_beamformer_pwd_fd.png')
4950

5051
plt.figure()
51-
plt.pcolormesh(range(2*len(kr)-2), azi_pwd/np.pi, 20*np.log10(np.abs(q_pwd_t.T)), vmin=-10)
52+
plt.pcolormesh(range(2*len(k)-2), azi_pwd/np.pi, 20*np.log10(np.abs(q_pwd_t.T)), vmin=-40)
5253
plt.colorbar()
5354
plt.ylabel(r'$\phi / \pi$')
5455
plt.title('Plane wave docomposition by modal beamformer (time domain)')

examples/modal_beamforming_rigid_array.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010
N = 20 # order of modal beamformer/microphone array
1111
azi_pw = np.pi # incidence angle of plane wave
1212
azi_pwd = np.linspace(0, 2*np.pi, 91, endpoint=False) # angles for plane wave decomposition
13-
kr = np.linspace(0.1, 20, 100) # wavenumber-radius vector
13+
k = np.linspace(0.1, 20, 100) # wavenumber
14+
r = 1 # radius of array
1415

1516

1617
# get quadrature grid (microphone positions) of order N
1718
azi, elev, weights = micarray.modal.angular.grid_gauss(N)
1819

1920
# pressure on the surface of a rigid sphere for an incident plane wave
20-
bn = micarray.modal.radial.spherical(N, kr, setup='rigid', plane_wave=True)
21+
bn = micarray.modal.radial.spherical_pw(N, k, r, setup='rigid')
2122
D = micarray.modal.radial.diagonal_mode_mat(bn)
2223
Y_p = micarray.modal.angular.sht_matrix(N, azi, elev)
2324
Y_pw = micarray.modal.angular.sht_matrix(N, azi_pw, np.pi/2)
@@ -30,7 +31,7 @@
3031
azi_pwd = np.linspace(0, 2*np.pi, 91, endpoint=False)
3132
Y_q = micarray.modal.angular.sht_matrix(N, azi_pwd, np.pi/2)
3233
# get radial filters
33-
bn = micarray.modal.radial.spherical(N, kr, setup='rigid', plane_wave=True)
34+
bn = micarray.modal.radial.spherical_pw(N, k, r, setup='rigid')
3435
dn, _ = micarray.modal.radial.regularize(1/bn, 100, 'softclip')
3536
D = micarray.modal.radial.diagonal_mode_mat(dn)
3637
# compute the PWD
@@ -41,15 +42,15 @@
4142

4243
# visualize plane wave decomposition (aka beampattern)
4344
plt.figure()
44-
plt.pcolormesh(kr, azi_pwd/np.pi, 20*np.log10(np.abs(q_mb.T)), vmin=-40)
45+
plt.pcolormesh(k*r, azi_pwd/np.pi, 20*np.log10(np.abs(q_mb.T)), vmin=-40)
4546
plt.colorbar()
4647
plt.xlabel(r'$kr$')
4748
plt.ylabel(r'$\phi / \pi$')
4849
plt.title('Plane wave docomposition by modal beamformer (frequency domain)')
4950
plt.savefig('modal_rigid_beamformer_pwd_fd.png')
5051

5152
plt.figure()
52-
plt.pcolormesh(range(2*len(kr)-2), azi_pwd/np.pi, 20*np.log10(np.abs(q_mb_t.T)), vmin=-40)
53+
plt.pcolormesh(range(2*len(k)-2), azi_pwd/np.pi, 20*np.log10(np.abs(q_mb_t.T)), vmin=-40)
5354
plt.colorbar()
5455
plt.ylabel(r'$\phi / \pi$')
5556
plt.title('Plane wave docomposition by modal beamformer (time domain)')

0 commit comments

Comments
 (0)