Octave Atelier

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

Code Detail

main_03_ksg

Signal Processing + Visualization 중심의 Octave 학습 예제

ex-recv/03/03_ksg/main_03_ksg.m

목록으로

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

카테고리

Submission Archive

submission

코드 길이

57

lines

작성자

-

날짜 정보 없음

패키지

none

pkg load

전체 코드

57 lines

################################################################################
% 주제3: 신호 생성, 주파수 변환, 파워 계산을 합니다.
% 2025-04-02 / 김상곤
################################################################################
clc; clear; close all

% 입력 변수 준비
T = 1;
t0 = 0;
dt = 1/1000;
N = T/dt;
Fs = 1/dt;
df = 1/T;
freq = 0:df:Fs-df;

time_array = t0:dt:T-dt; % size: 1 x N
freq_array = [50 70 110]; % size: 1 x 주파수 성분 수
ampl_array = [10 2 5]; % size: 1 x 주파수 성분 수
phaz_array = [0 0 0]; % size: 1 x 주파수 성분 수

% sinusoidal 신호 생성
signal = get_sinusoidal(time_array,freq_array,ampl_array,phaz_array); % size: 1 x length(time_array)

% hanning window 적용
signal_h = signal.*hanning(N).';  % size: 1 x length(time_array)

% 주파수 데이터로 변환
Spectrum = fft(signal,[],2)/N;  % size: 1 x length(freq)
Spectrum_h = fft(signal_h,[],2)/N; % size: 1 x length(freq)

% Auto Power Spectrum 계산
APS = Spectrum.*conj(Spectrum); % size: 1 x length(freq)
% Auto Power Spectrum 계산 (hanning window 적용)
APS_h = Spectrum_h.*conj(Spectrum_h); % size: 1 x length(freq)

% Power Sum
pwr_sum_time = calc_pwr_sum_time(signal); % 결과: 64.5
pwr_sum_freq = calc_pwr_sum_freq(Spectrum); % 결과: 64.5
% Power Sum (hanning window 적용)
pwr_sum_time_h = calc_pwr_sum_time(signal_h); % 결과: 24.163
pwr_sum_freq_h = calc_pwr_sum_freq(Spectrum_h); % 결과: 24.163

ratio_energy = sqrt(pwr_sum_time/pwr_sum_time_h); % 1.63 = hanning window의 Energy Coeff.
################################################################################
% Plotting
figure(1)
plot(time_array,signal,'k;orignal;','linewidth',3)
plot(time_array,signal_h,'g;windowed;','linewidth',2)
xlabel('Time [sec]'); ylabel('Acceleration [m/s^2]')
title('< 윈도우 적용 전후 시간 신호 비교 >')

figure(2)
plot(freq,APS,'k;orignal;','linewidth',3)
plot(freq,APS_h,'g;windowed;','linewidth',2)
xlabel('Frequency [Hz]'); ylabel('Auto Power Spectrum [(m/s^2)^2]')
title('< 윈도우 적용 전후 Auto Power Spectrum 비교 >')

코드 해설

목적

  • Signal Processing + Visualization 중심의 Octave 학습 예제

입력

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

출력

  • 그래프/figure 출력

실행 흐름

  1. 입력 변수 준비
  2. hanning window 적용
  3. 주파수 데이터로 변환
  4. Auto Power Spectrum 계산 (hanning window 적용)
  5. Power Sum (hanning window 적용)
  6. Plotting

핵심 함수

  • length
  • plot
  • calc_pwr_sum_freq
  • calc_pwr_sum_time
  • conj
  • fft
  • figure
  • title

실습 과제

  • 샘플링 주파수나 입력 주파수를 바꿔 스펙트럼 변화를 비교해보세요.
  • 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.
  • 핵심 함수 length의 인자를 한 가지 바꿔 결과 변화를 기록해보세요.

학습 팁

  • FFT 결과는 샘플링 주파수(fs)와 길이(nn) 설정에 민감하므로 먼저 축 정의를 확인하세요.
  • 그래프 비교 시 축 범위(XLim/YLim)와 단위를 먼저 고정하면 해석 오류를 줄일 수 있습니다.

같은 카테고리 코드

이전 코드 get_sinusoidal 다음 코드 startup