点声源模拟无限大障板活塞辐射 求空间指向型

点声源叠加模拟无限大障板活塞辐射 求指向型

圆形活塞所以使用极坐标进行计算 只是为求指向型 可以忽略常系数

周长2*pi*r随r扩展 所以针对不同半径 点声源个数与r成线性关系

数值求解与解析公式作图对比

将平面指向型转化为空间指向型

据我所知 Matlab中无之间绘制球坐标函数 于是转化为直角坐标后画出

欢迎指正

clear all;close all;

f=20000;

w=f*2*pi; %频率

k=w/343; %波数



a=0.05; %活塞半径

r=10; %远场距离



theta=(-90:0.5:90)*pi/180; %方向性

R=a/20:a/20:a ;%半径

sum=zeros(1,length(theta));

sum1=zeros(1,length(theta));

for i=1:length(theta)

    h=r;

    sum(i)=sum(i)+w/h*exp(-1j*k*h);%中心位置

    sum1(i)=sum(i);

   

    for j=1:length(R)

        l=j*80;

        for n=1:l %循环个数 一圈内的个数

            %不近似

            h=sqrt(r*r+R(j)*R(j)-2*r*R(j)*sin(theta(i))*cos(n*2*pi/l));

            sum(i)=sum(i)+w/h*exp(-1j*k*h);

            %近似

            h1=r-R(j)*sin(theta(i))*cos(n*2*pi/l);

            sum1(i)=sum(i)+w/r*exp(-1j*k*h);



        end

    end

end

sum=abs(sum);

sum=sum/max(sum);%归一化

sum1=abs(sum1);

sum1=sum1/max(sum1);



figure

plot(theta,sum,'b');title('不近似')

plot(theta,sum1,'r');title('近似')

legend('不近似','近似');



figure

% subplot(1,2,1)

plot(theta,sum,'b');

hold on



D=zeros(1,length(theta));

for i=1:length(theta) %公式求解

    D(i)=abs(2*besselj(1,k*a*sin(theta(i)))/(k*a*sin(theta(i))));

end



% subplot(1,2,2)

plot(theta,D,'r');title('对比')

hold off

legend('叠加模拟','公式计算');



figure

% subplot(1,2,1)

polar(theta,sum,'b');

hold on

% subplot(1,2,2)

polar(theta,D,'r');title('极坐标对比')

hold off

legend('叠加模拟','公式计算');



X=cos(theta)'*theta;%为2维旋转成3维 生成坐标

Y=sin(theta)'*theta;



% figure %公式的二维旋转

% surf(X,Y,repmat(D,length(t),1));

% shading interp



figure

surf(X,Y,repmat(sum,length(theta),1));

shading interp



% plot(cos(theta).*sum,sin(theta).*sum);%直角坐标转为极坐标

figure%旋转极坐标图 画出

surf(repmat(cos(theta).*sum,length(theta),1),cos(theta)'*sin(theta).*sum,sin(theta)'*sin(theta).*sum);

shading interp

你可能感兴趣的:(点声源模拟无限大障板活塞辐射 求空间指向型)