希尔伯特变换-matlab仿真

news2024/11/17 12:40:38

希尔伯特变换(hilbert transform)简介

在信号处理中我们常见的有傅里叶变换,用来分析频域信息,还有拉普拉斯变换和z变换,用于系统分析系统响应。短时傅里叶分析和小波分析用于时频分析。希尔伯特变换似乎听到的比较少。我因为最近在做信号幅度提取的时候看到可以用希尔伯特变换来提取包络,所以才了解到了希尔伯特变换,网上的资料很多,对它的介绍也很多,我对它的了解有限,只是知道它可以做IQ调制,也可以提取信号分包络。我觉得作为工科生,就应该本着实用主义的原则,很多公式和定理的证明是数学家的事情,我们只需要懂怎么用,把这些已有的信号处理的工具用好就行了。写这篇博客主要是为了总结、归纳和记录,如果能够恰好帮助到需要的朋友,那就更好了。
严谨一点,还是先给出公式吧。希尔伯特的数学定义如下:
设有一个实值函数 x ( t ) x(t) x(t),其希尔伯特变换记作 X ( t ) X(t) X(t)
X ( t ) = H [ x ( t ) ] = 1 π ∫ − ∞ ∞ x ( τ ) t − τ d τ X(t)=H[x(t)]=\frac{1}{\pi}\int_{-\infty}^{\infty}\frac{x(\tau)}{t-\tau}d\tau X(t)=H[x(t)]=π1tτx(τ)dτ
通过上面的式子可以看出来,其实希尔伯特变换就是对信号做了一下卷积,这个被卷积的信号的单位脉冲响应为:
h ( t ) = 1 π t h(t)=\frac{1}{\pi t} h(t)=πt1
我们都知道,时域做卷积,相当于对信号进行滤波,而这个滤波器的响应函数就是上面的 h ( t ) h(t) h(t)
我们对 h ( t ) h(t) h(t)做傅里叶变换,可以得到:
H ( j ω ) = − j s g n ( ω ) H(j\omega)=-jsgn(\omega) H()=jsgn(ω)
s g n ( ⋅ ) sgn(\cdot) sgn()函数是符号函数,也就是说这个滤波器对原始信号的正频率部分进行了 − π / 2 -\pi/2 π/2的相移,而对负频率部分进行了 π / 2 \pi/2 π/2的相移。
希尔伯特变换的本质就是进行了一种特殊的卷积。

matlab希尔伯特变换函数

在matlab中,实现希尔伯特变换也是非常的简单,只需要一行代码y=hilbert(x),我们要搞懂它的输入输出是什么,首先要知道它的输入信号必须得是实数类型的,希尔伯特变换的实部和虚部仅仅是相位差 π / 2 \pi/2 π/2,希尔伯特变换的幅度即为信号的包络,对于正弦波而言那就是一条直线,下面是一个简单的仿真:

%% 希尔伯特变换仿真
% 主要内容:点频信号生成、希尔伯特变换
% Author: huasir 2023.11.25
fs = 20e3; % 采样频率;
dt = 1/fs; %采样时间间隔
fc = 1e3; %频率
T = 10e-3;
t = 0:dt:T-dt;
x = cos(2*pi*fc*t); %生成正弦波信号
X = hilbert(x); %对x进行希尔伯特变换
%% 分别绘制正弦信号、希尔伯特变换的实部、虚部、幅度
figure;
subplot(3,1,1);
plot(t,x,t,imag(X));
legend('x','imag(X)');
xlabel('t/s');
title('原始信号和希尔伯特变换的虚部')
subplot(3,1,2);
plot(t,real(X));
legend('real(X)');
xlabel('t/s');
title('希尔伯特变换的实部')
subplot(3,1,3);
plot(t,x,t,abs(X));
legend('abs(X)');
xlabel('t/s');
title('原始信号和希尔伯特变换的幅度')

绘制出的图像如下:
希尔伯特变换的结果

图1 希尔伯特变换结果

由上图也验证了希尔伯特变换的效果,它的幅度就是信号的包络,我们可以通过这个方法进行包络提取;

下面是一个调幅信号采用希尔伯特变换进行包络提取的例子

%% 希尔伯特变换仿真
% 主要内容:调幅生成、希尔伯特变换
% Author: huasir 2023.11.25@BeiJing
fs = 100e3; % 采样频率;
dt = 1/fs; %采样时间间隔
fc = 10e3; %载波频率
f = 100; %调制信号
T = 10e-3;
t = 0:dt:T-dt;
x = cos(2*pi*fc*t).*cos(2*pi*f*t); %生成正弦波信号
X = hilbert(x); %对x进行希尔伯特变换
%% 分别绘制正弦信号、希尔伯特变换的实部、虚部、幅度
figure;
subplot(2,1,1);
plot(t,x,t,imag(X));
legend('x','imag(X)');
xlabel('t/s');
title('原始信号和希尔伯特变换的虚部')
subplot(2,1,2);
plot(t,real(X));
legend('real(X)');
xlabel('t/s');
title('希尔伯特变换的实部')
figure;
plot(t,x,t,[1;-1]*abs(X));
legend('x','abs(X)');
xlabel('t/s');
title('原始信号和包络')

输出图像入下:
在这里插入图片描述

图2 调幅信号希尔伯特变换的实部和虚部

在这里插入图片描述

图3 调幅信号采用希尔伯特变换的包络提取

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

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

相关文章

node fs模板及蓝桥案例实战

文章目录 介绍文件写入writeFile 异步写入writeFileSync 同步写入appendFile / appendFileSync 追加写入createWriteStream 流式写入 文件读取readFile 异步读取readFileSync 同步读取createReadStream 流式读取 文件移动与重命名文件删除文件夹操作mkdir / mkdirSync 创建文件…

DNS/ICMP协议、NAT技术

目录 DNS协议DNS背景域名简介 ICMP协议ICMP功能ping命令traceroute命令 NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术的缺陷NAT和代理服务器 网络协议总结应用层传输层网络层数据链路层 DNS协议 DNS(Domain Name System,域名系统)协议&…

【送书福利-第二十八期】《从概念到现实:ChatGPT和Midjourney的设计之旅》

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。 🎈 本文专栏:本文…

软件测试之银行测试详解

一、金融类软件测试 举个栗子,银行里的软件测试工程师。横向跟互联网公司里的测试来说,薪资相对稳定,加班的话想对来说没那么多(有些银行加班也挺严重的),但业务稳定。实在是测试类岗位中的香饽饽&#xf…

实现简单的操作服务器和客户端(上)

一、说明 描述:本教程介绍如何使用 simple_action_server 库创建斐波那契动作服务器。此示例操作服务器生成斐波那契序列,目标是序列的顺序,反馈是计算的序列,结果是最终序列。 内容 创建操作消息编写一个简单的服务器 代码

没搞懂二维差分是什么怎么办???

摸鱼的时候画的,根据公式反推 一维差分倒是懂了 a[10]{1,2,6,9,11,12,17,21,32,67}; c[10]{1,1,4,3,2,1,5,4,11,35}; 现要把[3,7]的值都增加3 c[10]{1,1,7,3,2,1,5,1,11,35}; 要查询的时候再用for循环相加 结论:成立且适用于多次修改 不知道为什么这个…

Praat脚本-038 | 批量替换标注TextGrid里的换行符

目录 引题获取脚本运行脚本知识引申关注版权说明 引题 我们在做标注的时候,可能会犯这样一个小错误,就是在标注的内容中间不小心进行了换行,大概会成为这个样子。 这样会有什么问题呢?在提取数据的时候,你会发现&…

【数据结构】堆(C语言)

今天我们来学习堆,它也是二叉树的一种(我滴神树!) 目录 堆的介绍:堆的代码实现:堆的结构体创建:堆的初始化:堆的销毁:堆的push:堆的pop:判空 &am…

AI创作工具:Claude2注册保姆级教程

最近软件打算多接入几个AI写作平台,包括讯飞星火,百度文心,Claude2,这样就能给用户提供更多的写作选择 经过半天的调研,讯飞星火,百度文心一言,接入都比较简单,毕竟是国内的。 在调…

鸿蒙HarmonyOS 编辑器 下载 安装

好 各位 之前的文章 注册并实名认证华为开发者账号 我们基实名注册了华为的开发者账号 我们可以访问官网 https://developer.harmonyos.com/cn/develop/deveco-studio 在这里 直接就有我们编辑器的下载按钮 我们直接点击立即下载 这里 我们根据自己的系统选择要下载的系统 例…

关于pytorch以及相关包的安装教程

一.查看自己电脑的配置 首先查看自己电脑的cuda的版本,WinR,敲入cmd打开终端 输入nvidia-smi,查看自己电脑的显卡等配置 这里要说明一下关于这个CUDA,它具有向后兼容性,这意味着支持较低版本的 CUDA 的应用程序通常也可以在较高版本的 CUD…

虚拟机VMware客户机隔离灰色如何解决||实现本机复制粘贴到虚拟机

前言:本次镜像为win10,其他操作系统也欢迎尝试 现象:虚拟机设置选项不可编辑,且是否勾选都无法实现复制粘贴 可能存在的问题解决方案 Q1:未安装虚拟机工具:VMware Tools A1:安装工具&#xff…

Python基础教程之循环结构详解,循环结构逻辑解析。

文章目录 前言一、While循环二、While…else…循环三、for循环四、for…else…循环五、循环体结束语句六、嵌套循环关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③…

C#,《小白学程序》第五课:队列(Queue)其一,排队的技术与算法

日常生活中常见的排队&#xff0c;软件怎么体现呢&#xff1f; 排队的基本原则是&#xff1a;先到先得&#xff0c;先到先吃&#xff0c;先进先出 1 文本格式 /// <summary> /// 《小白学程序》第五课&#xff1a;队列&#xff08;Queue&#xff09; /// 日常生活中常见…

01_原理-事件循环

01_原理-事件循环 文章目录 01_原理-事件循环一、浏览器的进程模型①&#xff1a;何为进程&#xff1f;②&#xff1a;何为线程&#xff1f;③&#xff1a;浏览器有哪些进程和线程&#xff1f; 二、渲染主线程是如何工作的&#xff1f;三、若干解释①&#xff1a;何为异步&…

人力资源管理后台 === 基础环境+登陆

目录 1.人力资源项目介绍 1.1 项目架构和解决方案 1.2 课程安排 1.3 课程具备能力 1.4 课程地址 2. 拉取项目基础代码 3.项目目录和入口文件介绍 4.App.vue根组件解析 5.基础设置settings.js和导航守卫permission.js 6.Vuex的结构 7.使用模板中的Icon图标 8.扩展…

【Web】NewStarCtf Week2 个人复现

目录 ①游戏高手 ②include 0。0 ③ez_sql ④Unserialize&#xff1f; ⑤Upload again! ⑥ R!!C!!E!! ①游戏高手 经典前端js小游戏 检索与分数相关的变量 控制台直接修改分数拿到flag ②include 0。0 禁了base64和rot13 尝试过包含/var/log/apache/access.log,ph…

了解抽象思维的应用与实践

目录 一、快速了解抽象思维 &#xff08;一&#xff09;抽象思维的本质理解 &#xff08;二&#xff09;系统架构中的重要性 &#xff08;三&#xff09;软件开发中抽象的基本过程思考 意识和手段 抽象的方式 抽象层次的权衡 二、业务中的应用实践 &#xff08;一&…

你知道如何使用队列实现栈吗?(C语言)

这时一道非常经典的题型&#xff0c;因为栈和队列的性质是相反的&#xff0c;队列的数据是先入先出&#xff0c;栈的数据是后入先出&#xff0c;那么怎样使用两个队列实现栈呢&#xff1f; 225. 用队列实现栈https://leetcode.cn/problems/implement-stack-using-queues/ 这是…

212. 单词搜索 II

212. 单词搜索 II Java&#xff1a;搜索全部可能 class Solution {StringBuilder sb;List<String> list;Set<String> set;private void dfs(int x, int y, int m, int n, char[][] board){if (x < 0 || x > m || y < 0 || y > n || board[x][y] .) {…