matlab实现三分之一倍频程,三分之一倍频程程序
方法一:%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];
t1=1;
t2=2;
x=y(t1*fs+1: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:n))));
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);
方法二:
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];
n=length(y);
t=(0:1/fs:(n-1)/fs);
h1=figure;
plot(t,y);
title('瞬时声压时程');
xlabel('Time(s)');
ylabel('Sound Presure Value(Pa)');
%
t1=0;
t2=4;
x=y(t1*fs+1:t2*fs);%截取需要处理的数据段
n=length(x);
%t=(0:1/fs:(n-1)/fs);
%plot(t,x);%瞬时声压时程图
w=1.633*hanning(n); %汉宁窗(恢复系数为1.633)
%w=1.812*blackmanharris(n); %布拉克曼窗(功率相等恢复系数1.812) xx=x.*w; %加汉宁窗
nfft=2^nextpow2(n); %nextpow2(n)-取最接近的较大2次幂 a = fft(xx,nfft)/n;
%f = fs/2*linspace(0,1,nfft/2);
w=2*abs(a(1:nfft/2));
oc6=2^(1/6);
nc=length(cf);
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
p=w(nl:nu);
lp=length(p);
k=0;
for ii=1:lp
if ii+2>lp
break
end
if p(ii+1)>p(ii)&&p(ii+1)>p(ii+2)
k=k+1;
pp(k)=p(ii+1)/sqrt(2);
end
end
p2(j)=sum(pp.*pp);
end
Lp=10*log10(p2/p0^2);
for jj=1:length(Lp)
Lp1(jj)=10^(Lp(jj)/10);
end
Lpt=10*log10(sum(Lp1))
h2=figure;
mm=nc;
bar(Lp(1:mm));
gg=zeros(1,mm);
for i=1:mm
gg(1:mm)=fc(1:mm);
end
ggg=1:mm;
set(gca,'xtick',ggg);
set(gca,'xticklabel',gg);
set(gcf,'PaperPosition',[1,1,40,20])
set(gca,'fontsize',10)
xlabel('Frequency(Hz)');
ylabel('SPL(dB)');
title('未计权声压级');
grid on;
方法三:
% 三分之一倍频程处理
clear;
clc;
close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% s = xlsread('ay.xls');%输入时程数据
sf=256; %采样频率
x=s(:,2); %定义三分之一倍频程的中心频率
f=[1.00 1.25 1.60 2.00 2.50 3.15 4.00 5.00 6.30 8.00]; fc=[f,10*f,100*f,1000*f,10000*f];
%中心频率与下限频率的比值
oc6=2^(1/6);
%取中心频率总的长度
nc=length(fc);
%输入数据的长度
n=length(x);
%大于并接近n 的2的幂次方长度
nfft=2^nextpow2(n);
%FFT变换
a=fft(x,nfft);
for j=1:nc
%下线频率
fl=fc(j)/oc6;
%上限频率
fu=fc(j)*oc6;
%下限频率对应的序号
nl=round(fl*nfft/sf+1);
%上限频率对应的序号
nu=round(fu*nfft/sf+1);
%如果上相频率大于折叠频率则循环中断 if fu>sf/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(b(1:n))));
end
%绘制输入时程曲线图形
subplot(2,1,1);
t=0:1/sf:(n-1)/sf;
plot(t,x);
xlabel('时间(s)');
ylabel('加速度(g)');
grid on;
%绘制三分之一倍频程有效值图形 subplot(2,1,2);
plot(fc(1:m),yc(1:m));
xlabel('频率(Hz)');
ylabel('有效值');
grid on;
%保存倍频程数据
fid=fopen(fno,’w ’);
for k=1:m;
fprintf(fid,’%f %f\n’,fc(k),yc(k));
end
status=fclose(fid);
matlab实现三分之一倍频程,三分之一倍频程程序相关推荐
- 2倍频程、1倍频程、1/3倍频程介绍
什么是倍频程?有何用? 倍频程,又称倍波程,指在滤波特性曲线上,频率或波长之比为2或1/2的两个频率或波长之间的间隔.常用于音响设备的音频信号分析. 声音信号的频率范围为20Hz~20kHz.分析音频 ...
- 基于matlab的车牌识别系统程序,基于matlab的车牌识别系统的设计(附程序).doc
基于matlab的车牌识别系统的设计(附程序).doc 1车牌识别系统的设计1.摘要:汽车牌照自动识别系统是制约道路交通智能化的重要因素,包括车牌定位.字符分割和字符识别三个主要部分.本文首先确定车辆 ...
- 用matlab绘制P三曲线,知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画三维曲线...
导航:网站首页 > 知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画三维曲线 知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画 ...
- matlab 程序 收缩,基于MATLAB的小波收缩去噪方法研究(程序)
基于MATLAB的小波收缩去噪方法研究(程序)(课题申报表,任务书,开题报告,中期检查表,外文翻译,论文15400字,程序,答辩PPT) 摘 要 信号在采集.传输和获取的过程中难免会受到各种噪声的干扰 ...
- PCR主成分回归预测MATLAB代码 代码注释清楚。 main为主程序,读取EXCEL数据
PCR主成分回归预测MATLAB代码 代码注释清楚. main为主程序,读取EXCEL数据,也可以换自己数据集. 很方便,容易上手. ID:9624654486820873总有刁民膜拜朕
- 使用Matlab+Simulink开发Cortex-M系列嵌入式处理器应用程序
使用Matlab+Simulink开发Cortex-M系列嵌入式处理器应用程序 文档编号 TN_AAAA_A0 关键字 Matlab, Simulink, Cortex-M, 基于模型设计, Mode ...
- ssb的matlab仿真,基于matlab软件仿真——单边带、双边带调制解调程序和Simulink建模仿真...
内容简介: 基于matlab软件仿真--单边带.双边带调制解调程序和Simulink建模仿真,毕业论文,共22页,7757字,附开题报告.源程序. [摘要]:本文利用Simulink软件上的动态集成建 ...
- matlab做万有特性曲线,MATLAB的发动机万有特性曲线绘制方法程序
<MATLAB的发动机万有特性曲线绘制方法程序>由会员分享,可在线阅读,更多相关<MATLAB的发动机万有特性曲线绘制方法程序(2页珍藏版)>请在人人文库网上搜索. 1.不同转 ...
- PCR主成分回归预测MATLAB代码 代码注释清楚。 main为主程序,读取EXCEL数据,也可以换自己数据集
PCR主成分回归预测MATLAB代码 代码注释清楚. main为主程序,读取EXCEL数据,也可以换自己数据集. 很方便,容易上手. ID:6924654486820873总有刁民膜拜朕
- matlab 三分之一倍频程,三分之一倍频程谱
三分之一倍频程谱是一种频率分析方法,它具有谱线少频带宽的特点. 倍频程实际上是频域分析中频率的一种相对尺度.倍频程谱是由一系列频率点以及对应这些频率点附近的频带内信号的平均幅值(有效值)所构成.这些频 ...
最新文章
- TCP/IP / 网关 IP 和 DNS 服务器 IP 为什么可以一样?
- Delphi各个版本和发展历史
- 暑期训练日志----2018.8.9
- a人工智能b大数据c云计算_你清楚5G物联网、大数据、云计算、人工智能之间的关联吗?...
- java webservice wsimport 无法将名称 'soapenc:Array' 解析为 'type definition' 组件 时对应的解决方法...
- ubuntu 7.04 Feisty Fawn 安装手记之 一:系统安装
- Web API-DOM事件高级
- 【matlab】在图中插入矩形(框or阴影)
- (转)DPDK内存管理 01 -----初始化
- linux smartctl 命令,在 CentOS 7 里用 smartctl 和 hdparm 对硬盘进行基本测试
- 简单的机器学习程序_发那科机器人编写简单的程序教程
- 计算机语言异或符号,异或门的电路符号表达_XOR的电路实现
- NB-IoT、LoRa逐渐商用 连接物联网长尾效应凸显
- SIGIR'22 | 阿里 ESCM^2: 升级版全空间多任务转化率预估
- 《租车管理系统 ——“订单管理(代驾)”模块》项目研发阶段性总结
- STM32单片机串口空闲中断+DMA接收不定长数据
- html怎么放边框,html怎么设置边框
- spring boot基础简介
- codelite+mingw安装
- python pdb模块_使用Python中PDB模块中的命令来调试Python代码的教
热门文章
- Vue之如何动态渲染.vue文件
- 哈佛架构、冯诺依曼架构、指令集
- 软件测试自动生成测试数据,软件测试中测试数据的自动生成方法浅析
- 酷睿i7 1165g7相当于什么水平 i71165g7属于哪个档次
- Java高并发累加器Striped64
- 杰奇小说系统百度地图生成插件
- 删除hive的分区元数据,spark总是读取到已经删掉的分区
- Chapter 9 (Classical Statistical Inference): Binary Hypothesis Testing
- Linux-CentOS 安装yasm
- MybatisPlus查询条件和排序高级封装