# 音频处理4_傅里叶变换

news2024/11/22 15:10:08

1.离散傅里叶变换

对于离散时域信号 x[n]使用离散傅里叶变换(Discrete Fourier Transform, DFT)进行频域分析。

DFT 将离散信号 x[n] 变换为其频谱表示 X[k],定义如下:

X [ k ] = ∑ n = 0 N − 1 x [ n ] e − j 2 π k n N X[k] = \sum_{n=0}^{N-1} x[n]e^{-j\frac{2\pi kn}{N}} X[k]=n=0N1x[n]ejN2πkn

1.1 共轭对称性

对于实值信号,其离散傅里叶变换(DFT)的结果在频谱上是共轭对称性(Conjugate Symmetry)

复共轭:实数相同,虚数取反

z = a + bi, 那么 \overline{z} = a - bi

1.2 奈奎斯特频率

奈奎斯特频率(Nyquist frequency)指在采样过程中,能够精确还原原始信号的最高频率。根据奈奎斯特定理,为了正确地重建一个信号,采样频率必须至少是信号中最高频率的两倍。

因此,奈奎斯特频率就是采样频率的一半。如果信号的频谱超过了奈奎斯特频率,就会出现混叠(aliasing)现象,导致采样后的信号无法正确还原原始信号。

典型的人类语音频率范围大约在0 Hz到4 kHz之间,主要能量集中在0 Hz到2.5 kHz。

因此,为了捕捉和处理语音信号的主要频率成分,通常选择的采样频率是略大于这个最高频率(如8 kHz)。

1.3 混叠(aliasing)现象

即采样频率低于信号中最高频率的两倍,就会导致频域中的信号成分发生错位和重叠(表现为失真),从而无法正确地重建原始信号

如果采样频率低于最高频率的两倍,那么高于奈奎斯特频率的信号成分会“折叠”到采样频率范围内的其他频率位置上。

当信号频率超过了奈奎斯特频率时,它在采样后的频域中将被错误地解释为低于奈奎斯特频率的频率,这会导致信号在频域中产生额外的频率能量,这些能量是原始信号频率的镜像(或折叠)。

2.快速傅里叶变换(FFT)

FFT利用分治策略将离散傅里叶变换(DFT)分解为更小规模的DFT计算。将长度为 N 的序列分成长度为
N/2 的两个子序列,然后递归地应用FFT算法计算这两个子序列的DFT,最后将结果合并为原始序列的DFT。

  • Scipy的FFT用于可视化频域图
# 使用 scipy.fftpack.fft 计算 FFT
fft_result = fft(signal)

# 计算频率轴
freqs = np.fft.fftfreq(len(signal), d=t[1] - t[0])

3.短时傅里叶变换(STFT)

短时傅里叶变换(Short-Time Fourier Transform, STFT)用于画时频谱,
是一种将信号分解到时间-频率域的方法,

参数如下:

input (Tensor):
* 输入信号,可以是 1D 或 2D 张量。
* 如果是 1D 张量,则表示单个信号序列。
* 如果是 2D 张量,第一维表示信号的批次(batch),第二维表示每个信号的时间步。

n_fft (int):
* 每个窗口的 FFT 点数。
* 通常是一个大于等于 win_length 的值。这个参数决定了频域分辨率。

hop_length (int, optional):
* 窗口之间的跳跃长度(即窗口之间的距离)。
* 默认值为 win_length // 2,即窗口重叠一半。

win_length (int, optional):
* 每个窗口的长度。
* 默认值为 n_fft, 大于n_fft, 则需要填充窗口剩余样本点。

window (Tensor, optional):
* 窗函数,用于加窗处理,以提升频谱的平滑度。
* 通常使用汉宁窗(Hann window)或汉明窗(Hamming window)。
* 默认值为一个全 1 的窗函数。

center (bool, optional):
* 如果为 True(默认值),则在信号的两端各加上 n_fft // 2 个零,以确保每个时间点都有一个完整的窗口。

pad_mode (str, optional):
* 填充模式,当 center 为 True 时使用。
* 可以是 'constant', 'reflect' 等。默认值为 'reflect'。

normalized (bool, optional):
* 如果为 True,则返回的 STFT 会进行归一化处理。

onesided (bool, optional):
* 如果为 True(默认值),则返回的 STFT 只包含非负频率部分,这在处理实数信号时是有用的。

return_complex (bool, optional):
* 如果为 True,则返回复数类型的结果。否则,返回一个两通道的实数张量,其中一个通道是实部,另一个通道是虚部。

4.代码样例

一个信号由两个信号叠加:

signal = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 50 * t)

上图为stft, 下图为fft
在这里插入图片描述

代码在Github_Link

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

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

相关文章

Qt 使用代码布局,而不使用UI布局

一、工程的建立: 1、打开Qt Creator,文件,新建文件或项目 2、选择Application,Qt Widgets Application 3、写入名称,选择qmake 4、选择基类Base class,去除Generate form 务必选择QWidget,若…

读AI新生:破解人机共存密码笔记14逆强化学习算法

1. 数学保证 1.1. 如果我们要沿着新的路线重建人工智能,那么它的基础必须是坚实的 1.2. 通过精确的定义和一步步的严格数学证明来提供无可辩驳的保证 1.3. 希望证明一个定理:设计人工智能系统的一种特殊方式可以确保它…

Linux如何安装openjdk1.8

文章目录 Centosyum安装jdk和JRE配置全局环境变量验证ubuntu使用APT(适用于Ubuntu 16.04及以上版本)使用PPA(可选,适用于需要特定版本或旧版Ubuntu)Centos yum安装jdk和JRE yum install java-1.8.0-openjdk-devel.x86_64 安装后的目录 配置全局环境变量 vim /etc/pr…

Python | Leetcode Python题解之第201题数字范围按位与

题目&#xff1a; 题解&#xff1a; class Solution:def rangeBitwiseAnd(self, m: int, n: int) -> int:while m < n:# 抹去最右边的 1n n & (n - 1)return n

spring-boot-starter-json配置对象属性为空不显示

问题背景 在Spring Boot中使用spring-boot-starter-json&#xff08;通常是通过jackson实现的&#xff09;时&#xff0c;如果你希望在序列化对象时&#xff0c;如果某个属性为空&#xff0c;则不显示该属性&#xff0c;你可以使用JsonInclude注解来实现这一点。 pom.xml <…

net Framework OAuth2.0

grant_type client_credentials 客户端凭证password 密码模式 用于资源所有者密码凭据token 隐藏式 、 简化式 简化模式又称为隐式授权码模式&#xff0c;它是授权码模式的一个简化版本authorization_code 授权码 A. 第三方程序向资源拥有者(用户)发送授权请求&#xf…

如何获得更高质量的回答-chatgpt

在与技术助手如ChatGPT进行交互时&#xff0c;提问的方式直接影响到你获得的答案质量。以下是几个关键的提问技巧&#xff0c;可以帮助你在与ChatGPT的互动中获得更有效的回答&#xff1a; 1. 清晰明了的问题 技巧&#xff1a;确保问题清晰明了&#xff0c;避免含糊不清或模糊的…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 特殊加密算法(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

一键智控,舒适无限:网关在风机盘管智能温控中的应用

风机盘管智能控制系统采用钡铼技术系列无线网关&#xff0c;搭配各类风机设备及传感器组成无线物联中央空调室内机管理系统&#xff0c;实现整个办公楼的空调环境智能化管理。在建筑舒适度的前提下&#xff0c;降低能耗&#xff0c;避免能源浪费。 网关通信接口采用无线传输的…

vscode刷LeetCode算法题环境配置

首先&#xff0c;下载nodejs 在vscode中安装LeetCode插件 安装好进行配置 选择leetcode-cn 填上刚才下载node.exe的路径 完成之后重启一下vscode 重启之后登陆LeetCode 完成之后就可以看到题目了 点击 code now 就可以开始刷题了

Flutter循序渐进==>第一个界面

导言 const MyApp({Key? key}) : super(key: key); const: 这个关键字表示这是一个编译时常量构造函数。当一个类使用 const 构造函数初始化时&#xff0c;它的所有字段都将被设置为编译时常量&#xff0c;并且该对象将在编译时就被创建出来。这对于状态不变&#xff08;immu…

基于单片机和LabVIEW 的远程矿井水位监控系统设计

摘要 &#xff1a; 针 对 现 有 矿 井 水 位 监 控 系 统 存 在 结 构 复 杂 和 不 能 远 程 监 控 的 问 题 &#xff0c; 设计了基于单片机和&#xff2c;&#xff41;&#xff42;&#xff36;&#xff29;&#xff25;&#xff37; 的远程矿井水位监控系统 &#xff0c; 详…

python-(opencv)视频转glf

文章目录 前言python-(opencv)视频转glf1. 下载 opencv-python2. cv2&#xff08;OpenCV&#xff09;和imageio的区别3. demo源码 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说…

uView 2.0:uni-app生态的利剑出鞘,引领UI框架新纪元

引言 随着移动互联网的快速发展&#xff0c;跨平台应用开发成为了开发者们关注的焦点。uni-app&#xff0c;一个基于Vue.js的跨平台应用开发框架&#xff0c;因其高效、易用的特性而广受欢迎。在uni-app的生态系统中&#xff0c;UI框架的选择对于开发者而言至关重要。今天&…

2024上海CDIE 参展预告 | 一站式云原生数字化平台已成趋势

为什么企业需要进行数字化转型&#xff1f;大家都在讨论的数字化转型面临哪些困境&#xff1f;2024.6.25-26 CDIE数字化创新博览会现场&#xff0c;展位【A18】&#xff0c;期待与您相遇&#xff0c;共同探讨企业如何利用数字化技术驱动业务增长。 一、展会介绍——CDIE数字化…

C语言 | Leetcode C语言题解之第201题数字范围按位与

题目&#xff1a; 题解&#xff1a; int rangeBitwiseAnd(int m, int n) {while (m < n) {// 抹去最右边的 1n & (n - 1);}return n; }

【Linux操作系统】进程地址空间与动态库加载

当系统执行一个依赖动态库的可执行程序时&#xff0c;系统不仅要将该可执行程序加载到内存中还要由加载器将动态库加载到内存中&#xff08;静态库没有&#xff09;&#xff0c;因此必须要让加载器知道该动态库的名称&#xff0c;系统会默认在/lib64路径下查找&#xff0c;解决…

Java将list数组中重复的对象进行去重

/*** 数组去重*/ public class ArrayDistinct {public static void main(String[] args) {ArrayList<Object> list new ArrayList<>();JSONObject jsonObject1 new JSONObject();jsonObject1.put("name","张三");jsonObject1.put("age&…

Vite: 关于Rollup打包

概述 Rollup 是一款基于 ES Module 模块规范实现的 JavaScript 打包工具&#xff0c;在前端社区中赫赫有名&#xff0c;同时也在 Vite 的架构体系中发挥着重要作用不仅是 Vite 生产环境下的打包工具&#xff0c;其插件机制也被 Vite 所兼容&#xff0c;可以说是 Vite 的构建基…

kubekey 安装高可用 kubernetes 集群

1. 准备环境 1.1 机器准备 4 台机器&#xff0c;操作系统&#xff1a;Ubuntu 24.04/RHEL8/CentOS9 10.111.3.53 master1 10.111.3.54 master2 10.111.3.55 master3 10.111.3.57 node41.2 安装依赖和配置 所有节点都需要执行&#xff1a; Ubuntu: apt-get install -y soca…