【语音信号处理】短时傅立叶变换的频谱图详细教程

简介: 【语音信号处理】短时傅立叶变换的频谱图详细教程

文章目录

一.语法与参数介绍

二.频谱图的默认值

三.沿 x 轴的频率

四.频谱图和瞬时频率

一.语法与参数介绍

spectrogram函数做短时傅立叶变换的频谱图。

调用格式如下:

s = spectrogram(x,window,noverlap,nfft)

使用nfft采样点来计算离散傅立叶变换。

输入参数解释:

x:

x—输入信号
示例:cos(pi/4*(0:159))+randn(1,160)指定嵌入高斯白噪声的正弦曲线。

window:

window—窗口
窗口,指定为整数或行或列向量。使用window的信号划分成段:
1.如果window是整数,则将其spectrogram分成一定x长度的段,window并使2.用该长度的汉明窗对每个段进行窗口化。
如果window是向量,则将其spectrogram划分x为与向量长度相同的段,并使用 对每个段进行窗口化window。
如果x不能将的长度精确地划分为具有noverlap重叠样本的整数个段,则相应地x截断。
如果您指定window为空,则spectrogram使用汉明窗口,将x其划分为具有noverlap重叠样本的八个段。
示例:hann(N+1)并且(1-cos(2*pi*(0:N)'/N))/2都指定了一个长度为N + 1的 Hann 窗口。

noverlap:

noverlap—重叠样本
重叠样本数,指定为正整数。
如果window是标量,则 noverlap必须小于 window。
如果window是向量,则 noverlap必须小于 的长度window。
如果指定noverlap为空,则 spectrogram使用在段之间产生 50% 重叠的数字。如果未指定段长度,则函数设置 noverlap为⌊ N x /4.5⌋,其中N x是输入信号的长度,⌊⌋符号表示楼层函数。

nftt:

nfft— DFT 点数
DFT 点数,指定为正整数标量。如果指定 nfft为空的,则 spectrogram设置参数到最大值(256,2 p),其中p  =⌈log 2  Ñ瓦特⌉,所述⌈⌉符号表示上取整函数,并
N w = windowifwindow 是标量。
N w = if是一个向量。length(window)window

fs

fs—采样率
采样率,指定为正标量。采样率是单位时间内的采样数。如果时间单位是秒,则采样率以赫兹为单位。

二.频谱图的默认值

生成 N X = 1024 个由正弦曲线和组成的信号样本。正弦波的归一化频率为 2π/5 rad/sample 和 4π/5 rad/sample。较高频率的正弦波幅度是另一个正弦波的幅度的 10 倍。

N = 1024;
n = 0:N-1;
w0 = 2*pi/5;
x = sin(w0*n)+10*sin(2*w0*n);

使用函数默认值计算短时傅立叶变换。绘制频谱图。

s = spectrogram(x);
spectrogram(x,'yaxis')

返回:

1.png

重复计算:

  • 将信号分成不同长度的部分 nsc=[Nx/4.5]。
  • 使用汉明窗口对部分进行窗口化。
  • 指定连续部分之间的 50% 重叠。
  • 要计算 FFT,请使用 max(256,2^p ) 点,其中 p=[log2nsc]。
    验证两种方法是否给出相同的结果:
Nx = length(x);
nsc = floor(Nx/4.5);
nov = floor(nsc/2);
nff = max(256,2^nextpow2(nsc));
t = spectrogram(x,hamming(nsc),nov,nff);
maxerr = max(abs(abs(t(:))-abs(s(:))))

返回:

1.png

将信号分成 8 个等长的部分,部分之间有 50% 的重叠。指定与上一步相同的 FFT 长度。计算短时傅立叶变换并验证它给出与前两个过程相同的结果。

ns = 8;
ov = 0.5;
lsc = floor(Nx/(ns-(ns-1)*ov));
t = spectrogram(x,lsc,floor(ov*lsc),nff);
maxerr = max(abs(abs(t(:))-abs(s(:))))

返回:

1.png

三.沿 x 轴的频率

t = 0:0.001:2;
x = chirp(t,100,1,200,'quadratic');

计算并显示 x 的频谱图

  • 将信号分成长度为 128 的部分,用汉明窗加窗。
  • 指定相邻部分之间重叠的 120 个样本。
  • 评估在[128/2+1]=65 频率和 [(length(x)−120)/(128−120)]=235 频率的频谱。
spectrogram(x,128,120,128,1e3)

返回:


1.png

用布莱克曼窗替换汉明窗。将重叠减少到 60 个样本。绘制时间轴,使其值从上到下增加。

spectrogram(x,blackman(128),60,128,1e3)
ax = gca;
ax.YDir = 'reverse';

返回:

1.png

四.频谱图和瞬时频率

使用频谱图功能测量和跟踪信号的瞬时频率。生成以 1 kHz 采样的二次线性调频脉冲,持续两秒。指定线性调频,使其频率最初为 100 Hz,一秒后增加到 200 Hz

fs = 1000;
t = 0:1/fs:2-1/fs;
y = chirp(t,100,1,200,'quadratic');

使用频谱图函数中实现的短时傅立叶变换来估计跳频的频谱。将信号分成长度为 100 的部分,使用汉明窗口进行窗口化。指定相邻部分之间重叠的 80 个样本,并评估 [100/2+1]=51 频率处的频谱。

spectrogram(y,100,80,100,fs,'yaxis')

返回:

1.png

通过找到[(2000−80)/(100−80)]=96 个时间点具有最高能量的时频率来跟踪调频频率。在频谱图上叠加瞬时频率。

[~,f,t,p] = spectrogram(y,100,80,100,fs);
[fridge,~,lr] = tfridge(p,f);
hold on
plot3(t,fridge,abs(p(lr)),'LineWidth',4)
hold off

返回:

1.png

暂时讲到这,后续需要的时候我再补充。

相关文章
|
文字识别 安全 API
文字识别OCR的私有化部署
文字识别OCR的私有化部署【1月更文挑战第24天】【1月更文挑战第116篇】
958 1
|
人工智能 IDE Devops
通义灵码编程智能体,上线!
近期,Qwen3正式发布并开源8款“混合推理模型”,参数量235B,激活仅需22B,性能超越多个国际顶尖模型。通义灵码全面支持Qwen3,上线编程智能体,具备工程级变更、自动感知、工具使用和终端命令执行四大能力。插件集成魔搭MCP广场2400+服务,大幅提升开发效率。目前,通义灵码插件下载超1500万,生成代码超30亿行,服务上万家企业。
|
机器学习/深度学习 存储 安全
4G手机内存玩转Qwen2.5-Omni?MNN全面支持Qwen2.5-Omni与Qwen3!
随着移动端算力、存储能力的提升,在端侧部署大模型已成为趋势。本地化运行可消除网络延迟实现毫秒响应,降低云端算力成本,同时避免数据上传保障隐私安全。
3734 1
|
人工智能 前端开发 Java
DDD四层架构和MVC三层架构的个人理解和学习笔记
领域驱动设计(DDD)是一种以业务为核心的设计方法,与传统MVC架构不同,DDD将业务逻辑拆分为应用层和领域层,更关注业务领域而非数据库设计。其四层架构包括:Interface(接口层)、Application(应用层)、Domain(领域层)和Infrastructure(基础层)。各层职责分明,避免跨层调用,确保业务逻辑清晰。代码实现中,通过DTO、Entity、DO等对象的转换,结合ProtoBuf协议,完成请求与响应的处理流程。为提高复用性,实际项目中可增加Common层存放公共依赖。DDD强调从业务出发设计软件,适应复杂业务场景,是微服务架构的重要设计思想。
|
搜索推荐 安全 Windows
Windows10系统 无法更换锁屏图片一直转圈圈(含替换系统默认锁屏壁纸教程)异常处理
Windows10系统 无法更换锁屏图片一直转圈圈(含替换系统默认锁屏壁纸教程)异常处理
4359 0
Windows10系统 无法更换锁屏图片一直转圈圈(含替换系统默认锁屏壁纸教程)异常处理
|
算法 定位技术 C++
A* 算法详解(超级详细讲解,附有大图)
A* 算法详解(超级详细讲解,附有大图)
10547 0
|
机器人
ROS2教程 04 话题Topic
本文是关于ROS2(机器人操作系统2)中话题(Topic)机制的教程,详细介绍了ROS2中话题的命令使用,包括列出、回显、发布、信息查询、类型查询等功能,并通过示例代码展示了如何创建发布者(Publisher)和订阅者(Subscriber)节点,以及如何测试发布-话题-订阅通信。
3762 1
ROS2教程 04 话题Topic
|
Web App开发 安全 Linux
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
《FFmpeg开发实战》书中介绍轻量级流媒体服务器MediaMTX,但其功能有限,不适合生产环境。推荐使用国产开源的ZLMediaKit,它支持多种流媒体协议和音视频编码标准。以下是华为欧拉系统下编译安装ZLMediaKit和FFmpeg的步骤,包括更新依赖、下载源码、配置、编译、安装以及启动MediaServer服务。此外,还提供了通过FFmpeg进行RTSP和RTMP推流,并使用VLC播放器拉流的示例。
3193 3
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
|
人工智能 Linux iOS开发
AI超强语音转文本SenseVoice,本地化部署教程!
【9月更文挑战第7天】以下是AI超强语音转文本工具SenseVoice的本地化部署教程:首先确保服务器或计算机满足硬件和软件要求,包括处理器性能、内存及操作系统等。接着从官网下载适合的安装包,并按操作系统进行安装。配置音频输入设备和语言模型后,启动SenseVoice并测试其语音转文本功能。最后根据实际使用情况进行优化调整,并定期更新以获取最新功能。详细步骤需参照官方文档。
6838 1
|
传感器 算法
控制系统稳定性常见策略
控制系统稳定性常见策略
1141 0