您的位置:首页 > 编程语言 > MATLAB

matlab 频谱分析方法总结

2017-03-01 15:27 1216 查看
频谱分析根本思路是将时域的信号转变为频域的信号。转换的方法就是离散傅里叶变换,其计算方法是

X(ejω)=∑n=−∞∞x(n)e−jωn

简单的说就是将时域上的信号x(n)转换到频域 下的信号X(ejω).X(ejω)是一个随角频率变化的复数,并且ω分布在(−∞,+∞)之间。实际上X(ejω)在实际应用的一个通常的叫法是频谱,即一系列随频率而变化的值,反映的是信号的频域分布和变化规律。

当然,既然有傅里叶变换也就有反变换,变换公式为

x(n)=12π∫π−πX(ejω)ejωdω

所以最基础的频谱分析就是傅里叶变化,在matlab中的实现方法是

N=length(ydata);%数据长度
%spectrum analysis
fs=100;%设定采样频率?
i=0:N-1;
t=i/fs;
%f=100;%设定正弦信号频率?%生成正弦信号?
y=fft(ydata,N);%进行fft变换?
mag=abs(y);%求幅值?
f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M;??
power=mag.^2;
figure
semilogx(f,power);


程序中的ydata就是你的时域变化的信号(一列数据),需要设定的就是采样频率(为了计算角频率)。程序中,mag代表的就是幅值,若要求相位,可以使用angle函数。power是幅值的平方,也就是功率。这就是最简单的频谱分析方法。对于一列较为杂乱的实验数据而言,直接的频谱分析往往得到的结果不理想,主要表现在主要频率(低频)的幅值差别不明显,频率宽频分布。不易找到主要低频频率。所以可以采用其它频谱方法。

当然实际频谱分析还有加窗法,还有最大熵法等等,而matlab则提供了多种频谱分析的函数,包括pburg,pmusic,pyulear(最大熵法),pwelch,periodogram(周期图法)等等,具体用法简单介绍如下

周期图法periodogram

fs=100;%采样频率
nfft = 1024;%采样点个数
window=boxcar(length(ydata));%矩阵窗
%window1=hamming(100); %海明窗
[Pxx,ff]=periodogram(ydata,window,nfft,fs);
figure(4)
semilogx(ff,10*log10(Pxx));
xlabel('f(Hz)');ylabel('功率');
title('功率谱图-周期图法');
axis tight


加窗的方法与窗的类型以及大小有关,有矩形窗、海明窗,区别在于分布形式不同,加窗的大小也会影响频谱分析的结果,加窗就是使得信号在短时内更接近中心点变化的结果。实际函数的参数有很多建议参考matlab的help文档。

最大熵法是我个人用的比较多的一种频谱分析的方法,函数形式也比较简单,只需要设计采样频率以及DFT离散点的个数,其中第二个参数是自回归模型的阶数,在本程序中设为12;

figure
nfft=1024;
fs = 100;
[Pxx,F]=pyulear(ydata,12,length(ydata),fs);
plot(F,10*log10(Pxx))
xlabel('Frequency (Hz)');ylabel('Power Spectrum (dB)');
set(gca,'ytick',[],'yticklabel',[]);
axis tight;


其它的频谱分析函数都大同小异,建议参考matlab的help文档,这是最好的学习matlab的方式。频谱分析有助于得到单一频率下动态变化信息,有助于对问题的理解,从频域的角度对问题重新认识,不失为一种好的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab