티스토리 뷰
vscode 하단 터미널(terminal) 탭에서 library 설치
# 앞에 $ 기호는 prompt를 나타냄
$ pip install numpy
$ pip install matplotlib
ex0_quantization_signal.py
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0,11)
x = 0.85 ** t
plt.figure(figsize = (10,8))
# 1. Plotting Analog Signal
plt.subplot(2, 2, 1)
plt.title('Analog Signal', fontsize=20)
plt.plot(t, x, linewidth=3, label='x(t) = (0.85)^t')
plt.xlabel('t' , fontsize=15)
plt.ylabel('amplitude', fontsize=15)
plt.legend(loc='upper right')
# 2. Sampling and Plotting of Sampled signal
plt.subplot(2, 2, 2)
plt.title('Sampling', fontsize=20)
plt.plot(t, x, linewidth=3, label='x(t) = (0.85)^t')
n = t
markerline, stemlines, baseline = plt.stem(n, x, label='x(n) = (0.85)^n')
plt.setp(stemlines, 'linewidth', 3)
plt.xlabel('n' , fontsize = 15)
plt.ylabel('amplitude', fontsize = 15)
plt.legend(loc='upper right')
# 3. Quantization
plt.subplot(2, 2, 3)
plt.title('Quantization', fontsize = 20)
plt.plot(t, x, linewidth =3)
markerline, stemlines, baseline=plt.stem(n,x)
plt.setp(stemlines, 'linewidth', 3)
plt.xlabel('n', fontsize = 15)
plt.ylabel('Range of Quantizer', fontsize=15)
plt.axhline(y = 0.1, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.2, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.3, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.4, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.5, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.6, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.7, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.8, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.9, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 1.0, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.subplot(2, 2, 4)
plt.title('Quantized Signal', fontsize = 20)
xq = np.around(x,1)
markerline, stemlines, baseline = plt.stem(n,xq)
plt.setp(stemlines, 'linewidth', 3)
plt.xlabel('n', fontsize = 15)
plt.ylabel('Range of Quantizer', fontsize=15)
plt.axhline(y = 0.1, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.2, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.3, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.4, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.5, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.6, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.7, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.8, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 0.9, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.axhline(y = 1.0, xmin = 0, xmax = 10, color = 'r', linewidth = 3.0)
plt.tight_layout()
plt.show()
ex1_analog2digital_example.py
import numpy as np
import matplotlib.pyplot as plt
def cap_charge_voltage(V0, time):
return V0*(1 - np.exp(-time))
# continuous time
# sampling : descrete time
# f(t) = A*sin(2*pi*f*t) = A*sin(w*t)
t = np.arange(0.0,5.0,0.001)
V0 = 5 #
s1 = cap_charge_voltage(V0,t)
ax1 = plt.subplot(211)
ax1.plot(t,s1,'-r',label='analog')
ax1.set_xlabel('time(tau=RC)')
ax1.set_ylabel('voltage')
ax1.axis('tight')
ax1.legend(loc="upper left")
ax1.grid()
dt = np.arange(0,5.5,0.5)
res_bit = 10
dV0 = 2**res_bit
s2 = cap_charge_voltage(dV0,dt)
ax2 = plt.subplot(212)
ax2.plot(dt,s2,'o',label='digit(10bit)')
for i in range(1,4,1):
# ax2.text(dt[1],s2[1],str(s2[1]))
ax2.text(dt[i],s2[i],str(s2[i]))
ax2.axhline(y = round(s2[i],0), color = 'm', linestyle = '-')
ax2.text(dt[i]-0.5,round(s2[i],0)+30,str(round(s2[i],0)))
ax2.set_xticks(list(dt))
ax2.set_xlabel('descrete time')
ax2.set_ylabel('value')
ax2.axis('tight')
ax2.legend(loc="upper left")
ax2.grid()
plt.show()
ex2_realtime_signal.py
import numpy as np
import matplotlib.pyplot as plt
plt.axis([0, 10, 0, 20])
x_sum = []
y_sum = []
y_sum_noise = []
for x in range(10):
x_sum.append(x)
# y = 2*(x**2)
y = 2*x
y_noise = np.random.randn()
y_sum.append(y)
y_sum_noise.append(y+y_noise)
plt.scatter(x, y,label='y')
plt.plot(x_sum, y_sum,'-bo',label='y_sum')
plt.plot(x_sum, y_sum_noise,'-ro',label='y_sum_noise')
plt.pause(0.5)
plt.draw()
plt.grid()
plt.show()
ex3_sine_wave_sampling.py
import numpy as np
import matplotlib.pyplot as plt
def sin_wave(amp, freq, time):
return amp*np.sin(2*np.pi*freq*time)
# continuous time
# sampling : descrete time
# f(t) = A*sin(2*pi*f*t) = A*sin(w*t)
t = np.arange(0.0,1.0,0.001)
f = 50 # frequency
A = 220 # Amplitude
s1 = sin_wave(A,f,t)
s2 = sin_wave(A/2,f*2,t)
ax1 = plt.subplot(311)
ax1.plot(t,s1,'-o',label='sin(t)')
ax1.set_xlabel('Angle [rad]')
ax1.set_ylabel('sin(x)')
ax1.axis('tight')
ax1.legend(loc="upper left")
ax1.grid()
ax2 = plt.subplot(312)
ax2.plot(t,s1+s2,'-o',label='sin(t)')
ax2.set_xlabel('Angle [rad]')
ax2.set_ylabel('sin(x)')
ax2.axis('tight')
ax2.legend(loc="upper left")
ax2.grid()
###### sampling ######
ax3 = plt.subplot(313)
x1 = np.linspace(0, 2*np.pi, 6)
x2 = np.linspace(0, 2*np.pi, 10)
x3 = np.linspace(0, 2*np.pi, 60)
x4 = np.linspace(0, 2*np.pi, 100)
ax3.plot(x1, np.sin(x1),'-ro',label='x1')
ax3.plot(x2, np.sin(x2),'-g*',label='x2')
ax3.plot(x3, np.sin(x3),'-bo',label='x3')
ax3.plot(x4, np.sin(x4),'-m*',label='x4')
ax3.set_xlabel('Angle [rad]')
ax3.set_ylabel('sin(x)')
ax3.axis('tight')
ax3.legend(loc="upper left")
ax3.grid()
plt.show()
Sinal Conditioning
vscode 하단 터미널(terminal) 탭에서 library 설치
# 앞에 $ 기호는 prompt를 나타냄
$ pip install pandas
$ pip install scipy
sample_data.csv를 다운로드하여 vscode 사용중인 폴더 안에 넣고 실행
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy.signal import savgol_filter as sg_filter
import scipy.constants as const
# from spectrum import Periodogram
filename = './sample_data.csv'
xydata = pd.read_csv(filename, names=["X", "Y"])
data_start = xydata.index[xydata["X"] == "XYDATA"].item()
data_end = xydata.index[xydata["X"] == "##### Extended Information"].item()
xydata = xydata.iloc[data_start + 1: data_end, :]
xydata.reset_index(inplace=True, drop=True)
xydata = xydata.astype("float64")
xydata["Y"] = xydata["Y"] / xydata["Y"].max()
x = list(xydata["X"])
x.pop()
y = list(xydata["Y"])
y.pop()
plt.figure(1)
# plot : transmission
ax1 = plt.subplot(211)
ax1.plot(x, y)
ax1.set_xlim(4000, 500)
ax1.set_ylim(None, 1.05)
ax1.set_xlabel('wavenumber [$\mathregular{cm^{-1}]}$')
ax1.set_ylabel('transmittance [a.u.]')
ax1.set_title('IR Spectrum transmittance',loc='left')
ax1.grid()
print(xydata)
# print(y)
# plot : absorbance
ax2 = plt.subplot(212)
x_lambda = 1/np.array(x)
con_y = list(-np.log10(y))
ax2.plot(x_lambda, con_y,'-c')
ax2.set_xlim(1/4000, 1/500)
ax2.set_ylim(None, 1.05)
ax2.set_xlabel("wavelengh $\lambda$ [cm]")
ax2.set_ylabel('absorbance')
ax2.set_title('IR Spectrum absorbance',loc='left')
ax2.grid()
# fig.tight_layout()
fig =plt.figure(2)
c = const.speed_of_light
x_f = np.array(x)*(c*10e2)/10e9 #GHz
y_sgf = sg_filter(y, 29, 2)
plt.plot(x_f,y,'-b',label='origin')
plt.plot(x_f,y_sgf,'-r',label='savitzky-golay filter')
plt.xlim(4000*(c*10e2)/10e9, 500*(c*10e2)/10e9)
plt.xlabel("Frequency [GHz]")
plt.ylabel('transmittance [a.u.]')
plt.title('Transmittance depend on Frequency',loc='left')
plt.legend(loc='lower left')
plt.grid()
plt.show()
반응형
'python > Lecture' 카테고리의 다른 글
[arduino][python] HC-06 Bluetooth 통신 Test (0) | 2023.11.27 |
---|---|
[arduino][python] DS18B20 Digital Sensor pyserial 통신 (0) | 2023.11.23 |
[arduino] DS18B20 Digital Sensor 연결 및 BLE 통신 to App. (0) | 2023.11.23 |
[arduino] DS18B20 Digital Sensor 연결 및 wifi 통신 to Web (0) | 2023.11.23 |
[arduino] DS18B20 Digital Sensor 연결 및 wifi 통신 with MariaDB (0) | 2023.11.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- arduino
- raspberrypi
- Python
- 코로나
- Model
- SSH
- DAQ
- sublime text
- vscode
- git
- DS18B20
- analysis
- Pandas
- Templates
- 확진
- 라즈베리파이
- r
- MacOS
- ERP
- COVID-19
- pyserial
- Raspberry Pi
- Django
- Regression
- template
- github
- CSV
- server
- 자가격리
- 코로나19
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함