跟着AI学AI_02, 时域频域和MFCC

AI:ChatGPT4o

在这里插入图片描述
时域和频域是信号处理中的两个基本概念,用于描述信号的不同特性。

时域

时域(Time Domain) 是对信号随时间变化的描述。在时域中,信号是作为时间的函数来表示的。

  • 时域表示:例如,一个音频信号在时域中的表示就是一个随时间变化的波形。
  • 时域特征:信号的幅度、持续时间、波形形状等。

示例:考虑一个简单的正弦波信号:
[ x(t) = A \sin(2\pi ft + \phi) ]
其中,( A ) 是幅度,( f ) 是频率,( \phi ) 是相位,( t ) 是时间。

在时域中,这个信号看起来像一个随时间上下振荡的波形。

频域

频域(Frequency Domain) 是对信号的频率成分的描述。在频域中,信号是作为频率的函数来表示的。

  • 频域表示:例如,通过傅里叶变换,可以将时域信号转换为频域信号,这样我们可以看到信号中包含的各个频率成分及其幅度。
  • 频域特征:信号的频谱、频率分量、带宽等。

示例:考虑上面的正弦波信号,如果我们对它进行傅里叶变换,我们会得到一个在频域中的表示:
[ X(f) = \frac{A}{2j} [\delta(f - f_0) - \delta(f + f_0)] ]
这里,( \delta ) 是狄拉克δ函数,表示在 ( f = f_0 ) 和 ( f = -f_0 ) 处有一个尖峰(对应频率成分)。

时域和频域的转换

时域和频域之间的转换通常通过傅里叶变换和逆傅里叶变换来实现。

  1. 傅里叶变换

    • 将时域信号转换为频域信号。
    • 连续傅里叶变换(Continuous Fourier Transform, CFT)定义为:
      [ X(f) = \int_{-\infty}^{\infty} x(t) e^{-j2\pi ft} dt ]
  2. 逆傅里叶变换

    • 将频域信号转换回时域信号。
    • 连续逆傅里叶变换(Inverse Continuous Fourier Transform, ICFT)定义为:
      [ x(t) = \int_{-\infty}^{\infty} X(f) e^{j2\pi ft} df ]

在离散信号处理中,通常使用离散傅里叶变换(Discrete Fourier Transform, DFT)和快速傅里叶变换(Fast Fourier Transform, FFT)。

代码示例

下面是一个简单的例子,展示如何使用Python和numpy库进行傅里叶变换:

import numpy as np
import matplotlib.pyplot as plt# 生成一个简单的时域信号:正弦波
fs = 1000  # 采样率
t = np.linspace(0, 1, fs)  # 时间向量
f = 5  # 信号频率
x = np.sin(2 * np.pi * f * t)  # 生成正弦波# 进行傅里叶变换
X = np.fft.fft(x)
frequencies = np.fft.fftfreq(len(X), 1/fs)# 画出时域信号
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(t, x)
plt.title('时域信号')
plt.xlabel('时间 (秒)')
plt.ylabel('幅度')# 画出频域信号
plt.subplot(2, 1, 2)
plt.plot(frequencies[:len(frequencies)//2], np.abs(X)[:len(X)//2])
plt.title('频域信号')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅度')plt.tight_layout()
plt.show()

解释

  1. 时域信号

    • 生成一个5Hz的正弦波信号,采样率为1000Hz。
    • 在时域中,信号表示为一个随时间变化的波形。
  2. 频域信号

    • 使用numpy.fft.fft进行傅里叶变换,将时域信号转换为频域信号。
    • 使用numpy.fft.fftfreq生成对应的频率轴。
    • 在频域中,信号表示为频率成分的幅度谱。

总结

  • 时域:信号随时间变化的表示,关注时间上的特性。
  • 频域:信号的频率成分的表示,关注频率上的特性。
  • 转换:傅里叶变换用于将时域信号转换为频域信号,逆傅里叶变换用于将频域信号转换回时域信号。

这两个域提供了不同的视角来分析和处理信号,在信号处理、通信、音频处理等领域有广泛的应用。

在这里插入图片描述
MFCC(Mel Frequency Cepstral Coefficients,梅尔频率倒谱系数)是语音信号处理中的一种特征提取方法,广泛用于语音识别和音频分析领域。它基于人类听觉系统的感知模型,能够有效地表示音频信号的特征。

MFCC的计算步骤

  1. 预加重 (Pre-emphasis)

    • 通过一个高通滤波器来增强高频成分,补偿语音信号中高频部分的能量损失。
    • 通常使用的滤波器: y [ t ] = x [ t ] − α ⋅ x [ t − 1 ] y[t] = x[t] - \alpha \cdot x[t-1] y[t]=x[t]αx[t1],其中, x [ t ] x[t] x[t]是输入信号, y [ t ] y[t] y[t]是输出信号, α \alpha α一般取值0.97。
  2. 分帧 (Framing)

    • 将语音信号分成短时帧,一般每帧20-40毫秒,每帧之间有一定的重叠(通常是50%)。
    • 例如,25毫秒的帧长和10毫秒的帧移。
  3. 加窗 (Windowing)

    • 为了减少分帧过程中引入的频谱泄漏效应,对每一帧信号进行加窗处理。
    • 常用的窗函数是汉明窗(Hamming Window): w [ n ] = 0.54 − 0.46 cos ⁡ ( 2 π n N − 1 ) w[n] = 0.54 - 0.46 \cos\left(\frac{2\pi n}{N-1}\right) w[n]=0.540.46cos(N12πn),其中, N N N是窗的长度。
  4. 快速傅里叶变换 (Fast Fourier Transform, FFT)

    • 对每一帧信号进行FFT,得到频域信号。
    • 目的是从时域信号转换到频域信号,以便分析其频率成分。
  5. 梅尔频率滤波器组 (Mel Filter Bank)

    • 将频域信号通过一组梅尔频率滤波器,模拟人耳的听觉感知。
    • 梅尔频率是根据人耳的感知频率尺度定义的,低频部分滤波器密集,高频部分滤波器稀疏。
  6. 对数功率谱 (Log Power Spectrum)

    • 对通过梅尔滤波器的功率谱取对数,得到对数功率谱。
    • 目的是将乘性噪声转换为加性噪声,从而更容易处理。
  7. 离散余弦变换 (Discrete Cosine Transform, DCT)

    • 对对数功率谱进行DCT,得到MFCC系数。
    • DCT的目的是压缩特征维度,并集中能量到低维部分。

代码示例

以下是使用librosa库计算MFCC的示例代码:

import librosa
import matplotlib.pyplot as plt
import numpy as np# 加载音频文件
y, sr = librosa.load('path_to_audio_file.wav', sr=None)# 计算MFCC
mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)# 显示MFCC特征
plt.figure(figsize=(10, 4))
librosa.display.specshow(mfcc, x_axis='time')
plt.colorbar()
plt.title('MFCC')
plt.tight_layout()
plt.show()

解释

  1. 加载音频文件librosa.load函数加载音频文件,返回音频时间序列y和采样率sr
  2. 计算MFCClibrosa.feature.mfcc函数计算音频信号的MFCC特征。
  3. 显示MFCC特征:使用librosa.display.specshow函数可视化MFCC特征。

总结

MFCC通过模拟人耳的听觉感知特性,提取音频信号中的关键特征,具有很高的表达能力和鲁棒性,因此在语音识别领域得到了广泛应用。计算MFCC包括预加重、分帧、加窗、FFT、梅尔频率滤波器组、对数功率谱和DCT等步骤,每一步都对最终特征的质量有重要影响。

maraSun YBJFWDQ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么情况下需要用到动态IP

有许多方法和工具来实现包括主机名、DNS 服务器、IP地址、 网络掩码等。可以重置一个或多个IP地址。“释放”或“更新”按钮分别释放或更新一个IP地址。如果希望释放或更新所有IP 地址,请单击“全部释放”或“全部更新”。其他工动态IP地址的捕捉, Windo…

双指针解题

验证回文数(验证回文数-CSDN博客)和判断在子序列(判断子序列-CSDN博客)已经在之前进行了计算,今天有三个新的双指针问题: 两数之和II—输入有序数组 给你一个下标从 1 开始的整数数组 numbers &#xff0…

堆的认识和堆的操作

一.堆的认识: ① 也就是说它取出的顺序是需要搜索的,查找特定性质。 ② 数组:总是插入尾部(1),查找(n)移动元素删除特性(n) 链表:头插或尾插(1),查找(n)删特性(1) 所以为什么要调整顺序?就是为了查找特性方便。 有序数组:找到合适位置(n)移动元素插入(n),删除最…

HMM地图匹配算法库Barefoot环境搭建

1.引入gps路径匹配开源项目barefoot 克隆仓库 git clone https://github.com/bmwcarit/barefoot.git打开项目执行mvn命令将项目打包到maven仓库 mvn install -DskipTests在自己的maven项目中引入barefoot依赖 <dependency><groupId>com.bmw-carit</groupId&g…

第五篇 加法器

实验五 加法器 5.1 实验目的 掌握半加器和全加器的基本原理 掌握串行进位加法器的基本原理 掌握使用全加器实现串行进位加法器的基本原理 熟悉Verilog 代码设计 5.2 原理介绍 5.2.1 半加器 半加器和全加器是算数运算电路中的基本单元&#xff0c;它们是完成1位二进制数…

PDA怎么编程:深度探索PDA编程的四大领域、五大步骤、六大技巧与七大注意事项

PDA怎么编程&#xff1a;深度探索PDA编程的四大领域、五大步骤、六大技巧与七大注意事项 在数字化时代&#xff0c;PDA&#xff08;个人数字助理&#xff09;作为一种便携式的智能设备&#xff0c;其编程能力日益受到关注。然而&#xff0c;对于许多初学者来说&#xff0c;PDA…

【leetcode--最后一个单词的长度】

给你一个字符串s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开&#xff0c;返回字符串中最后一个单词的长度。 第一次解法&#xff1a; class Solution:def lengthOfLastWord(self, s: str) -> int:n len(s)j 0for i in range(n-1, -1, -1):if s[i]…

centos 环境 nginx 安装及常用命令简介

一、引言 Nginx 是一个高性能的HTTP和反向代理服务器&#xff0c;因其卓越的性能、丰富的功能集、简单的配置和低资源消耗而广受欢迎。本文将详细介绍如何在CentOS系统中安装Nginx&#xff0c;并简要介绍一些常用的Nginx命令。 二、在CentOS中安装Nginx 1.先检查服务器 GCC …

K-means聚类模型算法的应用与原理

K-means聚类是一种非常流行的聚类算法&#xff0c;它的目标是将n个样本划分到k个簇中&#xff0c;使得每个样本属于与其最近的均值&#xff08;即簇中心&#xff09;对应的簇&#xff0c;从而使得簇内的方差最小化。K-means聚类算法简单、易于实现&#xff0c;并且在许多应用中…

《MySQL索引》学习笔记

《MySQL索引》学习笔记 MySQL的体系结构存储引擎简介InnoDB简介MyISAM简介 索引索引结构BTreeHash索引思考索引分类 索引语法SQL性能分析索引使用最左前缀法则 索引失效的情况范围查询索引列运算字符串不加引号模糊查询or连接的条件数据分布影响 SQL提示覆盖索引前缀索引单列索…

Ubuntu安装Meatsploit2024.6.4

1、安装metasploit cd /opt && wget https://downloads.metasploit.com/data/releases/metasploit-latest-linux-x64-installer.run && wget https://downloads.metasploit.com/data/releases/metasploit-latest-linux-x64-installer.run.sha1 && echo…

操作系统复习-linux的进程管理

linux的进程管理 linux进程的相关概念 进程的类型 前台进程 前台进程就是具有终端&#xff0c;可以和用户交互的进程&#xff0c;会占用终端shell&#xff0c;不可以输入其他的命令。 后台进程 前台进程就是具有终端&#xff0c;可以和用户交互的进程。 不会占用终端shell&a…

macOS的word没有zotero怎么办

打开zotero,首选项,引用,重新安装加载项 然后到word里 点模板和加载项 把zotero勾上,OK了

Java学习【认识异常】

Java学习【认识异常】 认识异常异常的种类异常的作用 异常的处理方式JVM默认的处理方式捕获异常finally 多个异常的处理异常中的方法抛出异常 自定义异常 认识异常 在Java中&#xff0c;将程序执行过程中发生的不正常行为称为异常 异常的种类 Error代表的是系统级别的错误&a…

ClickHouse 使用技巧总结

文章目录 数据导入、导出技巧外部文件导入导技巧使用集成表引擎导入、导出数据 建表技巧表引擎选择技巧分区键选择技巧数据结构选择技巧分区技巧 高级技巧物化视图投影位图变更数据捕获 常见报错及处理方法 数据导入、导出技巧 外部文件导入导技巧 ClickHouse作为OLAP即席分析…

每日一题《leetcode--206.反转链表》

https://leetcode.cn/problems/reverse-linked-list/ 这道题可以定义一个新结点newhead&#xff0c;newhead指向NULL。此时遍历所给链表将遍历的每个结点头插到newhead上。 struct ListNode* reverseList(struct ListNode* head) {struct ListNode* curhead;struct ListNode* n…

Spring中的核心概念

黑马程序员SSM框架教程 文章目录 一、IoC二、DI三、目标&#xff1a;充分解耦 一、IoC IoC&#xff08;Inversion of Control&#xff09;控制反转 使用对象时&#xff0c;由主动new产生对象转换为外部提供对象&#xff0c;此过程中对象创建控制权由程序转移到外部&#xff0c…

Visual Studio 2022开发CTP的问题汇总

订阅合约的函数原型如下 virtual int SubscribeMarketData(char *ppInstrumentID[], int nCount) 0;参数定义 char* ppInstrumentID[] { "rb2410", "sc2407" }; 报错&#xff1a;E0144 “const char *” 类型的值不能用于初始化 “char *” 类型的实体 …

Go语言垃圾回收(GC原理)

1. GC回收机制 1.1 V1.3标记清除法 (1)概述 1.STW暂停 STW(暂停业务逻辑,找出可达和不可达对象) 2.对可达对象做上标记 标记完成之后,对象5和对象6不可达,被GC清除.之后STW结束. (2).缺点 STW :让程序暂停,程序出现卡顿.标记需要扫描整个heap.清除数据会产生heap碎片. 1.…

常用的linux命令

工作中常用的linux命令 查看磁盘存储情况 df -h查看端口占用情况 netstat -tunlp | grep 端口号查看java服务运行情况 ps -ef | grep "java"查看运行内存使用情况 free -h清除内存中的缓存 echo 3 > /proc/sys/vm/drop_caches查看linux系统最大进程数 ulim…