Octave Atelier

코드와 해설을 함께 읽는 학습 문서

Code Detail

main_splecgram

spectrogram of chirp signal

ex-03/main_splecgram.m

목록으로

코드를 복사해 Octave에서 바로 실행할 수 있습니다.

카테고리

Exercise 03

exercise-03

코드 길이

50

lines

작성자

won sunggyu

2023-12-01, 2025-03-27

패키지

none

pkg load

전체 코드

50 lines

# filename: main_splecgram.m
# writer: won sunggyu
# date: 2023-12-01, 2025-03-27
# description: spectrogram of chirp signal

run("../startup.m");
addpath(genpath("../mylib"));
printf(fmt("{mfilename}\n", "#FF5733"));

# 키워드
printf(fmt("chirp signal\n", "#CF87DA"));

samp = Sample("dt", 0.001, "Tr", 4);
samp.build_specgram_param("T_wind", 0.1, "ov_r", 0.9)

printf(fmt("{samp.string()}\n", "#FADB79"));

% chirp 신호 생성 및 푸리에 변환
t1 = samp.tx;
x1 = chirp(samp.tx, 0, samp.Tr, 200); # 1xN

f1 = samp.fx(1: samp.nn / 2);
X1 = fft(x1) / samp.nn;
X1 = abs(X1(1: samp.nn / 2));

# chirp 신호 spectrogram
[SS, ff, tt] = specgram(x1, samp.N_wind, samp.Fs, samp.hann_w, samp.N_ov_r); % 50 x 390

S_dB = 20 * log((abs(SS) / samp.Pref)); # (Nf, Nt)

param_f1 = {"Size", [960, 720], "Move", [-500, 0], "Name", "FFT [ chirp ]"};
param_a1 = {"Xlabel", "Time [sec]", "YLabel", "Amplitude"};
param_a2 = {"Xlabel", "Frequency [Hz]", "YLabel", "Amplitude"};

figured(param_f1);
axes = subplots(2, 1);
plotd(axes(1), t1, x1);
plotd(axes(2), f1, X1);
set(axes(1), param_a1{:});
set(axes(2), param_a2{:});

param_fb = {"Size", [960, 720], "Name", "Spectrogram [ chirp ]"};
param_ab = {"Xlabel", "Time [sec]", "Ylabel", "Frequency [Hz]"};

figured(param_fb);
subplots(param_ab);
imagesc(tt, ff, S_dB);
colorbar;
axis tight;

코드 해설

목적

  • spectrogram of chirp signal

입력

  • 스크립트 상단에서 정의한 파라미터/입력 데이터를 사용합니다.

출력

  • 콘솔 텍스트 출력

실행 흐름

  1. 초기화
  2. 핵심 연산
  3. 출력 및 저장

핵심 함수

  • axes
  • fmt
  • printf
  • abs
  • figured
  • plotd
  • set
  • subplots

실습 과제

  • 샘플링 주파수나 입력 주파수를 바꿔 스펙트럼 변화를 비교해보세요.
  • 질량/감쇠/강성 또는 전달함수 계수를 바꿔 응답 변화를 확인해보세요.
  • 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.

학습 팁

  • FFT 결과는 샘플링 주파수(fs)와 길이(nn) 설정에 민감하므로 먼저 축 정의를 확인하세요.

같은 카테고리 코드

이전 코드 main-02 다음 코드 main-03