网上科普有关“如何用matlab分析labview中的声压”话题很是火热,小编也是针对如何用matlab分析labview中的声压寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
%A计权声压级频谱分析
clc;
clear;
close all;
%时域分析
y=wavread('abc.wav');
%频域分析
fs=51200;%采样频率
p0=2e-5;%参考声压
f=[1.00 1.25 1.600 2.00 2.50 3.15 4.00 5.00 6.30 8.0]; %基准中心频率
f1=[20.00 25.0 31.5 40.0 50.0 63.0 80];
fc=[f1,100*f,1000*f,10000*f]; %%%%%%%%%中心频率%%%%%%%%
%20-16000Hz A声级计权值
cf=[-50.5,-44.7,-39.4,-34.6,-30.2,-26.2,-22.5,-19.1,-16.1,-13.4,-10.9,-8.6,-6.6,-4.8,-3.2,-1.9,-0.8,0,0.6,1.0,1.2,1.3,1.2,1.0,0.5,-0.1,-1.1,-2.5,-4.3,-6.6];
x=y(t1*fs:t2*fs);%截取需要处理的数据段
n=length(x);
t=(0:1/fs:(n-1)/fs);
subplot(221);
plot(t,x);%瞬时声压时程图
w=hanning(n); %汉宁窗
xx=1.633*x.*w; %加汉宁窗(恢复系数为1.633)
nfft=2^nextpow2(n);
%nextpow2(n)-取最接近的较大2次幂
a = fft(xx,nfft);
f = fs/2*linspace(0,1,nfft/2);
w=2*abs(a(1:nfft/2)/n);
subplot(222);
plot(f,w);%绘制频谱图
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%1/3倍频程计算
oc6=2^(1/6);
nc=length(cf);
%下面这个求1/3倍频程的程序是按照振动振级计算那个来的
for j=1:nc
fl=fc(j)/oc6;
fu=fc(j)*oc6;
nl=round(fl*nfft/fs+1);
nu=round(fu*nfft/fs+1);
if fu>fs/2
m=j-1;
break;
end
b=zeros(1,nfft);
b(nl:nu)=a(nl:nu);
b(nfft-nu+1:nfft-nl+1)=a(nfft-nu+1:nfft-nl+1);
c=ifft(b,nfft);
yc(j)=sqrt(var(real(c(1:nnn))));
end
aj_sumn=0;
for i=1:nc
Lp1(i)=20*log10(yc(i)/p0);%未计权1/3倍频程声压级
end
%%%%%
for jj=1:nc
aj_sumn=aj_sumn+10^(0.1*Lp1(j));
end
Lp=10*log10(aj_sumn);%未计权总声压级
subplot(223);%绘制未计权1/3倍频程声压级图谱
bar(Lp1(1:nc));
gg=zeros(1,nc);
for i=1:nc
gg(1:nc)=fc(1:nc);
end
ggg=1:nc;
set(gca,'xtick',ggg);
set(gca,'xticklabel',gg);
%%%%%A计权1/3倍频程声压级
Lap=Lp1+cf;
aj_sum=0;
for j=1:nc
aj_sum=aj_sum+10^(0.1*Lap(j));
end
LA=10*log10(aj_sum);%Aa计权总声压级
subplot(224);%绘制A计权1/3倍频程声压级图谱
bar(Lap(1:nc));
gg=zeros(1,nc);
for i=1:nc
gg(1:nc)=fc(1:nc);
end
ggg=1:nc;
set(gca,'xtick',ggg);
set(gca,'xticklabel',gg);
matlab用od45解微分方程组。求改错。
可以这样做:
主程序
clc;clearA=[1,2];
B=[2,3];
C=[1,4];
[CC,Radius]=CircleThru3Dots(A,B,C);
fprintf('坐标:(%f,%f)\n',CC)
fprintf('半径:%f\n\n',Radius)
函数程序
function?[CC,Radius]=CircleThru3Dots(A,B,C)Ah=A*A';
Bh=B*B';
Ch=C*C';
CC=zeros(size(A));
G=(C(2)-B(2))*A(1)+(A(2)-C(2))*B(1)+(B(2)-A(2))*C(1);
CC(1)=((Bh-Ch)*A(2)+(Ch-Ah)*B(2)+(Ah-Bh)*C(2))/(2*G);
CC(2)=-((Bh-Ch)*A(1)+(Ch-Ah)*B(1)+(Ah-Bh)*C(1))/(2*G);
Radius=sqrt((A-CC)*(A-CC)');
theta=linspace(0,2*pi,101);
x=CC(1)+Radius*cos(theta);
y=CC(2)+Radius*sin(theta);
plot(x,y,'r-')
ABC=[A;B;C];
hold?on
plot(ABC(:,1),ABC(:,2),'b.','markersize',20)
plot(CC(1),CC(2),'r.','markersize',20)
grid?on
box?off
axis?equal
end
效果图
怎样用MATLAB拟合两个自变量的函数系数和指数
a、b、c的取值有问题,长度不为10,检查一下。
法一:在script和function里面申明abc为全局变量
global a b c
法二:使用匿名函数
clc
format long
t=0.001:0.001:20;
x0=[3 -4 2];
a=0.3:0.3:3;
b=-6:-1:-15;
c=-1:-1:-10;
for k=1:10
f=@(t,x)([a(k)*x(1)-x(2)*x(3);b(k)*x(2)+x(1)*x(3);c(k)*x(3)+x(1)*x(2)]);
[t,x]=ode45(f,t,x0);
plot(t,x);
hold on
end
xlabel('t'),legend('x','y','z');
这个就看做是非线性拟合吧,仿照下面的例子:
function shiyan2
x1 = linspace( 0.5, 10, 15 );
x2 = linspace( 10, 20, 15 );
y = 2.5 * x1.^0.5 .* x2.^0.3;? % 假设公式是这样的
% 利用已知数据进行非线性拟合,根据经验给abc一个初始值1, 1, 1,初始值不一定非要很准确
p = lsqcurvefit( @subfun, [ 1, 1, 1 ], [ x1', x2' ], y' );
disp( '拟合参数结果如下:' )
disp( [ 'a = ', num2str( p( 1 ) ), ', b = ', num2str( p( 2 ) ), ...
', c = ', num2str( p( 3 ) ) ] );
function ydata = subfun( p, xdata )
ydata = p( 1 ) * xdata( :, 1 ).^p( 2 ) .* xdata( :, 2 ).^p( 3 );
关于“如何用matlab分析labview中的声压”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
本文来自作者[梦旋]投稿,不代表创健号立场,如若转载,请注明出处:https://www.chuangjian-nb.com/cshi/202505-14091.html
评论列表(4条)
我是创健号的签约作者“梦旋”!
希望本篇文章《如何用matlab分析labview中的声压》能对你有所帮助!
本站[创健号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育
本文概览:网上科普有关“如何用matlab分析labview中的声压”话题很是火热,小编也是针对如何用matlab分析labview中的声压寻找了一些与之相关的一些信息进行分析,如果能碰...