matplolib/신호및시스템

DTFT예시코드 분석(1) 샘플링주파수 변화에 따른 선도(plot) 변화

JackSmith 2023. 5. 27.

 

[실험내용]

-'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에 다가갈 필요도 없이 시각적인 고찰에는 무리가 없다.

 

 

댓글