1.理论基础(模态叠加法)
1.1基础参数定义
首先定义板的基本参数:为板的长度和宽度;为板密度;为板厚度;为板的弯曲刚度;为板杨氏模量;为板泊松比;为板损耗因子;
其次定义声学参数: 为空气密度;为空气声速;为入射声波幅值;为入射俯仰角;为入射方位角;为角频率;为波数;为入射声波在坐标轴三个方向的波数分量;
1.2动力学方程
在声场作用下板的动力学响应方程为
梯度算子:
板的横向弯曲位移:
入射声场、辐射声场速度势函数:
固支边界模态型函数:
简支边界模态型函数:
以为模态位移系数的模态位移:
空气-板耦合界面上速度连续,入射声波、反射声波、透射声波的速度势幅值系数关系:
1.3模态叠加
运用模态叠加法,将动力学方程等式做模态型函数的加权积分:两边同时乘以模态型函数并对xy求积分
利用1.2节中的公式进行展开
其中
方程经过模态截断,可以表示成关于模态位移系数的MN个方程组,写成矩阵形式
其中
运算过程可以简写为
通过矩阵运算求得模态位移系数矩阵
1.4求解隔声量
根据入射声压,共轭入射声速,入射声能量可以写为
根据
入射声能量可以改写为
同理投射声能量可以写为
相关积分式可以写作
隔声量可以按公式求解
2.Matlab实现
2.1构建矩阵
function [delta11,delta12,delta13,delta21,delta22,delta23,delta24] = GetDelta(Lx,Ly,M,N)
%% delta11,delta12求解
delta11 = [];
delta12 = [];
diagone = ones(M,N)-diag(ones(M,1),0);
for n = 1:1:N
for m = 1:1:M
lamdars1 = 3*((m/Lx)^4)+3*((n/Ly)^4)+2*((m/Lx)^2)*((n/Ly)^2);%lamdars1计算出来是数值
delta11 = [delta11,lamdars1];
end
lamdars2 = (2*(n^4)/(Ly^4)).*diagone;%lamdars2计算出来是一个M*N的矩阵
delta12 = blkdiag(delta12,lamdars2);
end
delta11 = diag(delta11,0);
%% delta13求解
lamda13 = (zeros(M,N)+diag(ones(M,1),0));
for i = 1:1:M
lamda13(i,i) = (2/(Lx^4))*(i^4);
end
delta13 = GenerateDiag(lamda13,M,N,1);
%% delta21求解
delta21 = (9*Lx*Ly/4)*diag(ones(M*N,1),0);
%% delta22求解
lamda22 = (3*Lx*Ly/2).*diagone;
delta22 = GenerateDiag(lamda22,M,N,2);
%% delta23求解
lamda23 = (3*Lx*Ly/2).*diag(ones(M,1),0);
delta23 = GenerateDiag(lamda23,M,N,1);
%% delta24求解
lamda24 = (Lx*Ly).*diagone;
delta24 = GenerateDiag(lamda24,M,N,1);
end
构建过程中需要利用矩阵堆叠出对角矩阵,此功能写成子函数GenerateDiag(lamda,M,N,flag)
function delta = GenerateDiag(lamda,M,N,flag)
%% 构建以为同维度0矩阵对角元素、以目标矩阵为其他元素的对角阵
if flag==1
tempx = [];
tempy = [];
tempz = [];
%构建出全为lamda的矩阵
for i = 1:1:M
tempx = [tempx lamda];
end
for j = 1:1:N
tempy = [tempy;tempx];
end
%构建出以lamda为对角的矩阵
for i = 1:1:M
tempz = blkdiag(tempz,lamda);
end
%做差得到结果
delta = tempy-tempz;
%% 构建以相同目标矩阵为对角元素、以同维度0矩阵为其他元素的对角阵(其中输入lamda为目标矩阵).0
elseif flag==2
delta = [];
for i = 1:1:M
delta = blkdiag(delta,lamda);
end
%% flag标志位异常,抛出错误
else
error('flag标志位异常!')
end
end
2.2构建矩阵
function [F,I] = GetF(M,N,Pin,kx,ky,Lx,Ly,w,rho0,j)
F = zeros(M*N,1);
I = zeros(M*N,1);
k = 1;
for n = 1:1:N
for m = 1:1:M
I(k,1) = Pin*GetFx(kx,ky,Lx,Ly,j,m,n);
F(k,1) = 2*j*w*rho0*I(k,1);
k = k+1;
end
end
end
Fx分类讨论子函数
function fx = GetFx(kx,ky,a,b,j,m,n)
if kx==0&&ky==0
fx = a*b;
elseif kx==0&&ky~=0
fx = (4*j*n^2*pi^2*a*(1-exp(-j*ky*b)))/(ky*(ky^2*b^2-4*n^2*pi^2));
elseif kx~=0&&ky==0
fx = (4*j*m^2*pi^2*b*(1-exp(-j*kx*a)))/(kx*(kx^2*a^2-4*m^2*pi^2));
elseif kx~=0&&ky~=0
fx = -(16*m^2*n^2*pi^4*(1-exp(-j*ky*b))*(1-exp(-j*kx*a)))/(kx*ky*(ky^2*b^2-4*n^2*pi^2)*(kx^2*a^2-4*m^2*pi^2));
else
error('kx、ky错误');
end
2.3求解隔声量
function TL = GetTL(alpha1,rho0,w,c0,I,kx,ky,kz,a,b,M,N,j)
%alpha由MN*1重排为M*N;为了(m,n)能直接取到对应元素
alpha1 = reshape(alpha1,[M,N]);
K = M;
L = N;
Sum11 = 0;%算子11
Sum12 = 0;%算子12
Sum13 = 0;%算子13
for m = 1:1:M
for n = 1:1:N
if kx==0&&ky==0
Sum11 = a*b;
Sum12 = Sum12+alpha1(m,n)*a*b;
elseif kx==0&&ky~=0
Sum11 = j*a*(-1+exp(-2*j*ky*b))/(2*ky);
Sum12 = Sum12+alpha1(m,n)*4*j*n^2*pi^2*a*(1-exp(-j*ky*b))/(ky*(ky^2*b^2-4*n^2*pi^2));
elseif kx~=0&&ky==0
Sum11 = j*b*(-1+exp(-2*j*kx*a))/(2*kx);
Sum12 = Sum12+alpha1(m,n)*4*j*m^2*pi^2*b*(1-exp(-j*kx*a))/(kx*(kx^2*a^2-4*m^2*pi^2));
elseif kx~=0&&ky~=0
Sum11 = -(1-exp(-2*j*kx*a)-exp(-2*j*ky*b)+exp(-2*j*(kx*a+ky*b)))/(4*kx*ky);
Sum12 = Sum12+alpha1(m,n)*16*(-1)*m^2*n^2*pi^4*(1-exp(-j*ky*b)*(1-exp(-j*kx*a)))/(kx*ky*(kx^2*a^2-4*m^2*pi^2)*(ky^2*b^2-4*n^2*pi^2));
end
for k = 1:1:K
for i = 1:1:L
if m==k&&n==i
Sum13 = Sum13+alpha1(m,n)*alpha1(k,i)*(9*a*b/4);
elseif m==k&&n~=i
Sum13 = Sum13+alpha1(m,n)*alpha1(k,i)*(3*a*b/2);
elseif m~=k&&n==i
Sum13 = Sum13+alpha1(m,n)*alpha1(k,i)*(3*a*b/2);
elseif m~=k&&n~=i
Sum13 = Sum13+alpha1(m,n)*alpha1(k,i)*(a*b);
end
end
end
end
end
Win =(rho0*w^2/(2*c0))*abs(4*I^2*Sum11-(4*I*w/kz)*Sum12+(w/kz)^2*Sum13);
Wr = (rho0*w^2/(2*c0))*abs((w/kz)^2*Sum13);
TL = 10*log10(Win/Wr);
end
2.4主子函数
function RigidPlate()
j = sqrt(-1);
%% 预分配内存
F=zeros(10000,1);
TLbare = zeros(10000,1);
bar= waitbar(0,'Simulation in process');%显示运算进度
%% 空气参数定义
rho0 = 1.21;%空气密度
c0 = 343;%空气声速
phi = 0;%入射角
theta = 0;%方位角
Pin = 1;%入射波幅值
%% 板参数定义
rho = 2700;%板密度
E = 70e9;%板杨氏模量
v = 0.3;%板泊松比
h = 0.0005;%板厚度
Lx = 0.06;%板x方向长度
Ly = 0.06;%板y方向长度
%% 平板参数定义
D = E*(1+j*0.005)*h^3/(12*(1-v^2)); %板的弯曲刚度
%模态截断
M = 20;
N = 20;
%% 求解delta算子
[delta11,delta12,delta13,delta21,delta22,delta23,delta24] = GetDelta(Lx,Ly,M,N);
%% 隔声系数计算
fmin = 1;%计算下限
fmax = 10000;%计算上限
df = 1;
for f = fmin:df:fmax
s=['Simulation in process:' num2str(ceil((f-fmin)*100/(fmax-fmin))) '%'];
waitbar((f-fmin)/(fmax-fmin),bar,s);%进度显示
w = 2*pi*f;
k0 = w/c0;
kx = k0*sin(phi)*cos(theta);
ky = k0*sin(phi)*sin(theta);
kz = k0*cos(phi);
%求解Mrs、Frs
Mrs = (4*D*(pi^4)*Lx*Ly).*(delta11+delta12+delta13)-(rho*h*(w^2)+j*w*rho0*2*w/kz).*(delta21+delta22+delta23+delta24);
[Frs,I] = GetF(M,N,Pin,kx,ky,Lx,Ly,w,rho0,j);
abare = Mrs\Frs;
F(f) = f;
TLbare(f) = GetTL(abare,rho0,w,c0,Pin,kx,ky,kz,Lx,Ly,M,N,j);
end
semilogx(F(fmin:df:fmax),TLbare(fmin:df:fmax),'k','linewidth',2);
end
仿真时调用主子函数即可。