1.理论基础(模态叠加法)
1.1基础参数定义
首先定义板的基本参数:为板的长度和宽度;为板密度;为板厚度;为板的弯曲刚度;为板杨氏模量;为板泊松比;为板损耗因子;
其次定义声学参数: 为空气密度;为空气声速;为入射声波幅值;为入射俯仰角;为入射方位角;为角频率;为波数;为入射声波在坐标轴三个方向的波数分量;
1.2动力学方程
在声场作用下板的动力学响应方程较普通固支板在等式右侧增加了振子对板的作用力:
梯度算子:
板的横向弯曲位移:
入射声场、辐射声场速度势函数:
固支边界模态型函数:
简支边界模态型函数:
以为模态位移系数的模态位移:
空气-板耦合界面上速度连续,入射声波、反射声波、透射声波的速度势幅值系数关系:
1.3振子参数定义
分别为x,y方向振子分布个数,振子的总个数定义为:
振子沿坐标轴分布的坐标定义为:
将振子的位移系数表示为,振子的横向位移可以写为:
振子横向位移和板横向位移之间的传递系数定义为
局域振子对板的作用力
1.4模态叠加
运用模态叠加法,将动力学方程等式做模态型函数的加权积分:两边同时乘以模态型函数并对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 [F,TL] = RigidMetamateiralPlate()
close all;
j = sqrt(-1);
%% 预分配内存
F=zeros(10000,1);
TL=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方向长度
%% 振子参数定义
fobj = 200;%振子设计共振频率
u = 0.2;%振子/板质量比
Nx = 1;%x方向振子个数
Ny = 1;%y方向振子个数
eta = 0.005;%材料损耗因子
mp = Lx*Ly*h*rho;%板质量
md = u*mp; %振子质量
kr = (2*pi*fobj).^2.*md;
kj = kr*(1+j*eta);%振子弹性系数
deltax = Lx/Nx;%振子沿x分布距离差
deltay = Ly/Ny;%振子沿y分布距离差
%振子沿x分布坐标
x = zeros(Nx,1);
for nx = 1:1:Nx
x(nx,1) = deltax*(nx-1)+deltax/2;
end
%振子沿y分布坐标
y = zeros(Ny,1);
for ny = 1:1:Ny
y(ny,1) = deltay*(ny-1)+deltay/2;
end
%% 平板参数定义
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、R、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);
R = GetR(x,y,M,N,md,w,kj,Lx,Ly);
[Frs,I] = GetF(M,N,Pin,kx,ky,Lx,Ly,w,rho0,j);
a = (Mrs-R)\Frs;
F(f) = f;
TL(f) = GetTL(a,rho0,w,c0,Pin,kx,ky,kz,Lx,Ly,M,N,j);
end
close(bar);
plot(F(1:1:1500),TL(1:1:1500),'k','linewidth',2);
end
仿真时调用主子函数即可。
3.仿真结果
3.1隔声量图:
3.2模态截断收敛图:
4.需要注意的点
4.1文章中的一些错误
本文仅针对文章中第2章部分内容进行了复现,在复现过程中发现了一些文章的书写错误,在此告知以避免其它学者在学习过程中产生误解。
1.文章2.2.2节中此处空气密度应为1.21kg/m^3;
2.文章第2.2.3节中四边固支模态型函数应为:
3. 文章第2.2.3节中函数表达式应为:
4.2文章中表达不明确的地方
1.隔声量的计算过程
可以参考本文的计算过程,参考自
2.模态截断收敛性
模态阶段的收敛阶数是和板的尺寸相关联的,这个文章中好像没有提到(也有可能是我没看到),文章在做数值计算的时候,刚开始采用的是Lx=Ly=0.06m;后来在和有限元结果对比时采用的是Lx=0.3m,Ly=0.25m;但是并没有提到截断阶数M、N的更新问题;我稍微验证了一下更改尺寸后需要约50阶截断;这一个地方在做理论分析的时候需要注意一下,针对不同尺寸的板首先要做截断收敛性分析,确定收敛阶数MN再去计算隔声量;
5.所复现文献
[1]张若军. 典型声学超材料的低频隔声特性研究[D].国防科学技术大学,2015.
[2]张若军,肖勇,温激鸿,郁殿龙.四边固支局域共振型板的低频隔声特性研究[J].振动工程学报,2016,29(05):905-912.DOI:10.16385/j.cnki.issn.1004-4523.2016.05.019.
6.基于等效介质法的拓展解法
6.1等效介质法(Efftective Medium Method)
等效介质法的思想是将振子等效成一个随频率改变的动态质量附加在平板上,将含振子的超材料板等效为一块具有动态质量密度的光板,最后采用有限大固支边界光板模态叠加的计算方法计算隔声量;是以下两篇文章理论内容的的叠加组合;
局域振子声学超材料等效介质法Matlab实现(Xiao Yong老师论文复现)
振子参数定义为:振子/板质量比,振子设计共振频率,振子损耗因子0.005
等效动态质量密度:
将固支边界有限大平板隔声理论及Matlab实现中的动力学方程替换为以下形式即可
6.2Matlab实现
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方向长度
%% 振子参数定义
eta = 0.001;%振子损耗因子
u = 0.2;%振子/板质量比
fr = 200;%振子设计共振频率
wr = 2*pi*fr;%振子设计共振角频率
%% 平板参数定义
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 = 1500;%计算上限
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);
rhoeff = rho+u*rho/(1-(w^2/wr^2*(1+j*eta)));%等效介质法得到的动态质量密度
%求解Mrs、Frs
Mrs = (4*D*(pi^4)*Lx*Ly).*(delta11+delta12+delta13)-(rhoeff*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
plot(F(fmin:df:fmax),TLbare(fmin:df:fmax),'k','linewidth',2);
end
其余子函数均保持不变,仅修改主子函数即可;