基於Python的數位訊號處理初步

2021-03-02 EETOP

來源:EETOP 行者無疆(論壇usrname:ICNO.1) 的博客

地址:http://www.eetop.cn/blog/?xhsir520

Python 是目前的熱門語言,一直覺得掌握一門程式語言對作為搞技術的來說還是很有必要的,結合工作中能用到的一些數據處理和分析的內容,覺得從數據分析入手,爭取能夠掌握Python在數據處理領域的一些應用。下面是基於Python的numpy進行的數位訊號的頻譜分析介紹

一、傅立葉變換

傅立葉變換是信號領域溝通時域和頻域的橋梁,在頻域裡可以更方便的進行一些分析。傅立葉主要針對的是平穩信號的頻率特性分析,簡單說就是具有一定周期性的信號,因為傅立葉變換採取的是有限取樣的方式,所以對於取樣長度和取樣對象有著一定的要求。

二、基於Python的頻譜分析

# _*_ coding:utf-8 _*_

import numpy as np #導入一個數據處理的模塊

import pylab as pl #導入一個繪圖模塊,matplotlib下的模塊

sampling_rate = 8000 ##取樣頻率

fft_size  =512   #FFT處理的取樣長度

t = np.arange(0,1.1,1.0/sampling_rate)

#np.arange(起點,終點,間隔)產生1s長的取樣時間

x = np.sin(2*np.pi*156.25*t)+2*np.sin(2*np.pi*234.375*t)

#兩個正弦波疊加,156.25HZ和234.375HZ,因此如上面簡單

#的介紹FFT對於取樣時間有要求,

#N點FFT進行精確頻譜分析的要求是N個取樣點包含整數個

#取樣對象的波形。

#因此N點FFT能夠完美計算頻譜對取樣對象的要求

#是n*Fs/N(n*採樣頻率/FFT長度),

#因此對8KHZ和512點而言,

#完美採樣對象的周期最小要求是8000/512=15.625HZ,

#所以156.25的n為10,234.375的n為15。

xs = x[:fft_size]# 從波形數據中取樣fft_size個點進行運算

xf = np.fft.rfft(xs)/fft_size # 利用np.fft.rfft()進行FFT計算,rfft()是為了更方便

#對實數信號進行變換,由公式可知/fft_size為了正確顯示波形能量

# rfft函數的返回值是N/2+1個複數,分別表示從0(Hz)

#到sampling_rate/2(Hz)的分。

#於是可以通過下面的np.linspace計算出返回值中每個下標對應的真正的頻率:

freqs = np.linspace(0,sampling_rate/2,fft_size/2+1)

# np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 

#在指定的間隔內返回均勻間隔的數字

xfp = 20*np.log10(np.clip(np.abs(xf),1e-20,1e1000))

#最後我們計算每個頻率分量的幅值,並通過 20*np.log10() 

#將其轉換為以db單位的值。為了防止0幅值的成分造成log10無法計算,

#我們調用np.clip對xf的幅值進行上下限處理

pl.figure(figsize=(8,4))

pl.subplot(211)

pl.plot(t[:fft_size], xs)

pl.xlabel(u"時間(秒)")

pl.title(u"The Wave and Spectrum 156.25Hz234.375Hz")

pl.subplot(212)

pl.plot(freqs, xfp)

pl.xlabel(u"Hz")

pl.subplots_adjust(hspace=0.4)

pl.show()

#繪圖顯示結果


現在來看看頻譜洩露,將採樣對象的頻率改變

x = np.sin(2*np.pi*100*t)+2*np.sin(2*np.pi*234.375*t)


我們明顯看出,第一個對象的頻譜分析出現「洩露」,能量分散到其他頻率上,

沒法準確計算到計算對象的頻譜特性。

窗函數

上面我們可以看出可以通過加「窗」函數的方法來處理,儘量保證FFT長度內

的取樣對象是對稱的。

import pylab as pl

import scipy.signal as signal

pl.figure(figsize=(8,3))

pl.plot(signal.hann(512))#漢明窗函數 

pl.show()

對上述出現頻譜洩露的函數進行加窗處理,後面會介紹一下各種加窗函數的原理和效果。

推薦--點擊 閱讀原文,可以查看作者更多相關博客:

點擊閱讀原文查看更多作者博客

相關焦點

  • 數位訊號處理課程教學質量標準
    數位訊號處理是研究用系統對含有信息的信號進行處理(變換)以獲得人們所希望的信號,從而達到提取信息、便於利用的一門學科,信號處理幾乎涉及所有的工程技術領域。本課程主要講述離散時間信號和系統的時域和頻域分析,離散傅立葉變換(DFT),快速傅立葉變換(FFT),無限衝激響應(IIR)數字濾波器的設計,有限衝激響應(FIR)數字濾波器的設計,數字濾波器網絡結構等內容。
  • Matlab數位訊號處理
    一、函數信息與數位訊號數位訊號區別與傳統的函數信息的最大特點,就是其離散性,即數位訊號的自變量與返回值都是離散定義的
  • 數位訊號處理(DSP)
    數位訊號處理其主要標誌是兩項重大進展,即快速傅立葉變換(FFT)算法的提出和數字濾波器設計方法的完善。 數位訊號處理是把信號用數字或符號表示成序列,通過計算機或通用(專用)信號處理設備,用數值計算方法進行各種處理,達到提取有用信息便於應用的目的。
  • 數位訊號處理之信號處理仿真 緒論
    推出本系列課程就是為了幫助讀者打好數位訊號處理的理論基礎和MATLAB的仿真基礎。
  • 數位訊號處理架構下FPGA,ARM,DSP的對比
    > 1.內容概要 信號處理系統一般不單單是模擬信號或者數位訊號,一般兩者都會有。,或者增強某些信號; 3》AD將模擬信號轉換成數位訊號; 4》DSP/FPGA/ARM/MPU數位訊號處理。 整個系統分為三個域,從模擬到數字,再到數位訊號處理,再到數字變模擬。 數位訊號處理一般所研究的內容涉及採樣、濾波、變換、檢測、譜分析、估計、壓縮以及識別等;數位訊號處理的理論和算法是密不可分的;相對於模擬信號系統處理,數位訊號處理體積小、功耗低、精度高、易於大規模集成以及可進行二維以及多維處理等優勢。
  • 基於FPGA的信號小波實時處理方法
    目前常用於高速實時信號處理的硬體晶片分為兩大類:基於大規模可編程集成電路FPGA的純硬體實現方案和基於高速通用DSP的軟體實現方案。採用FPGA的硬體實現方案硬體接口設計靈活,可以和任意數字外圍電路直接使用,且其具有高度的集成度和高速的處理速度;而基於高速通用DSP的軟體實現方案代碼設計靈活,可以快速修改和調試程序[6]。
  • 基於CPCI總線的通用FPGA信號處理板的設計
    先進的雷達信號處理設備不僅要求性能高、功能多樣化,而且要求信號處理設備的研製、裝備周期短,能保持與國際先進水平同步發展。因此有必要發展一種可重構、可擴展的通用信號處理系統,能將雷達信號處理模塊化、標準化、通用化。這樣,一方面可以通過硬體擴展來適應信號處理規模的變化,另一方面可以通過靈活的軟體編程來實現各種信號方式和各種複雜算法。
  • 數位訊號處理學習心得
  • Python之print的初步認識
    print的初步認識:對於科班出身的或有相關經驗的人來說,學習python是相當有趣的事,因為可以做日常任務,比如自動備份你的MP3;可以做網站,如YouTube就是Python寫的;可以做網路遊戲的後臺,很多在線遊戲的後臺都是Python開發的;可以爬數據,得到你想要的內容。總之就是能幹很多很多事啦。
  • 《數位訊號處理》期末複習題一
    本公眾號進行數位訊號處理系列課程(信號與系統——數位訊號處理——隨機信號分析——現代數位訊號處理)輔導,鞏固基礎與進一步提高相結合
  • 基於ADSP-Ts101的數位訊號處理機實現
    由於多種高性能數位訊號處理器的出現,使得可以採用軟體通過快速傅立葉變換(FFT)算法來實現窄帶多譜勒濾波器組。本文討論的是由高速DSP晶片ADSP—TS101構成的數字式雷達信號處理器。ADSP—TS101數位訊號處理器作為雷達信號處理器的核心,主要完成以下功能:一是採用快速傅立葉變換(FFT)算法來實現窄帶多譜勒濾波器組;二是對被檢測信號進行恆虛警處理。本系統在設計時比較好地發揮了高速DSP晶片ADSP-TS101的良好性能;合理地解決了高速數據率的問題;充分地利用了晶片內部資源;降低了系統設備的複雜性,又保證了系統性能。
  • 一種基於Matlab的γ-γ數字符合數據處理
    一種基於Matlab的γ-γ數字符合數據處理趙修良,陳希維,秦慧超,周芷千,高 波,賀三軍*
  • 基於DSP和SOPC數位訊號發生器的設計
    結果表明,採用SOPC技術設計的正弦信號發生器與使用DSP晶片實現相比,其高速的運算能力以及內部操作的靈活性,使得產生的波形具有控制方便,輸出相位連續,精度高,穩定性好等優點,具有很高的應用價值。關鍵詞:可編程片上系統;DSP;集成開發環境CCS;信號發生器本文引用地址:http://www.eepw.com.cn/article/152419.htmO 引 言 數位訊號發生器是在電子電路設計、自動控制系統和儀表測量校正調試中應用很多的一種信號發生裝置和信號源。
  • 數位訊號處理到底有什麼用
    進行數位訊號處理系列課程(信號與系統——數位訊號處理——隨機信號分析——現代數位訊號處理)輔導,鞏固基礎與進一步提高相結合。作者聯繫方式:Email: 103282699@qq.com. QQ:103282699.
  • 基於FPGA的振動信號採集處理系統設計
    本文設計了一種基於FPGA的振動信號採集處理系統,該系統通過振動信號採集電路、抗混疊濾波電路、AD採樣電路將電荷信號轉化為數位訊號送入FPGA,在FPGA處理設計中利用數據流控制方法並行實現了信號的採樣和處理,並在數據存儲和訪問過程中採用時鐘時標方法判斷信號採樣過程中的數據丟失情況
  • 基於直接數字合成技術的信號發生器的設計
    基於直接數字合成技術的信號發生器的設計 電子設計 發表於 2018-12-18 08:01:00 1 引言 現代通信技術、雷達技術、電子測量以及一些光電應用領域都要求高精度
  • 淺談DSP數位訊號處理技術的實現與應用
    數位訊號處理的目的是對真實世界的連續模擬信號進行測量或濾波。因此在進行數位訊號處理之前需要將信號從模擬域轉換到數字域,這通常通過模數轉換器實現。
  • 數位訊號處理的FPGA實現(第4版)(中+英+源碼)
    FPGA正在掀起一場數位訊號處理的變革。本書旨在講解前端數位訊號處理算法的高效實現。首先概述了當前的FPGA技術、器件以及用於設計*先進DSP系統的工具。第1章的案例研究是40多個設計示例的基礎。隨後幾章闡述了計算機算法的概念、理論、FIR和IIR濾波器的實現、多抽樣率數位訊號系統、DFT和FFT算法、未來很可能實現的高級算法以及自適應濾波器等。每一章都包含練習。
  • python基礎---異常處理
    程序的異常處理今天霖小白心血來潮想來分享一下python基礎中的如何異常處理,使程序有更好的用戶體驗。前言python程序對用戶的輸入有一定的要求,所以當實際輸入不滿足程序要求時,可能在程序運行過程中會直接報錯無法進行下一步的運行。
  • 中文語音處理在數字助聽器的設計
    加拿大在中國的一語音實驗室通過多年的研究和實驗,早在 2000 年運用領先的數位訊號處理 (DSP) 技術,在其數字助聽器中加入中文語音算法,並同時申請了相關專利。目前他們率先推出的以中文語音處理技術為核心的全新數字助聽器 —Intelligia ,在臨床試驗中得到受試者的認可,初步證明這種新型助聽器對說以中文為母語的患者有益處。