基于Matlab的1/3倍频程计算

倍频程定义倍频程理解

倍频程表示的是相应倍频程带内的功率(能量)之和,其详细理论课参考其他文章,在计算倍频程之前需要将时域信号进行傅里叶变化,本文基于功率谱密度进行倍频程计算。

计算自功率谱密度

计算一维数组x的自功率谱密度:

n=length(x);
if mod(n,2)==0
	%偶数
else 
	n=n-1;
end
windows=hann(n);
x1=detrend(x); %去除线性趋势项
x1=x1(1:n).*windows; %时域数据加汉宁窗
y=fft(x1,n);
f=(0:(n-1)/2)/n*fs; %根据对称性取频率一半,fs为采样周期
P1=y(1:n/2);
P1(2:end-1)=2*P1(2:end-1); %得到单边复数频谱
P1=P1/n; %单边复数频谱的真实值
AP=P1.*conj(P1); %计算自功率谱
APL=AP/(fs/n); %自功率谱密度
APL=APL*1.6333; %加窗造成的衰减,需要乘以汉宁窗恢复系数。

计算倍频程

ajrms=zeros(1,23);
for i=1:23
	fdnum=find(f>=param.fid(i));
	%param.fid为各倍频程带的下限频率
	funum=find(f<param.fiu(i));
	%param.fid为各倍频程带的上限频率
	api=APL(fdnum(1):funum(end));
	aptrapz=trapz(fs/n,api);
	ajrms(1,i)=aptrapz^0.5;
end
%ajrms即为各倍频程带的倍频程

倍频程的计算和噪声倍频程或许存在出入,本案例参照GB 4970汽车平顺性的倍频程计算方法计算。

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 对于matlab的1/3倍频程代码,一般是用来设计数字滤波器的。首先,我们需要定义一些参数,例如采样率、截止频率、滤波器类型等等。然后,在matlab中使用“fdatool”工具箱,可以方便地设计数字滤波器。 在“fdatool”中,选择“Design filter”选项,选择滤波器类型,例如低通滤波器、带通滤波器、高通滤波器等等。然后输入截止频率或者通带、阻带宽度等参数,在图形界面中可以直接看到滤波器的幅频响应和相频响应。 接下来,我们可以使用CCS(Code Composer Studio)来生成C语言代码,并下载到嵌入式设备中。在CCS中,选择“Filters and Signal Processing”选项,可以方便地将matlab设计的数字滤波器转换为C语言代码,并进行后续的程序开发。 总之,matlab的1/3倍频程代码是用来设计数字滤波器的,可以方便地在matlab和CCS中实现。对于需要设计数字滤波器的工程师或者研究人员,matlab的1/3倍频程代码是一个非常实用的工具。 ### 回答2: matlab1/3倍频程代码是一种用来处理信号的程序代码,主要是用来计算信号的频率。该程序包括以下几个步骤: 1.导入信号数据,即使用matlab内置函数load()导入需要处理的信号数据。 2.对信号数据进行预处理,即对信号进行加窗、去直流值等预处理操作。 3.进行快速傅里叶变换(FFT),使用matlab内置函数fft()进行变换。 4.计算频谱,即根据FFT输出的结果计算出信号的频谱,使用matlab内置函数abs()和fftshift()计算频谱。 5.计算频率轴,即根据采样率和FFT点数计算出信号频率轴,使用matlab内置函数linspace()进行计算。 6.绘制频谱图,将步骤4和5计算出的结果用matlab内置函数plot()进行绘制,用以观察信号频率的分布情况。 总之,matlab1/3倍频程代码能够帮助用户准确地计算出输入信号的频率,并绘制出频率分布图,方便用户对信号进行分析和处理。 ### 回答3: 那么,matlab1/3倍频程代码是什么呢? 在MATLAB中,要计算1/3倍频程,可以使用以下公式: fc = (1/3)*fs 其中,fc是1/3倍频程,fs是采样频率。 如果要根据信号计算1/3倍频程,可以使用以下代码: % 假设有一个信号s fs = 1000; % 采样频率为1000Hz N = length(s); % 信号长度 S = fft(s); % 对信号进行傅里叶变换 f = (0:N-1)*(fs/N); % 计算频率 half = ceil(N/2); % 取一半的信号 P = abs(S(1:half).^2)/N; % 计算功率谱密度 cumsumP = cumsum(P); % 计算累积功率谱密度 cumsumPnorm = cumsumP/cumsumP(end); % 归一化 fcIndex = find(cumsumPnorm > 1/3, 1); % 找到1/3倍频程 fc = f(fcIndex); % 1/3倍频程 以上代码中,首先将信号进行傅里叶变换,然后计算功率谱密度和累积功率谱密度。最后找到累积功率谱密度中超过1/3的位置即可找到1/3倍频程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值