文章目录
- 1 代码演示
- 2 分析总结
在Python的scipy模块中,有两个实现希尔伯特变换计算的方式,分别为signal.hilbert与fftpack.hilbert,但是这两种方式得到的结果有所区别。
1 代码演示
下面进行代码演示。
python">from scipy.signal import hilbert
x=[1,2,3,4]
y=hilbert(x)
print(y)
输出如下:
python">[1.+1.j 2.-1.j 3.-1.j 4.+1.j]
python">from scipy.fftpack import hilbert
x=[1,2,3,4]
y=hilbert(x)
print(y)
输出如下:
python">[-1. 1. 1. -1.]
3、代码块3:使用【MATLAB】中的Hilbert函数计算,本代码块及其结果用于与上述两个Python代码块的结果进行对比:
>> x=[1,2,3,4];
>> y=hilbert(x);
>> y
y =
1.0000 + 1.0000i 2.0000 - 1.0000i 3.0000 - 1.0000i 4.0000 + 1.0000i
2 分析总结
1、第一节中的代码块1、2为Python中的计算结果,代码块3是MATLAB中计算的结果。
2、使用signal.hilbert的代码块1计算的结果与代码块3中的计算结果完全一致,在输出中每一项的复数由实部为x、虚部为x的希尔伯特变换结果组成,这样的输出被称为解析信号。
3、使用fftpack.hilbert的代码块2的输出结果仅为x的希尔伯特变换结果,但是与代码块1、3的输出复数的虚部部分总是相差一个负号,即总是相反的结果,因此可以断定,使用fftpack.hilbert计算的结果实际上正好为希尔伯特变换结果的相反数,实际使用时要重新输出对应结果的相反数,可以修改代码块2为:
from scipy.fftpack import hilbert
x=[1,2,3,4]
y=hilbert(x)
temp=[]
for i in y:
temp.append(-i)
y=temp
print(y)
输出如下:
[1.0, -1.0, -1.0, 1.0]
上述结果才是正确的希尔伯特变换结果。
END