Hilbert变换器

希尔伯特变换简单理解:对实数信号进行数学变换得到一个新的实数信号

变换目标:输出信号是输入信号90°相移后的版本

在时域实现信号90°相移,根据傅里叶变换时移特性可以得到频域响应,希尔伯特变换在频域定义如下:
在这里插入图片描述
希尔伯特变换器的作用:
将输入信号经过希尔伯特变换器后得到输出信号,输入信号作为实部,输出信号作为虚部合成解析信号,对解析信号做Fourier变换,可以消除负频率部分,使用python仿真如下:
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fft


n = np.arange(-6.28,6.29,0.1)
income_signal_sin = np.sin(2*np.pi*n)
Hilbert_signal = np.sin(2*np.pi*n + np.pi/2)

analytic_signal = income_signal_sin +1j * Hilbert_signal

analytic_signal_FFT = fft(analytic_signal)
income_signal_FFT = fft(income_signal_sin)

plt.subplot(211)
plt.plot(n,abs(income_signal_FFT)*2/len(n))
plt.xlabel('output bins')
plt.ylabel('abs(signal)')
plt.title('income signal FFT')
plt.grid(which='both', axis='both')
plt.subplot(212)
plt.plot(n,abs(analytic_signal_FFT)*2/len(n))
plt.xlabel('output bins')
plt.ylabel('abs(signal)')
plt.title('analytic signal FFT')
plt.grid(which='both', axis='both')
plt.tight_layout()
plt.show()

对上式做Fourier逆变换,可以得到时域的系统函数:

  h(t) = [1 - cos(πt/T)]  (T为采样周期)

因为在计算机中只能有离散形式,所以上式在仿真中不具备可实现性,现在 ,令t = n*T,(T为采样周期;n为整数),可以得到希尔伯特变换在时域的离散形式:

h(n) = 2*sin(πn/2)*sin(πn/2)/πn  (T归一化处理)

由于在硬件上实现,只能有限个样值,采用窗函数截断,由于吉布斯效应,可以看到在频域出现抖动。`

使用python仿真如下:
在这里插入图片描述

def Hilbert(fs = 1, N = 60):
    t = np.arange(-N/2, N/2 + 1, 0.01)
    ht = (1 - np.cos(fs * np.pi * t)) / (np.pi * t)

    n = np.arange(-N/2, N/2 + 1,1)
    h = (fs *(1 - np.cos(np.pi*n)))/(np.pi * n)
    h[30] = 0
    Xk = fft(h,128)
    plt.subplot(311)
    plt.scatter(n/fs,h)
    plt.plot(t,ht)
    plt.grid(which='both', axis='both')
    plt.xlabel('n')
    plt.title('Hilbert')
    plt.subplot(312)
    plt.plot(np.arange(0,len(Xk),1),abs(Xk))
    plt.xlabel('output bins')
    plt.ylabel('abs(Xk)')
    plt.grid(which='both', axis='both')
    plt.subplot(313)
    plt.plot(np.arange(0,len(Xk),1),np.unwrap(np.angle(Xk)))
    plt.xlabel('output bins')
    plt.ylabel('angle')
    plt.grid(which='both', axis='both')
    plt.tight_layout()
    return 0

def main():
    Hilbert()
    plt.show()



if __name__ == '__main__':
    main()

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值