加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

數(shù)字信號(hào)處理沒(méi)有Matlab?用Python一樣很爽

04/02 16:56
2344
閱讀需 8 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

通常,在數(shù)字信號(hào)處理時(shí),我們避不開(kāi)matlab這個(gè)工具,因其它的強(qiáng)大的功能受到廣大工程師的好評(píng),也一直都是業(yè)界的不二之選。但是,matlab畢竟是商業(yè)軟件,公司里如果使用的話,就需要支付高昂的費(fèi)用。即使公司購(gòu)買(mǎi)了商業(yè)版本,也不會(huì)每個(gè)人都能隨時(shí)使用,這對(duì)我們平時(shí)的工作和學(xué)習(xí)將會(huì)帶來(lái)很多的不便之處。

不過(guò),除了Matlab外,還有什么不錯(cuò)的工具推薦呢?在這里為大家推薦的是一直很受歡迎的Python。對(duì)Python有所了解的同學(xué)就會(huì)知道,Python擁有豐富的第三方庫(kù),涉及到各個(gè)領(lǐng)域。應(yīng)該說(shuō),沒(méi)有你不知道的,只有你想不到的,它通通都有。在科學(xué)研究和數(shù)據(jù)處理上,它的應(yīng)用非常的廣泛。而且,他們通通都是免費(fèi)的。是不是很誘人?不過(guò),按照Python后,需要我們根據(jù)需求自己手動(dòng)安裝相關(guān)的第三方庫(kù),今天和大家一起學(xué)習(xí)下如何使用Python替代matlab進(jìn)行數(shù)字信號(hào)處理。

numpy是一個(gè)支持多維度的數(shù)組和矩陣運(yùn)算庫(kù),并包含了大量的數(shù)學(xué)函數(shù)庫(kù),其科學(xué)數(shù)值運(yùn)算較為高效,而被廣泛應(yīng)用于各種工程研發(fā)中。安裝命令如下:

python -m pip install numpy

如下圖,出現(xiàn)安裝成功的提示即可。

我們使用numpy寫(xiě)個(gè)代碼試試吧。

import numpy as np
import numpy.matlib

n1 = np.zeros((3,4), dtype=int) #創(chuàng)建數(shù)組并初始化為0
print("n1 = ")
print(n1)

print(" ---------- ")

n2 = np.ones((3,3), dtype=int) #創(chuàng)建數(shù)據(jù)并初始化為1
print("n2 = ")
print(n2)
print("n2 * n2 = ")
print(n2 * n2)

print(" ---------- ")

print("n3 = ")
n3 = np.matlib.zeros((3,4), dtype=int) #創(chuàng)建矩陣并初始化為0
print(n3)

print(" ---------- ")

n4 = np.matlib.ones((3,3), dtype=int) #創(chuàng)建矩陣并初始化為1
print("n4 = ")
print(n4)
print("n4 * n4 = ")
print(n4*n4)

代碼運(yùn)行的結(jié)果如下,上面的示例中,n1和n2是兩個(gè)數(shù)組,而n3和n4是兩個(gè)矩陣,不過(guò),矩陣庫(kù)在numpy.matlab中。這里初始化我們用到了zeros和ones函數(shù),是不是和之前學(xué)習(xí)的C++的Eigen庫(kù)類(lèi)似?

matplotlib是一個(gè)風(fēng)格類(lèi)似matlab的繪圖庫(kù),有著豐厚的圖表繪制功能,并且和matlab有著相似的函數(shù),對(duì)于熟悉matlab的同學(xué)可以無(wú)縫切入。安裝命令如下:

python -m pip install matplotlib

到這里我們已經(jīng)安裝了numpy和matplotlib這兩個(gè)庫(kù),我們?cè)俳Y(jié)合numpy畫(huà)個(gè)曲線看看,例如:y=3x+2。

import numpy as np
from matplotlib import pyplot as plt

x = np.arange(0, 10)
y = 3*x + 2
print("x=")
print(x)

print("y=")
print(y)

plt.plot(x, y)
plt.title("y = 3x + 2")
plt.show()

終端輸出x,y的值:

關(guān)于x,y的曲線圖:

scipy是一個(gè)開(kāi)源的科學(xué)計(jì)算庫(kù),主要有最優(yōu)化、線性代數(shù)、積分、插值、擬合、特殊函數(shù)、快速傅里葉變換、信號(hào)處理、圖像處理、常微分方程求解器等功能。安裝命令如下:

python -m pip install scipy

scipy庫(kù)比上面兩個(gè)要大一些,下載速度可能較慢,同學(xué)們請(qǐng)耐心等待。

按照慣例,這里可以上代碼了,我們結(jié)合上面的numpy和matplotlib庫(kù)寫(xiě)個(gè)正弦信號(hào)和正弦信號(hào)的傅立葉變換的例子。

import numpy as np
from matplotlib import pyplot as plt
import scipy as sci

fs = 100 # 采樣率
N = 256 # 數(shù)據(jù)點(diǎn)數(shù)
n = np.linspace(0,N-1,N)
print(n)

t = n / fs #時(shí)間序列

x = 0.5 * np.sin(2*np.pi*15*t) + 2*np.sin(2*np.pi*40*t) #實(shí)信號(hào)

y1 = sci.fft.fft(x, N) #信號(hào)傅立葉變換
y2 = sci.fft.fftshift(y1)

mag1 = abs(y1) #對(duì)信號(hào)取模求振幅
mag2 = abs(y2)

f1 = n * fs / N #頻率序列
f2 = n * fs / N - fs/2

plt.subplot(3,1,1)
plt.title("usual FFT")
plt.xlabel("freq/Hz")
plt.ylabel("Amp")
plt.plot(f1, mag1) #隨頻率變化的振幅

plt.subplot(3,1,2)
plt.title("FFT without fftshift")
plt.xlabel("Freq/Hz")
plt.ylabel("Amp")
plt.plot(f2, mag1) #隨頻率變化的振幅

plt.subplot(3,1,3)
plt.title("FFT after fftshift")
plt.xlabel("Freq/Hz")
plt.ylabel("Amp")
plt.plot(f2, mag2) #隨頻率變化的振幅

plt.show()

執(zhí)行結(jié)果如下:

當(dāng)然,我們還可以用命令查看我們安裝了哪些庫(kù)。

python -m pip list

以上,這三個(gè)庫(kù)是平時(shí)數(shù)字信號(hào)處理用到的非常重要的三個(gè)庫(kù)。是不是已經(jīng)心動(dòng)了?大家趕快動(dòng)手試下吧!

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
DP83822IRHBT 1 Texas Instruments Low-power, robust 10/100-Mbps Ethernet PHY transceiver with 16-kV ESD 32-VQFN -40 to 85

ECAD模型

下載ECAD模型
$4.03 查看
LAN8720AI-CP 1 Microchip Technology Inc LAN8720AI-CP

ECAD模型

下載ECAD模型
$1.64 查看
KSZ8081MLXCA-TR 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER

ECAD模型

下載ECAD模型
$1.05 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜