信号处理中简单实用的方法——提取信号中的包络

这篇具有很好参考价值的文章主要介绍了信号处理中简单实用的方法——提取信号中的包络。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、用希尔伯特变换计算信号的包络

在求某一信号包络时用得最多的是希尔伯特变换,但并不是希尔伯特变换适用于所有信号求包络的情况。这是因为对于包络没有一个很严格的定义,在求包络时不同的情况会有不同的要求。下面将介绍用希尔伯特变换求取信号的包络。

对MATLAB中自带的希尔伯特变换的函数介绍如下。
名称:hilbert
功能:把序列x(n)作希尔伯特变换为y(n),又把x(n)和y(n)构成解析信号的序列z(n)=x(n)+jy(n)

调用格式:
z=hilbert(x)
说明:函数hilbert不是单纯地把x(n)作希尔伯特变换得到y(n),而是得到y(n)后与x(n)
共同构成解析信号序列z(n),并可以对z(n)直接求模值和相角。
案例1、设信号x(n)=120+96e^[(n/1500)^2]*cos(2π*n/600),n=-5000:20:5000,求该信号的包络线。设置信号后直接调用hilbert函数求信号的包络,运行第一部分程序如下:

clear all; clc; close all;

n=-5000:20:5000;            % 样点设置
% 程序第一部分:直接做做希尔伯特变换
N=length(n);                % 信号样点数
nt=0:N-1;                   % 设置样点序列号
x=120+96*exp(-(n/1500).^2).*cos(2*pi*n/600); % 设置信号
Hx=hilbert(x);              % 希尔伯特变换
% 作图
plot(nt,x,'k',nt,abs(Hx),'r');
grid; legend('信号','包络');
xlabel('样点'); ylabel('幅值')
title('信号和包络')
set(gcf,'color','w');
pause

 运行结果如下:

信号处理中简单实用的方法——提取信号中的包络

 

运行程序第一部分后得上图,从图中可以看出通过hilbert函数求信号所得的包络似乎不是信号的包络,而是原有的信号,这是为什么呢?之所以会得到这样一个不理想的包络线完全是直流分量造成的,故对原始信号消除直流分量后再通过hilbert函数求信号的包络。
第二部分程序如下:

% 程序第二部分:消除直流后做希尔伯特变换
y=x-120;                    % 消除直流分量
Hy=hilbert(y);              % 希尔伯特变换
% 作图
figure(2)
plot(nt,y,'k',nt,abs(Hy),'r');
grid; legend('信号','包络');
xlabel('样点'); ylabel('幅值')
title('信号和包络')
set(gcf,'color','w');
figure(3);
plot(nt,x,'k',nt,abs(Hy)+120,'r');
grid; legend('信号','包络'); hold on;
xlabel('样点'); ylabel('幅值')
title('信号和包络')
set(gcf,'color','w');
pause

 运行结果如下:

信号处理中简单实用的方法——提取信号中的包络

同时把包络线加上直流分量后叠加在原始信号上,修改了上图的不正确包络线,得下图:

信号处理中简单实用的方法——提取信号中的包络

这说明如果信号有直流分量,可以先消除直流分量求出信号的包络线,再在包络线上叠加直流分量恢复原始信号的包络线。

二、用倒谱法来计算语音信号频谱的包络

语音信号频谱的包络线对语音分析来说是比较重要的,它反映了人类发声器官的共振结构,从频谱的包络可提取共振峰参数(频率和带宽)。在语音分析中常用倒谱方法来提取语音信号频谱的包络线。

倒谱(Cepstrum)分析的实质就是对幅值谱取对数后再做一次频谱分析,所以又称为二次频谱分析。

我们知道,若两个信号在频域有不同的频带,则可以通过滤波把这两个信号分离开。同样在倒谱域中,当两个信号在倒谱域中占有不同的倒频率时,也可以通过倒滤波(Lifter)把这两个信号在倒频域上分离。
声带产生的脉冲序列振动频率较高,而口腔是通过肌肉运动发声的,振动频率较低,所以二者在倒谱中处于不同的倒频带内。通过倒滤波把这两个信号分离,可以分别得到激励脉冲在频域的响应和声道在频域的响应。一般把声道在频域的响应称为语音信号频谱的包络线,通过该包络线可提取语音共振峰的信息。

案例2、 从文件su1.txt读入语音数据,求取该语音信号的频谱包络线。程序清单如下:

clear all; clc; close all;
y=load('su1.txt');                            % 读入数据
fs=16000; nfft=1024;                          % 采样频率和FFT的长度
time=(0:nfft-1)/fs;                           % 时间刻度
nn=1:nfft/2; ff=(nn-1)*fs/nfft;               % 计算频率刻度
Y=log(abs(fft(y)));                           % 取幅值的对数
z=ifft(Y);                                    % 按式(4-3-16)求取倒谱
mcep=29;                                      % 分离声门激励脉冲和声道冲击响应
zy=z(1:mcep+1);
zy=[zy' zeros(1,1024-2*mcep-1) conj(zy(end:-1:2))']; % 构建声道冲击响应的倒谱序列
ZY=fft(zy);                                   % 计算声道冲击响应的频谱
% 作图
plot(ff,Y(nn),'k'); hold on;                  % 画出信号的频谱图
plot(ff,real(ZY(nn)),'k','linewidth',2.5);    % 画出包络线
grid; hold off; ylim([-4 5]);
title('信号频谱和声道冲击响频谱(频谱包络)')
ylabel('幅值'); xlabel('频率/Hz'); 
legend('信号频谱','频谱包络')
set(gcf,'color','w');

运行结果如下:

信号处理中简单实用的方法——提取信号中的包络

 

实验数据su1.txt下载链接如下:

https://mp.csdn.net/mp_download/manage/download/UpDetailed

参考文献:MATLAB数字信号处理85个实用案例精讲——入门到进阶;宋知用(编著)文章来源地址https://www.toymoban.com/news/detail-462257.html

到了这里,关于信号处理中简单实用的方法——提取信号中的包络的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 脑电信号处理与特征提取——5.频谱分析和时频分析(张治国)

    目录 五、频谱分析和时频分析 5.1 频谱估计 5.1.1 基本概念 5.1.2 频谱估计方法:周期图 5.1.3 频谱估计方法:Welch法 5.1.4 频谱估计方法的比较 5.1.5 频谱特征提取  5.2 时频分析 5.2.1 短时傅里叶变换 5.2.2 连续小波变换 5.3 事件相关同步化/去同步化 静息态脑电: 没有刺激的情况下

    2024年02月15日
    浏览(42)
  • 脑电信号处理与特征提取——6.运用机器学习技术和脑电进行大脑解码(涂毅恒)

    目录 六、运用机器学习技术和脑电进行大脑解码 6.1 前言 6.2 基于脑电数据的机器学习基础分析 6.3 基于脑电数据的机器学习进阶分析 6.4 代码解读  

    2024年02月14日
    浏览(37)
  • 数字信号处理第六次试验:数字信号处理在双音多频拨号系统中的应用

    为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正! 通过对双音多频拨号系统的分析与仿真实验,了解双音多频信号的产生、检测,包括对双音多频信号

    2024年02月09日
    浏览(45)
  • 【Linux】进程信号 -- 信号保存与递达 | 信号捕捉 | 僵尸进程的信号处理方法

    实际执行信号的处理动作称为信号递达(Delivery) 信号从产生到递达之间的状态,称为信号未决(Pending)。 已经收到但未处理的状态 进程可以选择阻塞 (Block )某个信号 被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作 注意,阻塞和忽略是

    2024年02月16日
    浏览(45)
  • os.signal golang中的信号处理

    在程序进行重启等操作时,我们需要让程序完成一些重要的任务之后,优雅地退出,Golang为我们提供了signal包,实现信号处理机制,允许Go 程序与传入的信号进行交互。 Go语言标准库中signal包的核心功能主要包含以下几个方面: 1. signal处理的全局状态管理 通过handlers结构体跟

    2024年02月15日
    浏览(50)
  • 数字信号处理教程学习笔记1-第2章时域中的离散信号和系统

    信号处理的任务示意方框图 模拟信号和数字信号分别是啥样的,有啥区别

    2024年01月22日
    浏览(52)
  • 嵌入式Qt Qt中的信号处理

    Qt消息模型: - Qt封装了具体操作系统的消息机制 - Qt遵循经典的GUI消息驱动事件模型 Qt中定义了与系统消息相关的概念;   Qt中的消息处理机制: Qt的核心 QObject::cinnect函数: Qt中的“新”: 实验1 初探信号与槽   运行结果: - 只有QObject的子类才能自定义槽 - 定义槽的

    2024年02月22日
    浏览(51)
  • FPGA 的数字信号处理:Verilog 实现简单的 FIR 滤波器

    该项目介绍了如何使用 Verilog 实现具有预生成系数的简单 FIR 滤波器。 不起眼的 FIR 滤波器是 FPGA 数字信号处理中最基本的模块之一,因此了解如何将具有给定抽头数及其相应系数值的基本模块组合在一起非常重要。因此,在这个关于 FPGA 上 DSP 基础实用入门的教程中,将从一

    2024年02月09日
    浏览(46)
  • 编程中的信号处理和系统 - 初学者指南

    信号处理是工程和编程的一个重要领域。 基本上,它允许工程师和程序员改进数据,以便人们可以更有效地使用它。 例如,由于信号处理,电话中的大部分背景噪音都被消除了。这样,通话的另一端就只能听到您的声音。 其他例子有: 音频和音乐软件 图像视频处理软件 医

    2024年02月09日
    浏览(39)
  • 线性代数在数字信号处理中的重要性

    数字信号处理(Digital Signal Processing, DSP)是一种利用数字计算机对连续信号或离散信号进行处理的方法。它广泛应用于电子设计、通信、图像处理、音频处理、机器学习等领域。线性代数是数学的一个分支,主要研究的是矩阵和向量的运算。在数字信号处理中,线性代数发挥着

    2024年02月19日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包