首页 > 编程语言 >频谱分析—Python代码

频谱分析—Python代码

时间:2024-12-07 12:58:46浏览次数:8  
标签:频谱 plt Python 代码 am fs np freq signal

下面是一个用python进行频谱分析的代码案例。

import matplotlib.pyplot as plt
import numpy as np


def myfft(signal, fs):
    '''
    FFT变换,用于频谱分析
    :param signal: type: ndarray, shape: (n,)
    :param fs: 采样频率, Hz
    :param one_side (default: True): 仅限制正频率
    :return:
        freq -- 频率轴
        am   -- 幅值轴
    '''

    if not isinstance(signal, np.ndarray):
        signal = np.array(signal)

    if signal.ndim != 1:
        raise ValueError('输入的信号必须是一维的!')

    # 零均值化处理,去除直流分量(也就是去除频率等于0的点,防止对结果分析造成干扰)
    signal = signal - signal.mean()

    N = len(signal)  # 信号长度
    am = np.fft.fft(signal)
    am = np.abs(am) / N
    freq = np.arange(0, N, dtype=float) * (fs/N) # 等价freq=np.fft.fftfreq(N, d=1/fs)

    am = am[: N // 2]
    freq = freq[: N // 2] # 正频率[0, fs/2]
    return freq, am

if __name__ == "__main__":
    fs = 5120 # 采样频率
    f1 = 20
    f2 = 85
    N = 4096 # 信号长度
    t = np.arange(0, N / fs, 1 / fs)
    x = np.sin(2 * np.pi * f1 * t) + np.cos(2 * np.pi * f2 * t) + 5
    x = x + np.random.normal(0, 1, size=(4096,))

    freq, am = myfft(x, fs)

    plt.figure(figsize=(8, 3))
    plt.subplot(121)
    plt.plot(t, x, )
    plt.xlabel('Time (s)')
    plt.ylabel('Amplitude')
    plt.title('Time domain')

    plt.subplot(122)
    plt.plot(freq, am, zorder=100, color='k', linewidth=1.5)
    plt.xlim([0, 500])
    plt.ylim([0, 1])
    plt.axvline(f1, color='r', linestyle='--', alpha=0.6, linewidth=1.2)
    plt.axvline(f2, color='r', linestyle='--', alpha=0.6, linewidth=1.2)
    plt.xlabel('Frequency (Hz)')
    plt.ylabel('Amplitude')
    plt.title('Frequency domain')
    plt.tight_layout()
    plt.show()

结果如下:
在这里插入图片描述

标签:频谱,plt,Python,代码,am,fs,np,freq,signal
From: https://blog.csdn.net/qq_45454258/article/details/144301017

相关文章

  • 时频分析—连续小波变换python代码实现
    连续小波变换python代码实现:importmatplotlib.pyplotaspltimportnumpyasnpimportpywtdefMyCWT(y,fs,wavelet='cmor2-5',total_scal=512):'''连续小波变换CWT:paramy:信号,nnumpy,(n,):paramfs:采样频率:paramwavelet:复小......
  • Python+OpenCV系列:绘制图形和文字
    绘制图形和文字1.基本绘图函数简介2.绘制示例代码2.1创建一个空白图像2.2绘制基本图形1.绘制直线2.绘制矩形3.绘制圆4.绘制椭圆2.3添加文字3.显示与保存图像4.扩展应用总结在图像处理领域,绘制基本图形和文字是一个常见需求,例如标记对象、绘制边界框或添......
  • 大学生网页设计制作作业实例代码 (全网最全,建议收藏) HTML+CSS+JS (1)
    文章目录......
  • 基于微信平台健身小助手小程序的设计与实现【java或python】-计算机毕业设计源码+LW文
    选题的意义与目的网络和科技的进步以及人们生活条件的提高都让微信小程序越来越平民化,深入日常生活中。我国非常强调体育以及健身,需要不断的让更多人参与到健身中,因为健身不仅可以锻炼身体,也能锻炼意志,有了健康的身体,就可以好好的努力工作,努力学习,为国家做出应有的贡献。有一......
  • Python Tkinter制作恶作剧小程序(可以发给朋友)
    跟大家分享了游戏和教程,也该来点好玩的了,今天我就来和大家分享一个让朋友无法使用电脑的程序。这个程序运行之后,你会发现电脑的屏幕被蒙上了一层白布,除了ALT+F4以外都关不掉它,如果点击电脑屏幕还会弹出:程序:importtkinterastkfromtkinterimportmessageboxdefshow_......
  • 介绍一下 WebApplicationContext 思维导图 代码示例(java 架构)
    WebApplicationContext是Spring框架中的一个接口,它是ApplicationContext的扩展,专门用于Web应用程序。它提供了对Web特定功能的支持,例如解析主题(themes)、管理国际化资源、以及与Servlet容器集成等。下面是一个关于WebApplicationContext的思维导图大纲和一些代码示例。WebAp......
  • STM32 串口和I2C结合案例 hal库代码书写
    hal库的创建打开cubemx->选择芯片STM32F103ZET6,双击打开SystemCore系统核心->SYS下->DeBug选择SerialWire串口SystemCore系统核心->RCC下->highSpeedClock(高速时钟)以及LSE全部选择外部晶振SystemCore系统核心->GPIO下->PA0/PA1/PA8三者全部选择GPIO_Output,具体配......
  • [oeasy]python049_[词根溯源]locals_现在都定义了哪些变量
    [词根溯源]locals_现在都定义了哪些变量_地址_pdb_调试中观察变量回忆上次内容上次我们了解了变量赋值连等赋值解包赋值 所有对象变量variable模块module函数function类class都有自己所属的类型也都在内存中引用唯一位置......
  • Python从0到100(七十六):计算机视觉-直方图和自适应直方图均衡化(文末送书)
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • js源代码压缩都有哪些方法?它们的压缩原理分别是什么?
    JS源代码压缩主要有以下几种方法,以及它们的压缩原理:1.移除不必要的字符:原理:删除代码中对执行没有影响的字符,例如空格、换行符、注释、以及代码块间的多余空行。方法:正则表达式替换、语法分析树遍历。效果:减小文件大小,提高加载速度。示例:将vara=1;//声明......