matlab频谱分析⽅法总结
matlab求傅里叶变换频谱分析根本思路是将时域的信号转变为频域的信号。转换的⽅法就是离散傅⾥叶变换,其计算⽅法是
简单的说就是将时域上的信号 转换到频域 下的信号 . 是⼀个随⾓频率变化的复数,并且 分布在 之间。实际上 在实际应⽤的⼀个通常的叫法是频谱,即⼀系列随频率⽽变化的值,反映的是信号的频域分布和变化规律。
当然,既然有傅⾥叶变换也就有反变换,变换公式为
所以最基础的频谱分析就是傅⾥叶变化,在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的⽅式。频谱分析有助于得到单⼀频率下动态变化信息,有助于对问题的理解,从频域的⾓度对问题重新认识,不失为⼀种好的⽅法。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论