728x90
반응형
SMALL
Complex Numbers
공학에서 시간 불변 진폭 (A), 각주파수 (ω) 및 초기 위상 (φ)을 갖는 사인파 신호는 페이저 (phasor)라고 하는 복소수로 나타낼 수 있다는 것이다. (위상 벡터의 약자)
|
오일러의 공식을 사용한다. 페이저는 시간 변화에 대한 참조 없이 작성되지만 다른 신호에 대해서만 작성되므로 일반적으로 다음과 같이 작성된다.
The Imaginary Number
Representation
|
## load libraries
import matplotlib.pyplot as plt
import matplotlib.animation
import numpy as np
import cmath as cm
from scipy import signal as sps
from IPython.display import HTML
# Prepare a complexe plane plot (aka argand diagram)
fig, ax = plt.subplots(1,2,figsize=(12,4),sharey='row',gridspec_kw={'width_ratios': [1, 2]})
ax[0].axis([-1,1,-1,1])
ax[0].spines['left'].set_position('center')
ax[0].spines['bottom'].set_position('center')
ax[0].spines['right'].set_color('none')
ax[0].spines['top'].set_color('none')
ax[0].add_artist(plt.Circle([0,0],1,color='k', fill=False))
## define a number and represent it as a vector on the complex plane
# pick an arbitrary phase
phi1 = 0
z1 = complex(np.cos(phi1),np.sin(phi1))
l1, = ax[0].plot([0,z1.real],[0,z1.imag],marker='o');
phi2 = np.pi/4 # 45° expressed in radians
z2 = complex(np.cos(phi2),np.sin(phi2))
l2, = ax[0].plot([0,z2.real],[0,z2.imag],marker='o');
## Let's plot the signals as a time series next to it
# Pick an arbitrary frequency
f = 50;
t = np.linspace(0,1/f,20) # 1/f, aka the periode of the signal (T), is one complete cycle.
x1 = np.sin(2*np.pi*f*t+phi1)
x2 = np.sin(2*np.pi*f*t+phi2)
ax[1].axis([0,1/f,-1,1])
ax[1].spines['bottom'].set_position('center')
ax[1].spines['right'].set_color('none')
ax[1].spines['top'].set_color('none')
plt.xlabel('t [s]', horizontalalignment='right', x=1)
l3, = ax[1].plot(t,x1)
l4, = ax[1].plot(t,x2);
## Let's animate this
# using the same amount of samples for phi, t and the animation frequency will make things much simpler
Nframes = 20;
phi = np.linspace(0,2*np.pi,Nframes)
t = np.linspace(0,1/f,Nframes)
# recompute x1 and x2 with the new sample rate
x1 = np.sin(2*np.pi*f*t+phi1)
x2 = np.sin(2*np.pi*f*t+phi2)
def animate(i):
z1 = complex(np.cos(phi[i]+phi1),np.sin(phi[i]+phi1))
z2 = complex(np.cos(phi[i]+phi2),np.sin(phi[i]+phi2))
l1.set_data([0,z1.real],[0,z1.imag])
l2.set_data([0,z2.real],[0,z2.imag])
l3.set_data(t[0:i],x1[0:i])
l4.set_data(t[0:i],x2[0:i])
ani = matplotlib.animation.FuncAnimation(fig, animate, frames=Nframes)
HTML(ani.to_jshtml())
Operations with complex numbers
복소수에는 많은 수학적 관계가 있다. 더하기와 곱하기 (빼기와 나눗셈은 어떤 면에서는 각각의 특수한 경우). 이것이 복소수 (직교 및 극좌표)에 대한 두 표현이 모두 사용되는 이유 중 하나이다. 데카르트 표현에서 더하기 (또는 빼기)가 매우 쉽고 극 표현에서 곱하기 (또는 나누기)가 매우 쉽다.
https://github.com/aath0/AlgorithmsNeuroscience/blob/master/Tutorials/ComplexNumbers.ipynb
728x90
반응형
LIST
'Brain Engineering > MNE' 카테고리의 다른 글
Signal Processing : Temporal / Spectral Space (2) (0) | 2022.04.05 |
---|---|
Signal Processing : Temporal / Spectral Space (1) (0) | 2022.04.05 |
[MNE-Python] fNIRS 장치에서 데이터 가져오기 (2) (0) | 2022.04.04 |
[MNE-Python] fNIRS 장치에서 데이터 가져오기 (1) (1) | 2022.04.04 |
[MNE-Python] EEG 장치에서 데이터 가져오기 (0) | 2022.03.28 |