Matlab的希尔伯特变换在C ++中(Matlab Hilbert Transform in C+

2019-06-27 00:56发布

首先,请原谅我在这个领域的无知,我的职业是程序员,但一直停留在一个情况有点出乎我的专业知识(在数学和信号处理)。

我有一个MATLAB脚本,我需要移植到C ++程序(没有编译MATLAB代码为DLL)。 它使用hilbert()函数有一个参数。 我试图找到一种方式来实现在C同样的事情++(即有一个功能,也只有一个参数,并返回相同的值)。

我已经使用FFT和IFFT构建它的方式读了,但似乎无法得到任何的Matlab的版本一样简单。 最主要的是,我需要它在128 * 2000矩阵的工作,并没有什么我在我搜索发现,已经向我展示了如何做到这一点。

我将与返回无论是复杂的价值,或者只是绝对值确定。 比较简单的是融入代码,就更好了。

谢谢。

Answer 1:

MATLAB函数希尔伯特()实际上不计算希尔伯特直接转换,而是它计算分析信号,这在大多数情况下,人们需要的东西。 它通过利用了FFT,删除负频率(设置在数组中零的上半部分)以及将所述逆FFT做的。 这将是C / C直线前进++(三行代码),如果你已经有了一个不错的FFT实现。



Answer 2:

这看起来相当不错,只要你能对付GPL许可证。 A的第一部分大得多的数值计算资源 。



Answer 3:

下面简单的代码。 (注:这是一个更大的项目的一部分)。 对于L的值是基于你的订单,N的测定N = 2L-1。 轮N到奇数。 下面XBAR是基于你定义为输入到您设计系统中的信号。 这是在MATLAB实施。

L = 40;
n = -L:L; % index n from [-40,-39,....,-1,0,1,...,39,40];
h = (1 - (-1).^n)./(pi*n); %impulse response of Hilbert Transform
h(41) = 0; %Corresponds to the 0/0 term (for 41st term, 0, in n vector above)

xhat = conv(h,xbar); %resultant from Hilbert Transform H(w);

plot(abs(xhat))


Answer 4:

不是一个真正的回答你的问题,但也许让你睡得更好的方法。 我相信,你将无法在对矩阵什么是基本的FFT的具体情况比Matlab的快得多。 这就是Matlab的过人之处!

Matlab的FFT的使用FFTW计算,用C语言编写这似乎事实上的最快的FFT算法也用Matlab并行。 最重要的是,从报价http://www.mathworks.com/help/matlab/ref/fftw.html :

对于FFT尺寸是2的幂,214和222之间,MATLAB软件使用在其内部数据库特殊预加载的信息来优化FFT计算。

所以,如果你的代码是稍微慢一点不心疼?



文章来源: Matlab Hilbert Transform in C++