欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 基于FIR實(shí)現(xiàn)Hilbert濾波器求信號(hào)包絡(luò)詳解

 更新時(shí)間:2020年02月26日 13:16:28   作者:qq7835144@163.com  
今天小編就為大家分享一篇Python 基于FIR實(shí)現(xiàn)Hilbert濾波器求信號(hào)包絡(luò)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

在通信領(lǐng)域,可以通過(guò)希爾伯特變換求解解析信號(hào),進(jìn)而求解窄帶信號(hào)的包絡(luò)。

實(shí)現(xiàn)希爾伯特變換有兩種方法,一種是對(duì)信號(hào)做FFT,單后只保留單邊頻譜,在做IFFT,我們稱(chēng)之為頻域方法;另一種是基于FIR根據(jù)傳遞函數(shù)設(shè)計(jì)一個(gè)希爾伯特濾波器,我們稱(chēng)之為時(shí)域方法。

# -*- coding:utf8 -*-
# @TIME   : 2019/4/11 18:30
# @Author  : SuHao
# @File   : hilberfilter.py


import scipy.signal as signal
import numpy as np
import librosa as lib
import matplotlib.pyplot as plt
import time
# from preprocess_filter import *

# 讀取音頻文件
ex = '..\\..\\數(shù)據(jù)集2\\pre2012\\bflute\\BassFlute.ff.C5B5.aiff'
time_series, fs = lib.load(ex, sr=None, mono=True, res_type='kaiser_best')

# 生成一個(gè)chirp信號(hào)
# duration = 2.0
# fs = 400.0
# samples = int(fs*duration)
# t = np.arange(samples) / fs
# time_series = signal.chirp(t, 20.0, t[-1], 100.0)
# time_series *= (1.0 + 0.5 * np.sin(2.0*np.pi*3.0*t) )

def hilbert_filter(x, fs, order=201, pic=None):
  '''
  :param x: 輸入信號(hào)
  :param fs: 信號(hào)采樣頻率
  :param order: 希爾伯特濾波器階數(shù)
  :param pic: 是否繪圖,bool
  :return: 包絡(luò)信號(hào)
  '''
  co = [2*np.sin(np.pi*n/2)**2/np.pi/n for n in range(1, order+1)]
  co1 = [2*np.sin(np.pi*n/2)**2/np.pi/n for n in range(-order, 0)]
  co = co1+[0]+ co
  # out = signal.filtfilt(b=co, a=1, x=x, padlen=int((order-1)/2))
  out = signal.convolve(x, co, mode='same', method='direct')
  envolope = np.sqrt(out**2 + x**2)
  if pic is not None:
    w, h = signal.freqz(b=co, a=1, worN=2048, whole=False, plot=None, fs=2*np.pi)
    fig, ax1 = plt.subplots()
    ax1.set_title('hilbert filter frequency response')
    ax1.plot(w, 20 * np.log10(abs(h)), 'b')
    ax1.set_ylabel('Amplitude [dB]', color='b')
    ax1.set_xlabel('Frequency [rad/sample]')
    ax2 = ax1.twinx()
    angles = np.unwrap(np.angle(h))
    ax2.plot(w, angles, 'g')
    ax2.set_ylabel('Angle (radians)', color='g')
    ax2.grid()
    ax2.axis('tight')
    # plt.savefig(pic + 'hilbert_filter.jpg')
    plt.show()
    # plt.clf()
    # plt.close()
  return envolope

start = time.time()
env0 = hilbert_filter(time_series, fs, 81, pic=True)
end = time.time()
a = end-start
print(a)

plt.figure()
ax1 = plt.subplot(211)
plt.plot(time_series)
ax2 = plt.subplot(212)
plt.plot(env0)
plt.xlabel('time')
plt.ylabel('mag')
plt.title('envolope of music by FIR \n time:%.3f'%a)
plt.tight_layout()

start = time.time()
# 使用scipy庫(kù)函數(shù)實(shí)現(xiàn)希爾伯特變換
env = np.abs(signal.hilbert(time_series))
end = time.time()
a = end-start
print(a)


plt.figure()
ax1 = plt.subplot(211)
plt.plot(time_series)
ax2 = plt.subplot(212)
plt.plot(env)
plt.xlabel('time')
plt.ylabel('mag')
plt.title('envolope of music by scipy \n time:%.3f'%a)
plt.tight_layout()
plt.show()

使用chirp信號(hào)對(duì)兩種方法進(jìn)行比較

FIR濾波器的頻率響應(yīng)

使用音頻信號(hào)對(duì)兩種方法進(jìn)行比較

由于音頻信號(hào)時(shí)間較長(zhǎng),采樣率較高,因此離散信號(hào)序列很長(zhǎng)。使用頻域方法做FFT和IFFT要耗費(fèi)比較長(zhǎng)的時(shí)間;然而使用時(shí)域方法只是和濾波器沖擊響應(yīng)做卷積,因此運(yùn)算速度比較快。結(jié)果對(duì)比如下:

頻域方法結(jié)果

時(shí)域方法結(jié)果

由此看出,時(shí)域方法耗費(fèi)時(shí)間要遠(yuǎn)小于頻域方法。

以上這篇Python 基于FIR實(shí)現(xiàn)Hilbert濾波器求信號(hào)包絡(luò)詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python通過(guò)yagmail實(shí)現(xiàn)發(fā)送郵件代碼解析

    Python通過(guò)yagmail實(shí)現(xiàn)發(fā)送郵件代碼解析

    這篇文章主要介紹了Python通過(guò)yagmail實(shí)現(xiàn)發(fā)送郵件代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • python xlwt如何設(shè)置單元格的自定義背景顏色

    python xlwt如何設(shè)置單元格的自定義背景顏色

    這篇文章主要介紹了python xlwt如何設(shè)置單元格的自定義背景顏色,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Django利用Channels+websocket開(kāi)發(fā)聊天室完整案例

    Django利用Channels+websocket開(kāi)發(fā)聊天室完整案例

    Channels是Django團(tuán)隊(duì)研發(fā)的一個(gè)給Django提供websocket支持的框架,使用它我們可以輕松開(kāi)發(fā)需要長(zhǎng)鏈接的實(shí)時(shí)通訊應(yīng)用,下面這篇文章主要給大家介紹了關(guān)于Django利用Channels+websocket開(kāi)發(fā)聊天室的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • python 圖像增強(qiáng)算法實(shí)現(xiàn)詳解

    python 圖像增強(qiáng)算法實(shí)現(xiàn)詳解

    這篇文章主要介紹了python 圖像增強(qiáng)算法實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python神經(jīng)網(wǎng)絡(luò)使用tensorflow實(shí)現(xiàn)自編碼Autoencoder

    python神經(jīng)網(wǎng)絡(luò)使用tensorflow實(shí)現(xiàn)自編碼Autoencoder

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)使用tensorflow實(shí)現(xiàn)自編碼Autoencoder,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python基于socket實(shí)現(xiàn)簡(jiǎn)單的即時(shí)通訊功能示例

    Python基于socket實(shí)現(xiàn)簡(jiǎn)單的即時(shí)通訊功能示例

    這篇文章主要介紹了Python基于socket實(shí)現(xiàn)簡(jiǎn)單的即時(shí)通訊功能,涉及Python基于socket模塊實(shí)現(xiàn)tcp通信客戶(hù)端與服務(wù)器端相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • Python sklearn中的.fit與.predict的用法說(shuō)明

    Python sklearn中的.fit與.predict的用法說(shuō)明

    這篇文章主要介紹了Python sklearn中的.fit與.predict的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python中的左斜杠、右斜杠(正斜杠和反斜杠)

    Python中的左斜杠、右斜杠(正斜杠和反斜杠)

    這篇文章主要介紹了Python中的左斜杠、右斜杠(正斜杠和反斜杠)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • mac安裝pytorch及系統(tǒng)的numpy更新方法

    mac安裝pytorch及系統(tǒng)的numpy更新方法

    今天小編就為大家分享一篇mac安裝pytorch及系統(tǒng)的numpy更新方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Python庫(kù)?Bokeh?數(shù)據(jù)可視化實(shí)用指南

    Python庫(kù)?Bokeh?數(shù)據(jù)可視化實(shí)用指南

    大家好,今天跟大家分享的是交互式可視化神器?Python?Bokeh?的詳細(xì)使用教程,Bokeh是一個(gè)面向現(xiàn)代web瀏覽器的交互式可視化庫(kù)。它提供了多功能圖形的優(yōu)雅、簡(jiǎn)潔的構(gòu)造,并在大型數(shù)據(jù)集或流式數(shù)據(jù)集上提供了高性能的交互性,接下來(lái)讓我們?cè)敿?xì)看看吧
    2021-11-11

最新評(píng)論