[실험내용]
-'np.arange'를 사용하여 0부터 1까지의 시간 벡터를 생성하고, 주파수가 10Hz인 사인파를 생성한다.
-'np.fft.fft'를 사용하여 신호의 DTFT를 계산하고, 'np.fft.fftfreq'를 사용하여 주파수 축을 생성한다.
-신호의 주파수는 10으로 고정하고, 샘플링주파수를 10으로 두어, 샘플간격을 0.1로 맞춘다.
-'plt.plot'를 사용하여 DTFT 스펙트럼을 선도(plot)한다.
import numpy as np
import matplotlib.pyplot as plt
#폰트 꺠짐 방지
plt.rcParams['font.family'] = 'Malgun Gothic'
#특수문자(-) 깨짐 방지
plt.rcParams['axes.unicode_minus'] = False
# 신호 생성하기
Fs = 100 # 샘플링 주파수
T = 1 / Fs # 샘플 간격
t = np.arange(0, 1, T) # 시간 벡터
f = 10 # 신호의 주파수
signal = np.sin(2 * np.pi * f * t)
# DTFT 계산하기
dtft = np.fft.fft(signal)
# 주파수 축 생성하기
freq = np.fft.fftfreq(len(signal), d=T)
# 시간 영역에서 신호 플롯하기
plt.figure(figsize=(9, 10))
plt.subplot(2,1,1)
plt.plot(t, signal)
plt.xlabel('시간')
plt.ylabel('진폭')
plt.title('시간 영역의 신호')
# DTFT 스펙트럼 플롯하기
plt.subplot(2,1,2)
plt.plot(freq, np.abs(dtft))
plt.xlabel('주파수 (Hz)')
plt.ylabel('크기')
plt.title('DTFT 스펙트럼')
plt.grid(True)
plt.show()
위 코드는 샘플링 주파수가 100일때의 코드이다.
[실험결과]
[실험결과 분석 및 고찰]
샘플링주파수가 100이상만 되어도, 거의 이상적인 근사값에 가까워지기 때문에,
200, 300에 다가갈 필요도 없이 시각적인 고찰에는 무리가 없다.
'matplolib > 신호및시스템' 카테고리의 다른 글
DTFT예시코드 분석(2) 주파수 변화에 따른 선도(plot) 변화 (0) | 2023.05.27 |
---|---|
푸리에 변환에 대해 알아보자! (3) | 2023.04.12 |
ReLU함수에 대해 알아보자! (1) | 2023.03.24 |
sigmoid(시그모이드)함수에 대해 알아보자! (1) | 2023.03.24 |
댓글