指向性をもったスピー​カの音圧分布のプロッ​トについて

조회 수: 31(최근 30일)
kaiho inoue
kaiho inoue 2020년 5월 29일
댓글: kaiho inoue 2020년 6월 1일
現在自分はアクティブノイズコントロールについての研究を行おうと思っており、研究をおこなうに当たって、自由音場において適当に配置した無数のスピーカがどのような音場を作るのか(自分もこの分野に対しての知識がまだ浅いためこの言い方が正しいかはわかりませんが)というものをシミュレーション上で見れないかということを模索しています。理想は3次元で音圧分布が可視化できればと思っています。難しければ2次元でも構いません。
現在自分で行ったこととしては、とある書籍で進行波の音圧の複素実効値が以下の式であらわせるというものをみてこの式をもとに計算結果をプロットしてみました。
kが波数、ρが密度(自分が再現しようとしている音場では空気の密度だと思っています)
Aが適当な定数、rが音源からの距離です。
この式を使いプロットを行うことで、点音源が自由音場においてどのような音圧分布を作るかということは可視化することができたのですが、ここから一般的なスピーカのようにある程度の指向性を持たせる方法が分からず困っています。今の使用している式では距離でのみ音圧が決まると思うのですが、そうではなく、スピーカの正面は音圧が高く、後ろ側は音圧が低いというようなものを作成したいと思っています。
MATLAB上でそのような物理的なシミュレーションを行うことは可能でしょうか?
参考までに現在作成しているプログラムを載せておきます
function a = Three_dimention_soundsource_monopole(f,max,interval,min)
% 定数定義
w = 2*pi*f;
lambda = 340/f;
k = 2*pi/lambda;
p = 1.293;
c = 340
A = 1/k^2*p*c
% 計算部
[X,Y,Z] = meshgrid(min:interval:max);
x1 = X;
y1 = Y - max/2;
z1 = Z;
x2 = X - max/2;
y2 = Y ;
z2 = Z ;
x3 = X + max/2;
y3 = Y ;
z3 = Z ;
x4 = X ;
y4 = Y + max/2
z4 = Z ;
x5 = X - max/(2*sqrt(2));
y5 = Y - max/(2*sqrt(2));
z5 = Z ;
x6 = X + max/(2*sqrt(2));
y6 = Y + max/(2*sqrt(2));
z6 = Z ;
x7 = X + max/(2*sqrt(2));
y7 = Y - max/(2*sqrt(2));
z7 = Z ;
x8 = X - max/(2*sqrt(2));
y8 = Y + max/(2*sqrt(2));
z8 = Z ;
soundsorce1 = 1i*w*p*A/sqrt(x1.^2+y1.^2+z1.^2).*exp(-1i*k*sqrt(x1.^2+y1.^2+z1.^2));
soundsorce2 = 1i*w*p*A/sqrt(x2.^2+y2.^2+z2.^2).*exp(-1i*k*sqrt(x2.^2+y2.^2+z2.^2));
soundsorce3 = 1i*w*p*A/sqrt(x3.^2+y3.^2+z3.^2).*exp(-1i*k*sqrt(x3.^2+y3.^2+z3.^2));
soundsorce4 = 1i*w*p*A/sqrt(x4.^2+y4.^2+z4.^2).*exp(-1i*k*sqrt(x4.^2+y4.^2+z4.^2));
soundsorce5 = 1i*w*p*A/sqrt(x5.^2+y5.^2+z5.^2).*exp(-1i*k*sqrt(x5.^2+y5.^2+z5.^2));
soundsorce6 = 1i*w*p*A/sqrt(x6.^2+y6.^2+z6.^2).*exp(-1i*k*sqrt(x6.^2+y6.^2+z6.^2));
soundsorce7 = 1i*w*p*A/sqrt(x7.^2+y7.^2+z7.^2).*exp(-1i*k*sqrt(x7.^2+y7.^2+z7.^2));
soundsorce8 = 1i*w*p*A/sqrt(x8.^2+y8.^2+z8.^2).*exp(-1i*k*sqrt(x8.^2+y8.^2+z8.^2));
anser = abs(soundsorce1 + soundsorce2 + soundsorce3 + soundsorce4 + soundsorce5 + soundsorce6 + soundsorce7 + soundsorce8);
xslice = 0;
yslice = [];
zslice = 0;
% プロット部
slice(X,Y,Z,anser,xslice,yslice,zslice)
title('3次元空間の音圧分布')
xlabel('x[m]')
ylabel('y[m]')
zlabel('z[m]')
c = colorbar;

채택된 답변

Shunichi Kusano
Shunichi Kusano 2020년 5월 30일
편집: Shunichi Kusano 2020년 5월 30일
簡単のため、音源が原点にあるとしまして、音が最大になる向き(スピーカーの正面方向:以下p1)を決めれば、任意の単位ベクトルp2とのなす角は、内積から計算できますので、あとは角度に対して、指向性がどうなるのかという関数を決めてあげれば、指向性を実装できます。
例えばx方向にcos関数で指向性を与える場合、
p1 = [1 0 0];
[X,Y,Z] = meshgrid([-1:0.01:1],[-1:0.01:1],[-1:0.01:1]);
p2 = [X(:),Y(:),Z(:)];
p2 = normalize(p2, 2, 'norm'); % 単位ベクトルに
theta = reshape(acos(p2*p1.'), size(X)); % 各グリッド上で、p1とのなす角
directivity = cos(theta); % 指向性の関数
directivity(directivity < 0) = 0; % 後ろ側はゼロ
% 確認のため表示
slice([-1:0.01:1],[-1:0.01:1],[-1:0.01:1],directivity, [0.3 0.6 1],[0],[0])
shading flat
directivityをsoundsourceに要素ごとに掛ければ指向性を含んだ音圧表現になるかと思います。
  댓글 수: 3
kaiho inoue
kaiho inoue 2020년 6월 1일
丁寧なご説明ありがとうございます、、、!!
指向性の関数についてはまた自分でも検討してみたいと思います。
ありがとうございました

댓글을 달려면 로그인하십시오.

추가 답변(0개)

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!