短时傅里叶变换(Short-Time Fourier Transform, STFT),语音识别

news2024/9/23 11:22:11

高能预警!!!

.wav文件为笔者亲自一展歌喉录制的噪声,在家中播放,可驱赶耗子,蟑螂

介绍

短时傅里叶变换(Short-Time Fourier Transform, STFT)是一种时频分析方法,用于分析非平稳信号的频率成分随时间的变化。与传统的傅里叶变换不同,STFT在处理信号时考虑了时间局部性,使得它能够同时在时间域和频率域上分析信号。

STFT的背景

傅里叶变换可以将信号从时间域转换到频率域,揭示出信号的频率成分。然而,傅里叶变换有一个显著的局限性,即它假定信号在整个时间范围内都是稳定的,频率成分不随时间变化。因此,对于非平稳信号——即其频率成分随时间变化的信号——傅里叶变换难以提供充分的信息。

为了克服这一局限性,STFT被引入,它通过将信号分割为一系列较短的时间窗口,假定每个窗口内的信号是近似平稳的。然后对每个窗口内的信号应用傅里叶变换,从而获得在这些窗口内的频率成分。

STFT的定义

STFT的基本思想是使用一个滑动窗口函数,将信号分割成若干个短时段,对每个时段进行傅里叶变换。STFT定义为:
X ( t , f ) = ∫ − ∞ ∞ x ( τ ) ⋅ w ( τ − t ) ⋅ e − j 2 π f τ d τ X(t,f) = \int_{-\infty}^{\infty}x(\tau)\cdot w(\tau-t)\cdot e^{-j2\pi f\tau}d\tau X(t,f)=x(τ)w(τt)ej2πfτdτ
其中,
x ( τ ) x(\tau) x(τ)是原始信号。
w ( τ − t ) w(\tau -t) w(τt) 是一个窗口函数(通常为高斯窗、汉宁窗、矩形窗等),它在时间 t t t处对信号进行加权。
f f f是频率, t t t是时间。
X ( t , f ) X(t,f) X(t,f)是时间 t t t处的频谱。
通过选择不同的窗口函数和窗口长度,可以在时间分辨率和频率分辨率之间进行权衡。

STFT的计算步骤

信号分段:将信号分割成若干重叠的短时间片段,每个片段与相邻片段之间通常有部分重叠,以确保时间域上的连续性。

加窗:对每个片段施加一个窗口函数,使得信号的边缘部分平滑过渡,减少频谱泄露效应。

傅里叶变换:对每个加窗后的片段应用傅里叶变换,得到该时间片段的频谱信息。

时频图:将每个时间片段的频谱信息组合起来,形成一个二维的时频图(或称为声谱图),横轴为时间,纵轴为频率,颜色或强度表示该时间和频率位置处的信号幅度。

STFT的性质

时间分辨率与频率分辨率的权衡:窗口函数的长度决定了STFT的时间分辨率和频率分辨率。短窗口提供较好的时间分辨率,但频率分辨率较差;长窗口则提供较好的频率分辨率,但时间分辨率较差。

频谱泄露:由于窗口函数的截断效应,STFT会产生频谱泄露,即频谱成分扩展到其他频率范围。通过选择合适的窗口函数(如汉宁窗或高斯窗)可以减少这种效应。

时频不确定性:STFT的时频分析受到不确定性原理的限制,即无法同时获得无限好的时间分辨率和频率分辨率。

STFT的应用

STFT广泛应用于各种需要时频分析的领域,以下是一些典型的应用场景:

语音信号处理:在语音信号处理中,STFT被用来分析语音信号的时频特性,如语音识别、语音增强和语音分离等任务中。

音乐信号分析:STFT用于音乐信号的频谱分析、音高检测、乐器识别等。它可以显示乐曲随时间变化的频谱结构,帮助理解音乐的动态特性。

地震波分析:在地震波信号处理中,STFT可以帮助分析地震波的频率成分随时间的变化,特别是在地震事件中的高频噪声或波形变化。

生物医学信号分析:在心电图(ECG)、脑电图(EEG)等生物医学信号处理中,STFT可以用于检测信号中的异常波形或事件,例如癫痫发作期间的EEG频谱变化。

机器故障诊断:在机械系统的振动信号分析中,STFT可以用于检测和识别随时间变化的频率成分,从而诊断出潜在的机械故障。

STFT的局限性

尽管STFT在时频分析中非常有用,但它也有一些局限性:

分辨率权衡:如前所述,时间分辨率和频率分辨率之间存在固有的权衡,无法同时获得高时间分辨率和高频率分辨率。

计算复杂度:STFT涉及对每个时间片段进行傅里叶变换,计算量较大,尤其是对于长时间序列信号,这可能成为计算资源的瓶颈。

窗口效应:窗口函数的选择对STFT结果有显著影响,不同的窗口函数可能导致不同的频谱特征,从而影响分析结果的准确性。

STFT与其他时频分析方法的比较

除了STFT之外,还有一些其他时频分析方法,例如小波变换(Wavelet Transform, WT)、希尔伯特黄变换(Hilbert-Huang Transform, HHT)等。这些方法各有优缺点,适用于不同类型的信号分析任务:

小波变换:通过不同尺度的多分辨率分析,提供更灵活的时频分辨率选择,适合分析具有突变点或非平稳特性的信号。

希尔伯特黄变换:基于经验模态分解(EMD)方法,用于处理非线性和非平稳信号,能够自适应地分解信号的本征模态函数。

STFT的优势在于其相对简单且直观的时频分析方法,特别适用于处理较为平稳的信号或在短时间内频率变化不大的信号。小波变换则在处理突变或非线性信号时表现更好,而希尔伯特黄变换适合处理复杂的非平稳信号。

本文代码

我们将展示如何使用短时傅里叶变换(STFT)进行语音信号的处理与分析,以用于语音识别场景。这段代码涵盖了语音信号的预处理、STFT计算、特征提取,以及用于语音识别的MFCC(Mel-Frequency Cepstral Coefficients)特征的计算

核心代码

% MATLAB Code for Speech Recognition using STFT

% Step 1: Load and Preprocess the Speech Signal
[speechSignal, Fs] = audioread('1725125026821.wav'); % Load speech signal from a .wav file
speechSignal = speechSignal(:,1); % Use only one channel if the signal is stereo
speechSignal = speechSignal / max(abs(speechSignal)); % Normalize the signal

% Step 2: Parameters Setup
frameLength = 0.025 * Fs; % 25 ms per frame
frameOverlap = 0.015 * Fs; % 15 ms overlap
nfft = 2^nextpow2(frameLength); % FFT length, next power of 2 from frame length
window = hamming(frameLength); % Hamming window for each frame

% Step 3: Compute STFT
[S, F, T] = stft(speechSignal, Fs, 'Window', window, 'OverlapLength', frameOverlap, 'FFTLength', nfft);

% Convert STFT result to magnitude spectrogram
magnitudeSpectrogram = abs(S);

% Step 4: Mel-Frequency Cepstral Coefficients (MFCC) Calculation
% The mfcc function should be used with proper parameters

mfccs = mfcc(speechSignal, Fs, 'NumCoeffs', 13, 'WindowLength', frameLength, 'OverlapLength', frameOverlap);

% Step 5: Visualize the Results

% Plot the original speech signal
figure;
subplot(3,1,1);
plot((1:length(speechSignal))/Fs, speechSignal);
title('Original Speech Signal');
xlabel('Time (s)');
ylabel('Amplitude');

% Plot the magnitude spectrogram

title('Magnitude Spectrogram (dB)');
xlabel('Time (s)');
ylabel('Frequency (Hz)');
colorbar;

% Plot the MFCCs
subplot(3,1,3);
imagesc(T, 1:13, mfccs');
axis xy;
title('MFCCs');
xlabel('Time (s)');
ylabel('MFCC Coefficient Index');
colorbar;

% Step 6: Application in Speech Recognition
% Assuming the MFCCs are now used as features for a machine learning model (e.g., HMM, GMM, DNN)

% For demonstration purposes, we'll cluster the MFCCs using k-means


% Visualize clustered MFCCs
figure;
for i = 1:numClusters
    scatter(T(idx == i), idx(idx == i), 'DisplayName', sprintf('Cluster %d', i));
    hold on;
end
title('Clustered MFCC Features');
xlabel('Time (s)');
ylabel('Cluster Index');
legend show;


代码说明

语音信号加载与预处理
audioread 函数加载语音信号文件。此处假设输入的是一个.wav文件,名字为speech_sample.wav。
信号被归一化处理,以确保幅度范围在 -1 到 1 之间。
参数设置
窗口长度设置为25毫秒,这在语音处理中是常见的选择,足够短以捕捉语音中的瞬态变化,又足够长以包含足够多的频率信息。
重叠部分设置为15毫秒,有助于提高时间分辨率并平滑过渡。
FFT长度设置为接近窗口长度的2的次幂,确保FFT计算效率。
STFT计算
使用MATLAB的stft函数计算短时傅里叶变换(STFT)。
生成的S是复数矩阵,其大小为[频率分辨率 x 时间分辨率]。
magnitudeSpectrogram 计算STFT的幅度谱,显示信号在频率和时间上的变化。
MFCC计算
Mel频率倒谱系数(MFCCs)是语音识别中常用的特征。
mfcc函数基于Mel尺度对STFT幅度谱进行滤波,提取语音的低维特征。
这部分提取的MFCC特征将用于语音识别模型中。
结果可视化
绘制了原始语音信号的时域图像。
绘制了幅度谱图,通过二维图展示频谱随时间的变化(时频图)。
绘制了MFCC系数随时间的变化,帮助分析语音信号的低维特征。
语音识别应用示例
使用k-means聚类算法对提取的MFCC特征进行聚类,模拟语音识别中的特征分类过程。
聚类结果被可视化展示,不同颜色代表不同的聚类(可能代表不同的语音音素或单词)

扩展(创新点)

这个MATLAB代码可以进一步扩展,用于更多复杂的语音处理任务。例如,结合深度学习模型(如卷积神经网络,CNN)来进行语音分类或识别任务,或者引入隐马尔可夫模型(HMM)进行时间序列的建模。

效果

在这里插入图片描述

完整代码获取

关注下方卡片公众号,回复"STFT"获取完整代码

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

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

相关文章

智能分拣投递机器人

产品介绍 自研智能分拣投递机器人,专注于物流行业“NC小件”的分拣与投递,机器人运行稳定、分拣效率高,搭配智能分拣投递系统单台机器人最大作业效率可达400件/H,投递效率相较于传统“小黄人“提升了30%-50%,可替代“…

生成艺术,作品鉴赏:物似主人形

2001年,当21岁的我,还在恒基伟业当高级工程师时。我有一个女同事,她有个特别大的杯子用来喝水,不夸张的说,是那种我从来没见过的大杯子,由于她是很大只的那种,她便自嘲说:「物似主人…

RAG增强的视觉问答开发框架

检索增强生成 (RAG) 是一种强大的技术,可以提高大型语言模型 (LLM) 生成的答案的准确性和可靠性。它还提供了检查模型在特定生成过程中使用的源的可能性,从而使人类用户更容易进行事实核查。此外,RAG 可以使模型知识保持最新状态并整合特定主…

前端进阶| 深入学习面向对象设计原则

引言 面向对象编程(Object-Oriented Programming,OOP)是一种常用的编程范式,它通过将数据和与之相关的操作封装在一起,提供了一种更有组织和易于理解的方式来构建应用程序。在JavaScript中,我们可以使用面…

【持续更新】【Google Play版】淘宝最新国际版10.36.10.20启动更快

功能和国内比基本是差不多的,只不过没有应用内乱七八糟的弹窗,用起来比较舒服,启动也比较快。 像这种软件如何保证是 官方 的呢?毕竟涉及到财产,还是要小心些的。 很简单,修改过的 app 会提示“签名不一致…

Unity本地化id查找器,luaparser函数参数查找

前言: 适用范围:Unity 中需要查找所有预制体里面的某一个脚本的属性值,或者Lua脚本里面的某一个属性值 本文介绍如何查找预制体和Lua脚本里面调用的本地化id 下面首先介绍改插件的功能以及使用方法,然后对该插件的原理进行说明 使…

SOMEIP_ETS_075: Wrong_Message_Type

测试目的: 验证当设备(DUT)接收到一个包含错误消息类型的SOME/IP请求时,是否能够返回错误消息或忽略该请求。 描述 本测试用例旨在检查DUT在处理一个echoUINT8方法的SOME/IP消息时,如果消息中包含的消息类型不正确&…

【超详细】Linux开发环境搭建指南 | Ubuntu

文章目录 虚拟机安装对比Virtual Box 下载ubuntu 操作系统下载Virtual Box 安装安装ubuntu设置中文语言共享文件夹设置添加输入法安装步骤,参考官方教程 安装 vscode解决主机不能通过ssh连接宿主机网络连接几种网络连接区别主机和宿主机相互 ping通 网络代理 虚拟机…

为k8s准备docker 私有仓库 harbor

目录 一、 环境准备 二、部署docker 二、为Registry提加密传输 三、为仓库建立登陆认证 四、构建harbor 五、上传镜像 然后就是在200上面进行配置了 一、 环境准备 我是用两台虚拟机(红帽9)的,一台172.25.254.10用来部署加密认证仓库,另一台172.2…

从零上手CV竞赛:YOLO方案 # Datawhale AI夏令营

文章目录 平台参赛平台云平台 Task 1 从零上手CV竞赛下载baseline相关文件一键运行baseline!(大约需要25分钟)赛题解析数据集提交结果违法标准注意事项 下载生成的文件结果如图最后要记得关机 不然一直消耗算力 Task 2 建模方案解读与进阶物体…

【大数据算法】时间亚线性算法之:串相等判定算法。

串相等判定算法 1、引言2、串相等判定算法2.1 定义2.2 核心原理2.3 应用场景2.4 算法公式2.4.1 Rabin-Karp算法2.4.2 哈希函数 2.5 代码示例 3、总结 1、引言 小屌丝:鱼哥, 啥是串相等判定算法啊 小鱼:这个… en…en… 小屌丝:咋…

ai免费生成ppt软件有哪些?我推荐秒出PPT

现在市面上的ai生成PPT软件非常的多。有收费的,也有不收费的,生成的效果也各不相同。要选择一个性价比高的确实难度不小。 我在使用了不少的产品之后,说一说我的心得。 首先就是,大部分免费的ai生成ppt产品并不好用。我怕不排除…

解决Selenium已安装,在pycharm导入时报错

搭建设selenium环境时,selenium已安装,但是在pycharm中使用“from selenium import webdriver”语句时红线报错 解决方案: 1.file->settings进入设置 2.点击加号,搜索‘selenium’安装 3,等待安装完成&#xff0…

windows 上安装 Anaconda

下载 立即下载 |蟒蛇 (anaconda.com) 安装

Nginx: 高可用和与虚拟路由冗余协议VRRP原理以及KeepAlived软件架构

Nginx 服务的高可用 1 )服务可用 假定是这样一个最传统的一个CS模式的一个客户服务器模式 这里有用户和一台服务器服务器可能是mysql, 也可能是webserver, 或其他服务器 想实现服务可用的一个三要素 1.1 ) server 需要公网的ip地址以及申请一个域名1.2 ) 需要服务软…

MIG IP核详解

1.MIG IP核简介 MIG(Memory Interface Generators) IP 核是Xilinx公司针对DDR存储器开发的 IP,里面集成存储器控制模块,实现DDR读写操作的控制流程,下图是7系列的 MIG IP 核结构框图。MIG IP 核对外分出了两组接口。左侧是用户接口&#xff…

自制实战吃鸡手柄原理

在前面的讨论中,通过类似物理点击的方式来实现了声控触发射击键的点击 【Arduino】自制声控点击器(吼叫吃鸡助手)_辅助机械臂物理物理键盘点击器神器-CSDN博客 为了更有实战效果,我们可以把玩具枪改造为一个手柄,这样…

2024年Java最新面试题总结(三年经验)

目录 第一章、基础技术栈1.1)集合,string等基础问题1、arraylist ,linkedlist的区别,为啥集合有的快有的慢2、字符串倒叙输出2.1、字符串常用方法2.2、字符串号拼接的底层原理3、讲一下Java的集合框架4、定义线程安全的map&#x…

进制数基础知识 与 位运算(基础版)

目录 1. 计算机常用进制类别 2. 10进制转各种进制(取余倒置法) 3. 二进制转8进制、16进制 3.1 二进制转8进制 3.2 二进制转16进制 4. 原码、反码、补码 5. 整型提升 与 算术转换 5.1 整型提升 5.2 算术转换 6. 移位操作符 6.1 左移操作符( &l…

【spring】学习笔记2:sample、boot功能和组件设计

Spring自带了一个强大的Web框架,名为Spring MVC。Spring MVC的核心 是控制器(controller)的理念。控制器是处理请求并以某种方式进行信息 响应的类。在面向浏览器的应用中,控制器会填充可选的数据模型并将请求 传递给一个视图,以便于生成返回给浏览器的HTML。在pom.xml文件…