matlab 频谱分析方法总结
2017-03-01 15:27
1266 查看
频谱分析根本思路是将时域的信号转变为频域的信号。转换的方法就是离散傅里叶变换,其计算方法是
X(ejω)=∑n=−∞∞x(n)e−jωn
简单的说就是将时域上的信号x(n)转换到频域 下的信号X(ejω).X(ejω)是一个随角频率变化的复数,并且ω分布在(−∞,+∞)之间。实际上X(ejω)在实际应用的一个通常的叫法是频谱,即一系列随频率而变化的值,反映的是信号的频域分布和变化规律。
当然,既然有傅里叶变换也就有反变换,变换公式为
x(n)=12π∫π−πX(ejω)ejωdω
所以最基础的频谱分析就是傅里叶变化,在matlab中的实现方法是
程序中的ydata就是你的时域变化的信号(一列数据),需要设定的就是采样频率(为了计算角频率)。程序中,mag代表的就是幅值,若要求相位,可以使用angle函数。power是幅值的平方,也就是功率。这就是最简单的频谱分析方法。对于一列较为杂乱的实验数据而言,直接的频谱分析往往得到的结果不理想,主要表现在主要频率(低频)的幅值差别不明显,频率宽频分布。不易找到主要低频频率。所以可以采用其它频谱方法。
当然实际频谱分析还有加窗法,还有最大熵法等等,而matlab则提供了多种频谱分析的函数,包括pburg,pmusic,pyulear(最大熵法),pwelch,periodogram(周期图法)等等,具体用法简单介绍如下
周期图法periodogram
加窗的方法与窗的类型以及大小有关,有矩形窗、海明窗,区别在于分布形式不同,加窗的大小也会影响频谱分析的结果,加窗就是使得信号在短时内更接近中心点变化的结果。实际函数的参数有很多建议参考matlab的help文档。
最大熵法是我个人用的比较多的一种频谱分析的方法,函数形式也比较简单,只需要设计采样频率以及DFT离散点的个数,其中第二个参数是自回归模型的阶数,在本程序中设为12;
其它的频谱分析函数都大同小异,建议参考matlab的help文档,这是最好的学习matlab的方式。频谱分析有助于得到单一频率下动态变化信息,有助于对问题的理解,从频域的角度对问题重新认识,不失为一种好的方法。
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对时间序列进行频谱分析时,频率轴的确定方法
- 系统分析中写 需求说明书 的方法--个人经验总结
- 软件需求分析方法收集(公司项目经理总结)
- 八种常见的防盗链方法总结及分析(我转载的,写的真好,收藏了)
- 把signaltap 里的数据导出到Matlab分析的方法
- Java的WEB应用性能问题定位方法总结(一):常见的性能指标分析
- 【分析】SYMANTEC防火墙内核堆栈溢出漏洞利用方法总结
- matlab基础之128点fft分析数据,各个数据的频谱整体分析
- MATLAB中使用FFT做频谱分析时频率分辨率问题(转载)
- Matlab提供的两种聚类分析方法
- StatSVN插件使用方法总结-项目代码分析工具 工作量图表生成工具
- JavaScript加密解密7种方法总结分析
- 需求分析和架构设计总结--利用DODAF方法
- 八种常见的防盗链方法总结及分析
- VC调试方法技巧和常见问题总结分析(转)
- 常用的分析问题方法的总结
- asp获取URL参数的几种方法分析总结[原创]_应用技巧_脚本之家
- Matlab中使用Plot函数动态画图方法总结
- 判断系统大小端方法分析与总结
- StatSVN插件使用方法总结-项目代码分析工具 工作量图表生成工具