qq_47361278 2023-12-09 16:44 采纳率: 62.2%
浏览 6
已结题

MATLAB中的fft问题

我的导师告诉我功率谱密度函数应该按照下面这个图中的公式算

img

所以我根据公式把代码改成如下所示:figure;N =length(a);Fs = 500; U = fft(a);P2 = abs(U.^2/2piNFs);P = P2(1:N/2+1);P(2:end-1) = 2P(2:end-1);f = Fs*(0:(N/2))/N;semilogx(f, P);
但是画出来的图纵坐标PSD非常大,如下图已经圈出来了(达到了10的17次方,也太大了):

img


但是实际上纵坐标PSD应该是如下图这样的几千的范围内:

img


那么问题是,在导师给的公式没错的前提下,我应该怎么改代码或者设置图像能使我的图的纵坐标PSD恢复到像最后一个图这样几千几千的范围?请根据导师给的公式帮我改一下代码解决我的问题。

  • 写回答

4条回答 默认 最新

  • Wayne_Fine Matlab领域优质创作者 2023-12-10 02:07
    关注

    abs(U.^2/2piNFs)你这里是不是写成了

    abs((U.^2/2)*pi*N*Fs)
    

    的意思了呀?
    应该是

    abs(U.^2/(2*pi*N*Fs))
    
    评论
  • 专家-赤兔[在线] 全栈领域优质创作者 2023-12-10 00:28
    关注

    引自强大而免费的微信小程序:皆我百晓生

    您好!根据您提供的信息,您可以尝试以下方式来解决问题:

    1. 确定采样频率Fs是否正确设置为500 Hz,并检查输入信号a的长度N是否正确。

    2. 在计算功率谱密度之前,先将FFT结果归一化,即将U除以信号长度N。

    3. 将2π或2pi修改为2pi*Fs/N,以将公式中的频率归一化。

    4. 检查绘图函数semilogx中的x轴是频率f还是角频率ω,并将其与您的公式保持一致。

    您可以尝试以下修改后的代码,然后再绘制功率谱密度图:

    1. figure;
    2. N = length(a);
    3. Fs = 500;
    4. U = fft(a)/N;
    5. P2 = abs(U.^2/(2*pi*Fs/N));
    6. P = P2(1:N/2+1);
    7. P(2:end-1) = 2*P(2:end-1);
    8. f = Fs*(0:(N/2))/N;
    9. semilogx(f, P);

    希望这可以解决您的问题!如果问题仍然存在,请提供更多详细信息,以便进一步帮助您解决问题。

    评论 编辑记录
  • 叫兽-郭老师 Java领域新星创作者 2023-12-10 00:30
    关注

    由人工智能和答主提供,可以参考如下,如果回答的不正确,及时评论区回复,我追加回答,谢谢。


    根据导师给的公式,你需要将功率谱密度函数的计算方式稍作修改。具体来说,你需要将P2 = abs(U.^2/2piNFs);这一行代码改为P2 = abs(U.^2/(2*pi*Fs));。这样,你的代码应该是这样的:

    1. figure;
    2. N = length(a);
    3. Fs = 500;
    4. U = fft(a);
    5. P2 = abs(U.^2/(2*pi*Fs));
    6. P = P2(1:N/2+1);
    7. P(2:end-1) = 2P(2:end-1);
    8. f = Fs*(0:(N/2))/N;
    9. semilogx(f, P);

    这样修改后,你的图像纵坐标PSD应该会恢复到几千几千的范围。

    评论
    qq_47361278 2023-12-10 02:01

    可是公式里分母确实乘了一个N呀

    回复
    叫兽-郭老师 回复 qq_47361278 2023-12-10 02:02

    会不会导师给错了公式了

    回复
    qq_47361278 回复 叫兽-郭老师 2023-12-10 02:09

    应该不会,那是不是需要考虑频率归一化呢

    回复
  • IT工程师_二师兄 2023-12-10 02:11
    关注

    你把你的代码复制到记事本发给我,我给你检查一下

    评论
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月10日
  • 请采纳用户回复 12月9日
  • 修改了问题 12月9日
  • 修改了问题 12月9日
  • 展开全部
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部