讲这个话题,就要先搞清楚频谱、功率谱的概念,可参考我的另一篇文章
[信号的频谱 频谱密度 功率谱密度 能量谱密度]
做信号处理的朋友应该都会fft比较熟悉,就是求傅里叶变换。我在这里也不再去讲这个函数了,但需要注意的一点:实信号的频谱关于0频对称,是偶函数,如果st = cos(2pif0*t)+1; t的长度为4000,那么0频的位置在第一个点,做fftshift后,0频的位置在低2001个点的位置,fft后的信号关于第2001个点对称,而不是4000个点左右对称。
pwelch是用来求功率谱的,采用Welch平均周期法对信号进行谱估计,它通过分段选取数据进行加窗求功率,再进行平均,pwelch函数的使用方式为:
pxx = pwelch(x,window,noverlap,nfft)
[pxx,f] = pwelch(x,window,noverlap,f,fs)
其中,
X
表示输入序列;window
:当window是一个数值时,表示窗函数长度,即分段长度L
,默认的窗函数为hamming窗;当window是一个序列时,表示窗函数序列;NFFT
表示FFT的点数,X为实数时,当NFFT
是偶数时,Pxx
的长度是(NFFT/2+1)
;当NFFT
是奇数时,Pxx
的长度是(NFFT+1)/2
;X为复数时,Pxx
的长度就是NFFT
,如果NFFT
没有指定,则默认是256或者比X长度大的2的N次幂Fs
绘制功率谱曲线的采样频率,默认值为1Pxx
表示功率谱估计值F
表示Pxx值所对应的频率点NOVERLAP
指定分段重叠的样本数 ,如果NOVERLAP=L/2
,则可得到重叠50%的Welch法平均周期图
下面我们分别用fft和fwelch来求信号的功率谱。
clc;close all;clear all;
fs = 10e6;
N = 4000;
t = (0:N-1)/fs;
f0 = 1e5;
st = cos(2*pi*f0*t) + 1;
st_fft = fft(st);
psdx = abs(st_fft(1:end/2+1)).^2/fs/N; %功率谱密度为能量谱密度除以时间,摸值的平方即为能量谱
psdx(2:end) = 2*psdx(2:end); %乘2是因为fft结果是对称的,在计算功率时需要把功率加回来;第一个点是0频,这个点并不对称
freq = linspace(0,fs/2,length(psdx));
[pxx,f] = pwelch(st,rectwin(N),32,N,fs);
figure;plot(freq,psdx);title('fft方法求功率谱密度');grid on
figure;plot(f,pxx);title('fwelch方法求功率谱密度');grid on
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
信号处理
+关注
关注
47文章
854浏览量
102532 -
FFT
+关注
关注
15文章
425浏览量
58639 -
傅里叶
+关注
关注
0文章
58浏览量
20297
发布评论请先 登录
相关推荐
为什么LabVIEW的fft.vi和MATLAB的fft函数计算出来的结果不同?
LabVIEW的fft.vi和MATLAB的fft函数计算的结果有时相差很小,有时完全不同这是为什么?例如在MATLAB中x=[1 2 3
发表于 10-31 21:05
谱分析函数 和 FFT函数的区别? 求大神解答
我想对噪声及振动信号进行处理,然后发现在 函数→信号处理→谱分析 中有很多谱分析控件,例如:功率谱,幅度谱和相位谱。 函数→信号处理→转换中有一些傅里叶转换等函数,谱分析
发表于 03-12 19:38
新手关于matlab进行FFT变换的程序
我用采集到的数据prs300.txt (51200*2)采样频率是256000,导入到了matlab进行处理,时域图做出来了,但是进行频谱分析时,进行fft变换,发现做出来的如图所示。。。求大神能帮助写下怎么编程序进行
发表于 04-12 14:36
FFT功率谱问题
您好,抱歉我的英语不好。我可以在FFTBuffic中获得FFT频谱,但是不能得到FrimeSuffRealEdCurx()的功率谱。我的代码有什么问题,或者程序参数错误吗?我使用DSP
发表于 08-27 15:11
FFT和IFFT的Matlab实现
第28章 FFT和IFFT的Matlab实现(幅频响应和相频响应)本章主要讲解fft,ifft和fftshift在matlab上的实现。目录第28章
发表于 08-17 07:48
FFT和IFFT的Matlab实现
第28章 FFT和IFFT的Matlab实现(幅频响应和相频响应)本章主要讲解fft,ifft和fftshift在matlab上的实现。目录第28章
发表于 08-17 06:22
基于MATLAB系统的信号FFT频谱分析与显示
基于MATLAB系统的信号FFT频谱分析与显示:给出一种用MATLAB系统实现信号频谱分析与显示的方法。MATLAB是具有很强的科学计算和图形显示界面的软件系统。该法可对语音信号进行基
发表于 02-08 12:38
•101次下载
评论