카테고리
Exercise 03exercise-03
코드와 해설을 함께 읽는 학습 문서
Code Detail
spectrogram of chirp signal
ex-03/main_splecgram.m
코드를 복사해 Octave에서 바로 실행할 수 있습니다.
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;