找回密码
 立即注册
查看: 52|回复: 2

用fft对信号作频谱分析

[复制链接]

该用户从未签到

5

主题

0

回帖

30

积分

助理技师

积分
30
发表于 2024-11-28 11:36:02 | 显示全部楼层 |阅读模式
在Python中,可以使用numpy库的fft模块来进行傅立叶变换,并使用matplotlib库来绘制信号的频谱图。以下是一个简单的示例,演示如何对一个简单的正弦波信号进行频谱分析:
  1. import numpy as np
  2. import matplotlib.pyplot as plt

  3. # 定义信号参数
  4. A = 1.0                  # 振幅
  5. fs = 1000.0              # 采样频率
  6. T = 1.0/fs               # 采样间隔
  7. L = 1000                 # 信号长度
  8. t = np.arange(L) * T     # 时间向量
  9. f = 50.0                 # 信号频率

  10. # 生成正弦波信号
  11. signal = A * np.sin(2 * np.pi * f * t)

  12. # 计算FFT
  13. fft_signal = np.fft.fft(signal)

  14. # 计算双边频谱(默认情况下,fft给出的是单边频谱)
  15. fft_magnitude = np.abs(fft_signal)

  16. # 为了得到正确的频率轴,我们需要在fft_magnitude的前半部分和后半部分分别乘以两边对应的频率
  17. N = len(fft_magnitude)
  18. freqs = np.fft.fftfreq(N, T)

  19. # 绘制频谱图
  20. plt.figure()
  21. plt.stem(freqs[:N // 2], fft_magnitude[:N // 2] * 2 / N, 'b', markerfmt=" ", basefmt="-b")
  22. plt.stem(freqs[-N // 2:], fft_magnitude[-N // 2:] * 2 / N, 'r', markerfmt=" ", basefmt="-r")
  23. plt.title('Frequency spectrum of a sine wave')
  24. plt.xlabel('Frequency (Hz)')
  25. plt.ylabel('Magnitude')
  26. plt.grid()
  27. plt.show()
复制代码


这段代码首先定义了一个简单的正弦波信号,然后使用numpy.fft.fft计算信号的快速傅立叶变换(FFT)。接着,计算了FFT的幅度,并使用matplotlib.pyplot.stem绘制了频谱图。注意,由于FFT是对信号进行周期性扩展的,因此我们只需要考虑频率轴的正半轴即可。双边频谱的幅度是单边频谱幅度的两倍,除以FFT点数的一半可以归一化到单边频率范围内。最后,使用matplotlib.pyplot.show()显示结果。

回复

使用道具 举报

  • TA的每日心情

    2024-9-11 11:38
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    8

    主题

    43

    回帖

    128

    积分

    技术员

    积分
    128
    发表于 2024-12-4 17:07:13 | 显示全部楼层
    楼上总结得真好,我完全赞同。
    回复

    使用道具 举报

    该用户从未签到

    4

    主题

    36

    回帖

    74

    积分

    技术员

    积分
    74
    发表于 2024-12-5 17:56:07 | 显示全部楼层
    这个解决方案听起来很有前景。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|制造论坛 ( 浙B2-20090312-57 )|网站地图

    GMT+8, 2025-1-5 15:54 , Processed in 0.041674 second(s), 24 queries .

    Powered by Discuz! X3.5

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表