hebutkappa 发表于 2015-11-11 09:26

关于如何求频谱的1/3倍频程

搜索了论坛发现很多事求时域的1/3倍频程。请问下怎么求频域的倍频程?
我有一个频域-声压曲线。横坐标HZ纵坐标db
可否直接用下面程序(MATLAB在振动信号处理中的应用)转成1/3倍频啊~做出来的数值不对~~能不能指点下啊
f=;
fc=;
%中心频率与下限频率的比值
oc6=2^(1/6);
nc=length(fc);
n=length(x);
nfft=2^nextpow2(n);
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(c(1:n))));
end
plot(fc(1:m),yc(1:m));

Raspberry 发表于 2015-11-11 09:54

个人认为是不行的,频域-声压曲线无法反应采样频率和采样点数

TestGuru 发表于 2015-11-11 10:07

没看程序,在频域算1/3倍频的能量只需把1/3倍频的每个频带的上下限频率算出来之后,再把FFT的每个BIN内的能量折算到1/3倍频的频带内即可。

hebutkappa 发表于 2015-11-11 10:10

TestGuru 发表于 2015-11-11 10:07
没看程序,在频域算1/3倍频的能量只需把1/3倍频的每个频带的上下限频率算出来之后,再把FFT的每个BIN内的能 ...

十分感谢
请问“再把FFT的每个BIN内的能量折算到1/3倍频的频带内即可”
这个能量怎么计算?BIN是频带的意思吗?
您能举个例子吗

TestGuru 发表于 2015-11-11 19:21

每个FFT BIN的幅度的平方就是能量,能量才可以求和。FFT BIN所代表的频带是知道的。比如FFT的第一个BIN中心频率是0HZ,带宽是0~1/2 x [采样率] / ;FFT的第二个BIN中心频率是[采样率] / ,带宽是1/2 x [采样率] / ~3/2 x [采样率] / .....

hebutkappa 发表于 2015-11-12 10:02

本帖最后由 hebutkappa 于 2015-11-12 18:57 编辑

TestGuru 发表于 2015-11-11 19:21
每个FFT BIN的幅度的平方就是能量,能量才可以求和。FFT BIN所代表的频带是知道的。比如FFT的第一个BIN中心 ...
非常感谢耐心指导。我的曲线是频域-声压曲线,不在需要FFT了吧。我的采样频率4000HZ。对下面曲线求1/3倍频,例如黑框处的对应频带的1/3倍频,是对其幅度进行平方?

TestGuru 发表于 2015-11-12 10:51

hebutkappa 发表于 2015-11-12 10:02
非常感谢耐心指导。我的曲线是频域-声压曲线,不在需要FFT了吧。我的采样频率4000HZ。对下面曲线求1/3倍 ...

没看太懂你这条曲线怎么来的。4000HZ的采样率为什么还有4000HZ的频率数据。一个1/3倍频频带内有几个频点的幅度值呢?

hebutkappa 发表于 2015-11-12 11:05

本帖最后由 hebutkappa 于 2015-11-12 18:56 编辑

TestGuru 发表于 2015-11-12 10:51
没看太懂你这条曲线怎么来的。4000HZ的采样率为什么还有4000HZ的频率数据。一个1/3倍频频带内有几个频点 ...

您好。感谢回复。
打错了 采样是13000.每个1/3频带点数不一样啊。
例如在14.1-17.8频段
    这个频带1/3倍频怎么求呢?

TestGuru 发表于 2015-11-12 16:38

hebutkappa 发表于 2015-11-12 11:05
您好。感谢回复。
打错了 采样是13000.每个1/3频带点数不一样啊。
例如在14.1-17.8频段


是的。每个倍频频带内含有的FFT BIN个数不一样,因为FFT BIN在频率轴上是线性分布的,而倍频频带在频率轴上是对数分布的。必须先做FFT,再把能量折算到倍频频带内。

TestGuru 发表于 2015-11-12 16:40

hebutkappa 发表于 2015-11-12 11:05
您好。感谢回复。
打错了 采样是13000.每个1/3频带点数不一样啊。
例如在14.1-17.8频段


这四排8个数据是什么东东?

TestGuru 发表于 2015-11-12 16:49

如果前面一列是频率,后面一列是幅度的话,1/3倍频中心频率为16KHZ的幅度为:SQRT(幅度1x幅度1+幅度2x幅度2+幅度3x幅度3+幅度4x幅度4). 这是较为粗糙的算法,要再细致点,那些落在倍频频带分界线中间的FFT BIN的能量要按比例分配给相邻的两个倍频频带。

hebutkappa 发表于 2015-11-12 18:56

TestGuru 发表于 2015-11-12 16:49
如果前面一列是频率,后面一列是幅度的话,1/3倍频中心频率为16KHZ的幅度为:SQRT(幅度1x幅度1+幅度2x幅度2 ...

多谢~
页: [1]
查看完整版本: 关于如何求频谱的1/3倍频程