当前位置: 首页 > news >正文

使用python numpy计算并显示音频数据的频谱信息

一 概念  

    最近需要用到这个数据。笔者需要,使用 Python 的numpy库结合scipymatplotlib库来计算并显示音频数据频谱信息的示例代码。我们将使用scipy.io.wavfile来读取音频文件,numpy进行快速傅里叶变换(FFT)计算频谱,最后用matplotlib来绘制频谱图。

二 源码解析:

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile


def plot_audio_spectrum(file_path):
    # 读取音频文件
    sample_rate, audio_data = wavfile.read(file_path)

    # 如果音频是立体声,取单声道数据
    if len(audio_data.shape) > 1:
        audio_data = audio_data[:, 0]

    # 计算音频数据的长度
    audio_length = len(audio_data)

    # 进行快速傅里叶变换
    fft_data = np.fft.fft(audio_data)

    # 计算频率轴
    frequencies = np.fft.fftfreq(audio_length, 1 / sample_rate)

    # 取单边频谱
    frequencies = frequencies[:audio_length // 2]
    fft_data = 2.0 / audio_length * np.abs(fft_data[:audio_length // 2])

    # 绘制频谱图
    plt.figure(figsize=(12, 6))
    plt.plot(frequencies, fft_data)
    plt.title('音频频谱')
    plt.xlabel('频率 (Hz)')
    plt.ylabel('幅值')
    plt.grid()
    plt.show()


if __name__ == "__main__":
    # 替换为你的音频文件路径
    audio_file_path = 'your_audio_file.wav'
    plot_audio_spectrum(audio_file_path)

三 代码解析:

  1. 读取音频文件:使用scipy.io.wavfile.read函数读取指定路径的音频文件,返回采样率和音频数据。
  2. 处理立体声音频:如果音频是立体声(即有多个声道),代码会选取第一个声道的数据进行处理。
  3. 执行快速傅里叶变换:使用numpy.fft.fft函数对音频数据进行快速傅里叶变换,得到频域表示。
  4. 计算频率轴:使用numpy.fft.fftfreq函数计算频率轴,该函数根据采样率和数据长度生成对应的频率值。
  5. 获取单边频谱:为了方便显示,代码只保留了单边频谱(正频率部分),并对频谱幅值进行归一化处理。
  6. 绘制频谱图:使用matplotlib库绘制频谱图,展示音频数据的频谱信息。

四 效果展示:

   笔者使用了一个192khz的原始音频数据,输入了一个20khz左右的tone信号,结果如下所示:

可以看出,能采集到信号的数据。   

http://www.dtcms.com/a/84997.html

相关文章:

  • jieba中文分词模块,详细使用教程
  • Dart语言的安全开发
  • 小程序多语言
  • 机器学习之数据收集
  • 数据库——MySQL安装
  • Android:蓝牙设置配套设备配对
  • 2025年2月-3月后端go开发找工作感悟
  • Debezium介绍
  • DeepSORT 目标追踪算法详解
  • 区块链开发技术公司:引领数字经济的创新力量
  • Collectors.toMap / list 转 map
  • Qt桌面客户端跨平台开发实例
  • Docker搭建Testlink教程
  • 百度SEO和必应SEO优化方法
  • Java安全-类的动态加载
  • Agent系列——agent领域的mcp协议讲解
  • 如何开发一个你自己的springboot-starter
  • 自动化测试中使用的设计模式
  • 设计模式之单例模式(Singleton Pattern)
  • Kafka--常见问题
  • python-selenium 爬虫 由易到难
  • Linux实时内核 - 启用 RCU(Read-Copy Update)机制的性能测试功能
  • Excel中如何自动计算累计销量,当具体销量为空时公式自动不计算
  • 2025-03-22 学习记录--C/C++-PTA 习题4-11 兔子繁衍问题
  • 2025新版懒人精灵零基础安装调试+lua基础+UI设计交互+常用方法封装+项目实战+项目打包安装板块-视频教程(初学者必修课)
  • Linux中动静态库的创建与原理
  • Electron Forge【实战】桌面应用 —— AI聊天(上)
  • 遨游三防 | IP68热成像三防平板,助力电力智慧巡检
  • git推送代码相关学习——(一)
  • Flutter中常用命令