希尔伯特变换用于解调系统——以解调调频信号为例,FM Demodulation
What's The Hilbert Transform
简单地说,希尔伯特变换的物理意义为:把信号的所有频率分量的相位推迟90度,这样原信号和变换后信号可以视为一组IQ正交信号,在数字域正交化,可以做很多事情。
有一篇文章写的不错:《希尔伯特变换的物理意义》,这篇文章简单地说明了变换后、变换前之间信号的物理意义,并且可以推出原信号的顺时幅度、顺时相位、顺时频率信息,值得一看。这里仅列出一些后文需要用到的公式。
还有一篇讲解调PM的,也可以看看:Phase demodulation via Hilbert transform: Hands-on
记:
原信号\(s(t)=A(t)\sin (\varphi(t))\)
其中\(A(t)\)为瞬时幅值,\(\varphi(t)\)为瞬时相位
吉尔伯特变换后,有\(\hat{s}(t)=\mathcal{H} \left | s(t) \right |\)
则有\(A(t)=\sqrt{\hat{s}^{2}(t) + s^{2}(t)}\),\(\varphi(t)=\arctan \frac{\hat{s}(t)}{s(t)}\),需要四象限反正切
Demodulation via Hilbert Transform
希尔伯特变换用于单边带调制的案例很多,但是既然希尔伯特变换能单独求出幅值、相位信息,甚至可以认为希尔伯特变换前后结果就是一组IQ信号,那么就可以试着将其用于解调系统。
注意:希尔伯特变换不是因果的,即对于实时解调来说不应该使用希尔伯特变换,如果先采很长时间,之后解调,则希尔伯特变换对于t<0(和t>t_sample)的非因果效应不是很影响主要信号,下文会展示该影响
以调频信号为例,其瞬时相位为
\]
其中\(\omega _s\)为调制信号角频率
设载波100k,调制信号10k,fm频偏5k
对于已调信号,有:

姑且不管右侧时域波形,左侧FM调制频谱更清楚一些。
对信号进行希尔伯特变换后,求出瞬时相位\(\varphi(t)=\arctan \frac{\hat{s}(t)}{s(t)}\),差分后得到基带调制信号:

可以看到解调信号时域两端出现干扰,并且具有较大直流分量,这是非因果带来的问题。可以对原信号两端补零减少影响,大家可以动手试一试,这里不再赘述。
Matlab Program
clear;
clc;
tic;
f0 = 100e3; %载波
f1 = 10e3; %调制信号
L = 1e6; %采样长度
tmax = 1e-1; %采样时间
t = linspace(0, tmax, L);
fs = L / tmax;
df = 5e3; %频移量
mf = df / f0; %调频度
%%%%S
phi_t = 2 * pi * f0 .* t + mf * sin(2 * pi * f1 .* t);
s = sin(phi_t); %调频信号
figure(1)
subplot(1, 2, 2);
plot(t, s);
xlabel("t/s")
ylabel("S(t)")
title("The Wave of S(t)")
w = hamming(L); %加窗
Y = fft(1.414 * s .* w'); %我拿Hann的补偿系数乘上去了,大家可以查查Hamming的系数是多少
P2 = abs(Y / L);
P1 = P2(1:L / 2 + 1);
P1(2:end - 1) = 2 * P1(2:end - 1);
f = fs * (0:(L / 2)) / L;
P1 = db(P1);
subplot(1, 2, 1);
plot(f, P1)
title("Single-Sided Amplitude Spectrum of S(t)")
xlabel("f/Hz")
ylabel("|P1(f)|/dB")
xlim([f0 -100e3 f0 +100e3]);
ylim([-100 0]);
%%%%希尔伯特变换
y_t = hilbert(s); %这里其实可以加一个Hann窗或补0,减少信号两端出现混叠
phi = unwrap(angle(y_t)); %matlab的hilbert实部为原信号,虚部为变换信号
s_demod = diff(phi);
L = L - 1; %差分函数会使长度-1
t2 = linspace(0, tmax, L);
figure(2)
clf;
subplot(1, 2, 2);
plot(t2, s_demod);
xlabel("t/s")
ylabel("E(t)")
title("The Wave of S_d(t)")
w = hamming(L);
Y = fft(1.414 * s_demod .* w');
P2 = abs(Y / L);
P1 = P2(1:L / 2 + 1);
P1(2:end - 1) = 2 * P1(2:end - 1);
f = fs * (0:(L / 2)) / L;
P1 = db(P1);
subplot(1, 2, 1);
plot(f, P1)
title("Single-Sided Amplitude Spectrum of S_d(t)")
xlabel("f/Hz")
ylabel("|P1(f)|/dB")
xlim([f1 -10e3 f1 +10e3]);
ylim([-100 0]);
toc;
fprintf('\n 用时:%f s \n', toc);
希尔伯特变换用于解调系统——以解调调频信号为例,FM Demodulation的更多相关文章
- Supervisor – 用于 Unix 系统的进程监控工具
Supervisor 是一个客户端/服务端模式的系统,使用户能够监视和控制 UNIX 操作系统的进程.Supervisor 为你提供一个地方来启动,停止和监视进程.进程可以单独或成组的形式控制.您还可 ...
- [离散时间信号处理学习笔记] 10. z变换与LTI系统
我们前面讨论了z变换,其实也是为了利用z变换分析LTI系统. 利用z变换得到LTI系统的单位脉冲响应 对于用差分方程描述的LTI系统而言,z变换将十分有用.有如下形式的差分方程: $\displays ...
- Linux下分割、合并PDF(pdftk),用于Linux系统的6款最佳PDF页面裁剪工具
Linux下分割.合并PDF(pdftk),用于Linux系统的6款最佳PDF页面裁剪工具 Linux下分割.合并PDF(pdftk) pdftk http://www.pdflabs.com/doc ...
- Unix系统编程()信号:概念和概述
这篇将一口气学完信号的基本概念,但是有很多的细节,所以篇幅较长,请做好心理准备. (他大爷的,一口气没有学完,太懒了) 有以下主题: 各种不同信号及其用途 内核可能为进程产生信号的环境,以及某一进程向 ...
- Linux系统编程——进程间通信:信号中断处理
什么是信号? 信号是 Linux 进程间通信的最古老的方式.信号是url=474nN303T2Oe2ehYZjkrggeXCaJPDSrmM5Unoh4TTuty4wSgS0nl4-vl43AGMFb ...
- 2016-04-25-信息系统实践手记5-CACHE设计一例
layout: post title: 2016-04-25-信息系统实践手记5-CACHE设计一例 key: 20160425 tags: 业务 场景 CACHE 系统分析 系统设计 缓存 modi ...
- Linux系统编程之----》信号
"===信号========================================================================================= ...
- 轻松应对并发问题,简易的火车票售票系统,Newbe.Claptrap 框架用例,第一步 —— 业务分析
Newbe.Claptrap 框架非常适合于解决具有并发问题的业务系统.火车票售票系统,就是一个非常典型的场景用例. 本系列我们将逐步从业务.代码.测试和部署多方面来介绍,如何使用 Newbe.Cla ...
- Linux下用于查看系统当前登录用户信息 w命令
作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动.有些时候,你甚至需要知道他(她)们正在做什么.本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法. 1. 使用w ...
- Linux下用于查看系统当前登录用户信息的4种方法
1. 使用w命令查看登录用户正在使用的进程信息 w命令用于显示已经登录系统的用户的名称,以及他们正在做的事.该命令所使用的信息来源于/var/run/utmp文件.w命令输出的信息包括: 用户名称 用 ...
随机推荐
- iOS移动应用安全加固:保护您的App免受恶意攻击的重要步骤
目录 iOS移动应用安全加固:保护您的App免受恶意攻击的重要步骤 摘要 引言 一.APP加固的概念 二.APP加固方案的比较 三.保护iOS应用的安全 四.总结 参考资料 摘要 本文介绍了移动应 ...
- Axure 辅助线--栅格化布局
全局辅助线 在所有页面都会显示,比如主页面是框架.子页面通过[内联框架]去加载,为了子页面的元件不偏移,可以创建创建全局辅助线 页面辅助线
- PPT 求职应聘:如何利用时间轴去展示
顺序逻辑的梳理 线条 竖直排列 图形结合
- PPT 编辑顶点
编辑顶点的N种玩法 针对特定的形状进行编辑 选中形状 -> 右键 -> 编辑顶点 如果[编辑顶点]是灰色的,需要上网下一个 office clean touris,清理一下 合并形状:多个 ...
- Grafana--双Y轴
grafana版本:6.5.2 背景:同一面板里想展示各实例与集群在一段时间范围内,平均每秒执行命令数,但是由于数值差异太大,曲线图抖动不明显,实例的更近乎于一条直线,所以设置双Y轴,可更直观的展示线 ...
- 传统与现代可视化 PK:再生水厂二维工艺组态系统
前言 随着可视化技术的进步与发展,传统再生水厂组态系统所展示的组态页面已逐渐无法满足当前现阶段多样化的展示手段.使得系统对污泥处理处置及生产运行成本方面的监控.分析方面较为薄弱,急需对信息化应用成果和 ...
- Nacos注册中心搭建
1.Nacos服务端搭建(需要有java环境),下载地址:https://github.com/alibaba/Nacos/releases 下载对应操作系统的包解压. 1.1.解压:tar -zxv ...
- vue-router路由复用后页面没有刷新
vue-router提供了页面路由功能,可以用来构建单页面应用,在使用vue-router的动态路由匹配的时候,遇到了url变化了,但是页面却没有任何动静的问题,记录一下. 动态路由匹配url变化了, ...
- ASP.Net Core 5.0 MVC log4net日志的添加
1. 引入程序集 Microsoft.Extensions.Logging.Log4Net.AspNetCore 及 log4net 2. 添加配置文件log4net.Config, 并将属性改为& ...
- java基础-常用类-day11
目录 1. 包装类 2. Integer类 3.util.date 4. java.sql.Date 5. SimpleDateFormat 6. Calendar 7. Math 8. String ...