0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何区分Matlab中fft与fwelch 如何用fft求功率谱

jf_78858299 来源:傅里叶的猫 作者:猫叔 2023-05-05 10:04 次阅读

讲这个话题,就要先搞清楚频谱、功率谱的概念,可参考我的另一篇文章

[信号的频谱 频谱密度 功率谱密度 能量谱密度]

做信号处理的朋友应该都会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 绘制功率谱曲线的采样频率,默认值为1
  • Pxx表示功率谱估计值
  • 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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 信号处理
    +关注

    关注

    48

    文章

    1027

    浏览量

    103263
  • FFT
    FFT
    +关注

    关注

    15

    文章

    434

    浏览量

    59368
  • 傅里叶
    +关注

    关注

    0

    文章

    59

    浏览量

    20465
收藏 人收藏

    评论

    相关推荐

    STM32 FFT计算得到的相位matlab计算的不一致是什么原因造成的?

    STM32 FFT计算得到的相位matlab计算的不一致?
    发表于 04-18 07:52

    为什么LabVIEW的fft.vi和MATLABfft函数计算出来的结果不同?

    LabVIEW的fft.vi和MATLABfft函数计算的结果有时相差很小,有时完全不同这是为什么?例如在MATLABx=[1 2 3
    发表于 10-31 21:05

    MATLAB 滤波器FFT变换

    matlab如何对各级滤波器的输出做FFT变换?大神指导
    发表于 04-16 20:26

    何用labveiw功率密度

    大神教我如何用labveiw功率密度。如果用matlab直接用一句语句就可以搞定[Yxx,
    发表于 04-17 13:43

    大神教我如何用labveiw功率密度

    大神教我如何用labveiw功率密度。如果用matlab直接用一句语句就可以搞,但是用la
    发表于 04-17 13:47

    FPGA FFT核的仿真与Matlab仿真结果差异很大

    有某试验数据,用matlabfft之后再求得的功率密度是这样的:图1但是用fft ip核,取
    发表于 04-21 20: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函数和IFFT函数呢

    MatlabFFT函数和IFFT函数有什么用法吗?如何用Matlab去实现FFT函数和IFFT函数呢?
    发表于 11-18 07:05

    基于Matlab的系统信号FFT频谱分析与显示pdf

    基于Matlab的系统信号FFT频谱分析与显示
    发表于 06-19 14:55 63次下载

    基于MATLAB系统的信号FFT频谱分析与显示

    基于MATLAB系统的信号FFT频谱分析与显示:给出一种用MATLAB系统实现信号频谱分析与显示的方法。MATLAB是具有很强的科学计算和图形显示界面的软件系统。该法可对语音信号进行基
    发表于 02-08 12:38 101次下载

    利用FFT IP Core实现FFT算法

    利用FFT IP Core实现FFT算法 摘要:结合工程实践,介绍了一种利用FFT IP Core实现FFT的方法,设计能同时对两路实数序列进行256点
    发表于 01-16 10:04 6912次阅读
    利用<b class='flag-5'>FFT</b> IP Core实现<b class='flag-5'>FFT</b>算法

    labview FFT分析信号频谱幅度和相位实例

    labview FFT分析信号频谱幅度和相位简单实例,
    发表于 02-28 16:45 353次下载

    VivadoFFT IP核的使用教程

    本文介绍了VidadoFFT IP核的使用,具体内容为:调用IP核>>配置界面介绍>>IP核端口介绍>>MATLAB生成测试数据>>测试verilogHDL>>TestBench仿真>>结果验证>>
    的头像 发表于 11-06 09:51 764次阅读
    Vivado<b class='flag-5'>中</b><b class='flag-5'>FFT</b> IP核的使用教程