基於Python的IIR數字濾波器

2021-10-14 04:16:32 字數 1424 閱讀 1632

import numpy as np

from scipy.fftpack import fft

from scipy import signal

import matplotlib.pyplot as plt

from matplotlib.pylab import mpl

mpl.rcparams[

'font.sans-serif']=

['simhei'

]#顯示中文

mpl.rcparams[

'axes.unicode_minus']=

false

#顯示負號

n =1024

#取樣點的個數

x = np.arange(0,

2*np.pi,

2*np.pi/n)

#產生頻率為20、500、5hz的訊號進行模擬

y =7

* np.sin(

20*x)+5

* np.sin(

500* x)+9

* np.sin(

5* x)

plt.figure(1)

plt.title(

"原始訊號時域波形"

)plt.plot(x, y)

fft_y = fft(y)

# 快速傅利葉變換

a = np.

abs(fft_y)

#對變換後的結果取模

a = a*

2/n #求幅值

w = np.arange(

0,n,1)

#頻域軸

plt.figure(2)

plt.title(

"原始訊號頻譜"

)plt.plot(w,a)

b, a = signal.butter(10,

[2*10

/n,2

*250

/n],

'bandpass'

)data = signal.filtfilt(b, a, y)

#y為要過濾的訊號

plt.figure(3)

plt.title(

"帶通iir濾波後的時域波形"

)plt.plot(x,data)

fft_y = fft(data)

# 快速傅利葉變換

a = np.

abs(fft_y)

#對變換後的結果取模

a = a*

2/n #求幅值

w = np.arange(

0,n,1)

#頻域軸

plt.figure(4)

plt.title(

"帶通濾波後頻譜圖"

)plt.plot(w,a)

plt.show(

)

IIR與FIR數字濾器的比較

fir和iir濾波器的乙個主要區別 fir是線性相位,iir為非線性相位 雙線性變換法 對於非線性相位會造成的影響,可以這樣考慮 對於輸入的不同頻率分量,造成的相位差與頻率不成正比,則輸出時不同頻率分量的疊加的相位情況和輸入時有變化,得到的通帶訊號產生失真。iir濾波器有以下幾個特點 1 iir數字...

基於KNN的手寫數字識別

from numpy import import operator import os def classify0 inx,dataset,labels,k 構造分類器 knn原理 datasetsize dataset.shape 0 diffmat tile inx,datasetsize,1 ...

基於MNIST的手寫數字識別

1 mnist 資料資料集獲取 方式一 使用 tf.contrib,learn 模組載入 mnist 資料集 棄用 如下 使用 tf.contrib.learn 模組載入 mnist 資料集 deprecated 棄用 import tensorflow as tf from tensorflow....