当前位置: 首页 > article >正文

(68)希尔伯特变换、解析信号,与瞬时幅度、频率和相位的提取的MATLAB仿真

文章目录

  • 前言
  • 一、希尔伯特变换
  • 二、解析信号
  • 三、希尔伯特变换和解析信号的应用
  • 四、构建解析信号并从中提取瞬时幅度、频率和相位的MATLAB仿真
    • 1. 仿真代码
    • 2. 仿真结果


前言

希尔伯特变换(Hilbert transform)是信号处理中的一个重要概念,它能够为实值信号生成一个对应的解析信号。解析信号在通信、信号分析等领域有着广泛的应用。
本文首先介绍希尔伯特变换和信号的解析表示,然后给出一个从由实值调制信号构建的解析信号中提取瞬时幅度、频率和相位的MATLAB仿真例程。


一、希尔伯特变换

希尔伯特变换是一种线性积分变换,对于实值信号x(t),其希尔伯特变换 x^(t) 定义为:

在这里插入图片描述

在实际应用中,希尔伯特变换通常通过傅里叶变换来简化计算。希尔伯特变换在频域中的表现形式是将信号的负频率成分相位移动−90度,而正频率成分相位移动 +90度。

二、解析信号

解析信号z(t) 是由原始实值信号x(t) 和其希尔伯特变换hat{x}(t)构成的复值信号:
在这里插入图片描述

其中j 是虚数单位。解析信号具有以下特性:

  1. 解析性:解析信号的负频率分量为零,即它只包含正频率分量。

  2. 瞬时幅度和相位:解析信号的瞬时幅度 A(t) 和瞬时相位ϕ(t) 可以通过以下方式计算:
    在这里插入图片描述

  3. 包络和瞬时频率:解析信号的包络就是其瞬时幅度 A(t),而瞬时频率 f(t) 可以通过对瞬时相位求导得到:

在这里插入图片描述

三、希尔伯特变换和解析信号的应用

希尔伯特变换和解析信号在以下领域有着重要的应用:
通信系统:用于调制和解调信号,特别是在单边带调制(SSB)中。
信号分析:可以用来提取信号的瞬时特征,如瞬时频率和幅度。
地震勘探:用于地震数据的时间-频率分析。
生物医学信号处理:用于分析心电信号(ECG)等。

希尔伯特变换和解析信号为信号处理提供了一种强大的工具,使得我们可以从复数域的角度更深入地理解和分析实值信号。

四、构建解析信号并从中提取瞬时幅度、频率和相位的MATLAB仿真

1. 仿真代码

% (1)生成幅度调制信号
f = 4;                                      % 信息信号的频率,单位Hz
fs = 1000;                                  % 采样率,单位Hz
t = 0:1/fs:1-2/fs;                          % 采样时刻序列
mu = 1;                                     % 幅度调制中调制信号的直流偏置
sigma = 0.8;                                % 调制深度(也称调制度)
s = mu + sigma * sin(2*pi*f*t) ;            % 信息信号
c = chirp(t,10,t(end),50);                  % chirp载波
x = s .* c;                                 % 已调信号

figure()
subplot(2,2,1); plot(s, 'LineWidth', 1);
title('信息信号');
xlabel('n');ylabel('s(t)'); grid on;
subplot(2,2,2); plot(c, 'LineWidth', 1);
title('chirp载波');
xlabel('n');ylabel('c(t)'); grid on;
subplot(2,2,3); plot(x, 'LineWidth', 1);    % 已调信号画图
hold on;

% (2)从调制信号中构建解析信号并提取瞬时幅度、相位和频率
z = Generate_analytic_signal(x);            % 形成解析信号
inst_amplitude = abs(z);                    % 包络提取
inst_phase = unwrap(angle(z));              % 瞬时相位
inst_freq = diff(inst_phase)/(2*pi)*fs;     % 瞬时频率

% (3)从瞬时相位再生chirp载波
regenerated_carrier = cos(inst_phase);

plot(inst_amplitude, 'r', 'LineWidth', 1);  % 覆盖提取的包络
title('调制信号与其包络');
xlabel('n');ylabel('x(t) & |z(t)|'); grid on;
subplot(2,2,4); plot(cos(inst_phase), 'LineWidth', 1);
title('再生的chirp载波');
xlabel('n'); ylabel('cos[\omega(t)]'); grid on;

2. 仿真结果

在这里插入图片描述




http://www.kler.cn/a/392722.html

相关文章:

  • golang连接jenkins构建build
  • R语言的下载、安装及环境配置(RstudioVSCode)
  • Y3编辑器教程8:资源管理器与存档、防作弊设置
  • 如何在 Ubuntu 22.04 上安装以及使用 MongoDB
  • 决策树(理论知识3)
  • clickhouse复现修复 结构需要清理 错误 structure need clean
  • 《C陷阱与缺陷》
  • 缓存淘汰策略及其使用场景详解
  • 效率工具-tig的使用
  • 最新的ssl证书有效期只有3个月,ssl到期后如何处理?
  • Java Http 接口对接太繁琐?试试 UniHttp 框架吧
  • Unity Assembly Definition Assembly Definition Reference
  • Python网络爬虫与数据采集实战——网络爬虫的基本流程
  • xcode-select: error: tool ‘xcodebuild‘ requires Xcode, but active developer
  • 随机链表 (Randomized Linked List)、随机树 (Randomized Tree)详细解读
  • [Java]微服务治理
  • 小面馆叫号取餐流程 佳易王面馆米线店点餐叫号管理系统操作教程
  • Unity网络通信(part8.客户端主动断连与心跳消息)
  • Docker:助力应用程序开发的利器
  • 面试编程题目(一)细菌总数计算
  • Mybatis-plus 使用分页插件
  • 重生之从零设计 MySQL 架构
  • cuda的3DArray和TextureObject
  • PHP搭建开发环境(Windows系统)
  • 代码随想录算法训练营第二十九天| 134. 加油站 、135. 分发糖果 、860.柠檬水找零、406.根据身高重建队列。c++转java
  • 本地权限提升漏洞分析