main_splecgram
spectrogram of chirp signal
ex-03/main_splecgram.m
전체 코드
전체 코드를 복사해서 Octave에서 바로 실행할 수 있습니다.
# 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
입력
- 스크립트 상단에서 정의한 파라미터/입력 데이터를 사용합니다.
출력
- 콘솔 텍스트 출력
실행 흐름
- 초기화
- 핵심 연산
- 출력 및 저장
핵심 함수/주제
axesfmtprintfabsfiguredplotdsetsubplots
실습 과제
- 샘플링 주파수나 입력 주파수를 바꿔 스펙트럼 변화를 비교해보세요.
- 질량/감쇠/강성 또는 전달함수 계수를 바꿔 응답 변화를 확인해보세요.
- 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.
학습 팁
- FFT 결과는 샘플링 주파수(fs)와 길이(nn) 설정에 민감하므로 먼저 축 정의를 확인하세요.