利用FFT 计算生成离散解析信号
通常我们用到的信号都是实值信号,但是我们可以根据这个实信号构造出一个复信号,使得这个复信号只包含正频率部分,而且这个复信号的实部正好就是我们原来的实值信号。简单的推导可知,复信号的虚部是原信号的希尔伯特变换。这样构造出来的信号就叫做解析信号。因此,如何生成解析信号与如何对一个信号进行希尔伯特变换其实是等价的问题。获得解析信号后可以计算波形的包络、瞬时频率、相位等,是非常有用的。所以如何生成解析信号也是个有意义的课题。
对于有限长的序列,计算其频谱,然后将频谱的负频率部分设为0 是最直接的办法。但是实际操作时还是有些小的技巧的,否则你会发现总是得不到正确的结果。
下面举例来说明:
有如下数据
x = [ 1; 2; 2; 1; 1; 2; 2; 1];
FFT 后的结果是
12.
0
- 2. - 2.i
0
0
0
- 2. + 2.i
0
按照最普通的想法
然后反变换回去,得到结果为:
1.25 - 0.25i
1.75 - 0.25i
1.75 + 0.25i
1.25 + 0.25i
1.25 - 0.25i
1.75 - 0.25i
1.75 + 0.25i
1.25 + 0.25i
可以看到实部并不相等,所以这样变换是不正确的。问题在于没有注意到边界点的处理。正确的公式如下:
按照这个公式,Z[m] 计算如下:
12
0
- 4. - 4.i
0
0
0
0
0
反变换后
1 - 0.5i
2 - 0.5i
2 + 0.5i
1 + 0.5i
1 - 0.5i
2 - 0.5i
2 + 0.5i
1 + 0.5i
可以看到这样变换的结果才正确。
由于解析信号没有负频率部分。所以相应的采样频率也可以降低一半而不至混叠。将计算解析信号与降采样两步合并到一起计算的算法如下:
还以上面的数据为例:
Z =
6.
0
- 2. - 2.i
0
反变换后的结果如下:
1- 0.5i
2. + 0.5i
1. - 0.5i
2. + 0.5i
确认结果正确。
刚才是降采样,如果要加密采样点可以用类似的方法。
对应的scilab代码如下:
x = [ 1; 2; 2; 1; 1; 2; 2; 1];
N =length(x);
M = 4;
X =fft(x);
Z= M * ifft([X(1); 2*X(2:N/2);X(N/2+1);zeros(M*N-N/2-1,1)]);
大家可以自行验证。
本文中没有设计到具体公式的推导,希望获得详细信息的人可以阅读 Lawrence 写的文章 "Computing the Discrete-Time Analytic signal via FFT"。
利用FFT 计算生成离散解析信号的更多相关文章
- 利用Xstream注解生成和解析xml
实体类: @XStreamAlias("person") public class PersonBean { @XStreamAlias("firstName&q ...
- java 利用Xstream注解生成和解析xml
https://www.oschina.net/code/snippet_116183_14202#23325
- 解析利用wsdl.exe生成webservice代理类的详解
利用wsdl.exe生成webservice代理类:根据提供的wsdl生成webservice代理类1.开始->程序->Visual Studio 2005 命令提示2.输入如下红色标记部 ...
- Android 利用Gson生成或解析json
目前手机端和服务端数据交流格式一般是json,而谷歌提供了Gson来解析json.下载Gson:https://code.google.com/p/google-gson/ 下载的放在lib并导入,若 ...
- Amdroid示例:利用Gson生成或解析json
转自:http://www.cnblogs.com/liqw/p/4266209.html 目前手机端和服务端数据交流格式一般是json,而谷歌提供了Gson来解析json.下载Gson:https: ...
- DELPHI XE10,JSON 生成和解析,再利用INDYHTTP控件POST
Delphi XE10,Json 生成和解析,再利用indyhttp控件Post 年09月20日 :: 阅读数: --不多说,直接上代码 procedure TFrmMain.Brand; var J ...
- Python分析离散心率信号(下)
Python分析离散心率信号(下) 如何使用动态阈值,信号过滤和离群值检测来改善峰值检测. 一些理论和背景 到目前为止,一直在研究如何分析心率信号并从中提取最广泛使用的时域和频域度量.但是,使用的信号 ...
- [笔记]ACM笔记 - 利用FFT求卷积(求多项式乘法)
卷积 给定向量:, 向量和: 数量积(内积.点积): 卷积:,其中 例如: 卷积的最典型的应用就是多项式乘法(多项式乘法就是求卷积).以下就用多项式乘法来描述.举例卷积与DFT. 关于多项式 对于多项 ...
- Python分析离散心率信号(中)
Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...
随机推荐
- (IOS)多线程开发
一.线程的使用 以向网络请求一张图片为例 -(void)downURL:(NSURL *)aURL { NSData *d = [NSData dataWithContentsOfURL:aURL]; ...
- splice()函数的使用方法
splice()函数的使用方法,这是一个拗口的函数.用起来有点麻烦.图3所看到的是splice函数的功能.将一个列表插入到还有一个列表其中.list容器类定义了splice()函数的3个版本号: sp ...
- 在CTime类中重载<<和>>
程序代码: #include <iostream> using namespace std; class CTime//时间类 { private: unsigned short int ...
- css基础(二)
一.元素内容的字体属性 1.font-family 字体名称,例如:宋体,新罗马字体等 注意:1.不能使用偏僻的字体,要使用安全字体,如:arial;verdana;times new roman ...
- windows 不能在 本地计算机 启动 Apache
可能是Apache 的监听端口与其他软件有冲突,这是新手常犯的一个错误,Windows安装了IIS服务器的同时,又安装Apache服务器,二个服务器软件都监听TCP/IP协议的80端口,于是就有其中的 ...
- mysql简单使用增删改查
修改配置文件 在my.in配置文件 找到client 指的是mysql客户端 port3306 default -charachter-set=utf-8 default -charachter-se ...
- CodeForces 546D Soldier and Number Game 打表(求质因子个数)
题目:戳我这个题与HDUOJ 5317有异曲同工之妙 题意:题意看懂了上面的一大串英文之后其实很简单,就是给你一个正整数n,问你n有多少个质因子,不过这里n是通过a!/b!给定的,也就是说n=(a!/ ...
- aspx.cs上传文件
aspx.cs文件 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...
- 五张图概括 什么是 ASP 、 ASP.NET (Web Pages,Web Forms ,MVC )
当你看懂下面这五张图,我相信你对于学习.NET Web开发路线将不陌生! 来源: http://www.w3 ...
- QML在XP等显卡明显不好的情况下 可以参考
http://doc.qt.io/qt-5/windows-requirements.html