티스토리 뷰

ㄲㄲㅅEdit

Numpy FFT Example

@2018.12.11

 

Summary python numpy signal fft 티스토리

 

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

 

#Sin Signal Class
class SinSample():
def __init__(self, **kwargs):
self.amp = kwargs.get('amp',1)
self.time = kwargs.get('time',t)
self.freq = kwargs.get('freq',3)
self.sample = np.sin(2*np.pi*self.freq*self.time)
 
def calSignal(self, freq):
return np.sin(2*np.pi*freq*self.time)
def addSample(self, freq):
self.sample = self.sample + (self.calSignal(freq))
#Init
Fs = 1000#1KHz
Ts = 1/Fs
t = np.arange(0.0, 1.0, Ts)
#Make Signal
Mysample = SinSample(amp=1, time=t, freq=3)
Mysample.addSample(50)
Mysample.addSample(100)
#Plot Signal
plt.figure(figsize=(12,5))
plt.plot(t, Mysample.sample)
plt.xlabel('Time(s)')
plt.title('Test Signal in Continuous')
plt.grid(True)
plt.show()

 

 

Y = np.fft.fft(Mysample.sample)
freq = np.fft.fftfreq(len(Y), d=Ts)
 
plt.figure(figsize=(12,5))
plt.plot(freq, np.abs(Y), 'r')
plt.xlabel('Freq (Hz)')
plt.ylabel('|Y(freq)|')
plt.grid(True)

 

###Delete 3hz signal don't use ifft ==> Error###
#check fft.freq function index -> not continuous
###############################################
Y = np.fft.fft(Mysample.sample)
freq = np.fft.fftfreq(len(Y), d=Ts)
 
#target hz
fg = 3
 

for i in range(0, len(Y)):

Y[i] *= (1 if abs(freq[i]) > fg else 0)
filterd_Y = np.fft.ifft(no_shift_Y)
plt.figure(figsize=(12,5))
plt.plot(freq, filterd_Y)

 

###Delete 3hz signal use ifft###
Y = np.fft.fft(Mysample.sample)
freq = np.fft.fftfreq(len(Y), d=Ts)

 

#shift x index (freq)
freq = np.fft.fftshift(freq)

 

#target hz
fg = 3
 
for i in range(0, len(Y)):
Y[i] *= (1 if abs(freq[i]) > fg else 0)
 
filterd_Y = np.fft.ifft(no_shift_Y)
plt.figure(figsize=(12,5))
plt.plot(freq, filterd_Y)

 

###Get FTT & Plot###
Y = np.fft.fft(filterd_Y)
freq = np.fft.fftfreq(len(f_Y), d=Ts)
 
plt.figure(figsize=(12,5))
plt.plot(freq, np.abs(f_Y), 'r')
plt.xlabel('Freq (Hz)')
plt.ylabel('|Y(freq)|')
plt.grid(True)

 

 

%23%20Numpy%20FFT%20Example%0A@%28Summary%29%5Bpython%2C%20numpy%2C%20signal%2C%20fft%2C%20%uD2F0%uC2A4%uD1A0%uB9AC%5D%0A%0A%0A%60%60%60python%0A%25matplotlib%20inline%0Aimport%20numpy%20as%20np%0Aimport%20matplotlib.pyplot%20as%20plt%0A%60%60%60%0A%0A%60%60%60python%0A%23Sin%20Signal%20Class%0Aclass%20SinSample%28%29%3A%0A%20%20%20%20def%20__init__%28self%2C%20**kwargs%29%3A%0A%20%20%20%20%20%20%20%20self.amp%20%3D%20kwargs.get%28%27amp%27%2C1%29%0A%20%20%20%20%20%20%20%20self.time%20%3D%20kwargs.get%28%27time%27%2Ct%29%0A%20%20%20%20%20%20%20%20self.freq%20%3D%20kwargs.get%28%27freq%27%2C3%29%0A%20%20%20%20%20%20%20%20self.sample%20%3D%20np.sin%282*np.pi*self.freq*self.time%29%0A%20%20%20%20%0A%20%20%20%20def%20calSignal%28self%2C%20freq%29%3A%0A%20%20%20%20%20%20%20%20return%20np.sin%282*np.pi*freq*self.time%29%0A%20%20%20%20%0A%20%20%20%20def%20addSample%28self%2C%20freq%29%3A%0A%20%20%20%20%20%20%20%20self.sample%20%3D%20self.sample%20+%20%28self.calSignal%28freq%29%29%0A%60%60%60%0A%0A%60%60%60python%0A%23Init%0AFs%20%3D%201000%231KHz%0ATs%20%3D%201/Fs%0At%20%3D%20np.arange%280.0%2C%201.0%2C%20Ts%29%0A%60%60%60%0A%0A%60%60%60python%0A%23Make%20Signal%0AMysample%20%3D%20SinSample%28amp%3D1%2C%20time%3Dt%2C%20freq%3D3%29%0AMysample.addSample%2850%29%0AMysample.addSample%28100%29%0A%60%60%60%0A%0A%60%60%60python%0A%23Plot%20Signal%0Aplt.figure%28figsize%3D%2812%2C5%29%29%0Aplt.plot%28t%2C%20Mysample.sample%29%0Aplt.xlabel%28%27Time%28s%29%27%29%0Aplt.title%28%27Test%20Signal%20in%20Continuous%27%29%0Aplt.grid%28True%29%0Aplt.show%28%29%0A%60%60%60%0A%0A%21%5BAlt%20text%5D%28./output_4_0.png%29%0A%0A%0A%60%60%60python%0AY%20%3D%20np.fft.fft%28Mysample.sample%29%0Afreq%20%3D%20np.fft.fftfreq%28len%28Y%29%2C%20d%3DTs%29%0A%0Aplt.figure%28figsize%3D%2812%2C5%29%29%0Aplt.plot%28freq%2C%20np.abs%28Y%29%2C%20%27r%27%29%20%0Aplt.xlabel%28%27Freq%20%28Hz%29%27%29%0Aplt.ylabel%28%27%7CY%28freq%29%7C%27%29%0Aplt.grid%28True%29%0A%60%60%60%0A%0A%21%5BAlt%20text%5D%28./output_5_0.png%29%0A%0A%0A%60%60%60python%0A%23%23%23Delete%203hz%20signal%20don%27t%20use%20ifft%20%3D%3D%3E%20Error%23%23%23%0A%23check%20fft.freq%20function%20index%20-%3E%20not%20continuous%0A%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%0AY%20%3D%20np.fft.fft%28Mysample.sample%29%0Afreq%20%3D%20np.fft.fftfreq%28len%28Y%29%2C%20d%3DTs%29%0A%0A%23target%20hz%0Afg%20%3D%203%0A%0Afor%20i%20in%20range%280%2C%20len%28Y%29%29%3A%0A%20%20%20%20Y%5Bi%5D%20*%3D%20%281%20if%20abs%28freq%5Bi%5D%29%20%3E%20fg%20else%200%29%0A%20%20%20%20%0Afilterd_Y%20%3D%20np.fft.ifft%28no_shift_Y%29%0Aplt.figure%28figsize%3D%2812%2C5%29%29%0Aplt.plot%28freq%2C%20filterd_Y%29%0A%60%60%60%0A%0A%21%5BAlt%20text%5D%28./output_6_1.png%29%0A%0A%0A%60%60%60python%0A%23%23%23Delete%203hz%20signal%20use%20ifft%23%23%23%0AY%20%3D%20np.fft.fft%28Mysample.sample%29%0Afreq%20%3D%20np.fft.fftfreq%28len%28Y%29%2C%20d%3DTs%29%0A%0A%23shift%20x%20index%20%28freq%29%0Afreq%20%3D%20np.fft.fftshift%28freq%29%0A%0A%23target%20hz%0Afg%20%3D%203%0A%0Afor%20i%20in%20range%280%2C%20len%28Y%29%29%3A%0A%20%20%20%20Y%5Bi%5D%20*%3D%20%281%20if%20abs%28freq%5Bi%5D%29%20%3E%20fg%20else%200%29%0A%20%20%20%20%0Afilterd_Y%20%3D%20np.fft.ifft%28no_shift_Y%29%0Aplt.figure%28figsize%3D%2812%2C5%29%29%0Aplt.plot%28freq%2C%20filterd_Y%29%0A%60%60%60%0A%0A%21%5BAlt%20text%5D%28./output_7_1.png%29%0A%0A%0A%0A%60%60%60python%0A%23%23%23Get%20FTT%20%26%20Plot%23%23%23%0AY%20%3D%20np.fft.fft%28filterd_Y%29%0Afreq%20%3D%20np.fft.fftfreq%28len%28f_Y%29%2C%20d%3DTs%29%0Aplt.figure%28figsize%3D%2812%2C5%29%29%0Aplt.plot%28freq%2C%20np.abs%28f_Y%29%2C%20%27r%27%29%20%0Aplt.xlabel%28%27Freq%20%28Hz%29%27%29%0Aplt.ylabel%28%27%7CY%28freq%29%7C%27%29%0Aplt.grid%28True%29%0A%60%60%60%0A%0A%21%5BAlt%20text%5D%28./output_8_0.png%29%0A%0A%0A%0A

 

 

코드

https://github.com/LazyerIJ/ECG_Analysis/blob/master/study/Numpy_fft_example.ipynb

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함