Octave Atelier

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

Code Detail

main_02_ksg

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

ex-recv/02/02_ksg/main_02_ksg.m

목록으로

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

카테고리

Submission Archive

submission

코드 길이

78

lines

작성자

-

날짜 정보 없음

패키지

signal

pkg load

전체 코드

78 lines

################################################################################
% 데이터의 통계치(평균, 분산, 표준편차, rms)를 사용자정의함수와 내장함수 간 결과 비교
% 2025-03-26 / 김상곤
################################################################################
clc;clear;close all
pkg load signal


# 입력 변수 준비1 : csv파일 읽기 & 원하는 종류의 1년치 데이터 선정
filename = 'google_data_2024.csv';

data = read_custom_csv(filename); % 파일 불러오기

data_class = {'Close','High','Low','Open','Volume'}; % 데이터 분류
i_class = 1;
selected_data = data.(data_class{i_class}); % 데이터 분류 선택 (N, 1)

numeric_data = str2double(selected_data); % 문자열 > 숫자로 변환
filtered_data = numeric_data(~isnan(numeric_data)); % 숫자가 아닌 값 필터링 (N, 1)

# 입력 변수 준비2 : 30일 단위 분할 데이터 세트 만들기
i_start = 30; % 데이터 시작일
duration = 30; % 데이터 기간 선정 : 30일
data_sets = partitioning_data(filtered_data,i_start,duration); # (30, 220)
################################################################################


# 연산 실행1 : 1년치 데이터의 통계치 비교 (사용자정의함수 <-> 내장함수)
[m,v,s,r] = statistic_value(filtered_data); % User-defined Function

M = mean(filtered_data); % Built-in Function
V = std(filtered_data).^2;
S = std(filtered_data);
R = rms(filtered_data);

# 연산 실행2 : 30일 단위 데이터 세트 통계치
[m30,v30,s30,r30] = statistic_value(data_sets); # in (30, 220) out (1, 220) * 4
################################################################################


# 플로팅 변수 준비1 : 1년치 데이터 통계치 (사용자정의함수 <-> 내장함수)
value_UDF = [m,v,s,r]; % User-defined Function 사용
value_BIF = [M,V,S,R]; % Built-in Function 사용
value = [value_UDF; value_BIF].';
xtick_labels_1 = {'mean','variance','standard deviation','rms'};
legend_labels_1 = {'User-defined','Built-in'};
xlabel_1 = {'Statistic type'};
ylabel_1 = {'Statistics magnitude'};
title_1 = {'사용자정의함수 vs. 내장함수'};

# 플로팅 변수 준비2 : 30일 단위 데이터 세트 통계치
value_sets = [m30;v30;s30;r30];
legend_labels_2 = {'mean','variance','standard deviation','rms'};
xlabel_2 = {'Data sets index'};
ylabel_2 = {'Statistics magnitude'};
title_2 = {'직전 30일 데이터 통계치 분석'};
################################################################################

# 플로팅1 : 1년치 데이터 통계치 계산 결과 비교 (사용자정의함수 <-> 내장함수)
figure(1)
bar(1:size(value,1),value);
set(gca,'xticklabel',xtick_labels_1)
xlabel(xlabel_1)
ylabel(ylabel_1)
legend(legend_labels_1)
grid on
title(title_1)

# 플로팅2 : 30일 단위 데이터 세트 통계치
figure(2)
plot(1:size(value_sets,2),value_sets,'-o')
xlabel(xlabel_2)
ylabel(ylabel_2)
legend(legend_labels_2)
grid on
title(title_2)
################################################################################

코드 해설

목적

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

입력

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

출력

  • 그래프/figure 출력

실행 흐름

  1. 데이터의 통계치(평균, 분산, 표준편차, rms)를 사용자정의함수와 내장함수 간 결과 비교
  2. 입력 변수 준비1 : csv파일 읽기 & 원하는 종류의 1년치 데이터 선정
  3. 입력 변수 준비2 : 30일 단위 분할 데이터 세트 만들기
  4. 연산 실행1 : 1년치 데이터의 통계치 비교 (사용자정의함수 <-> 내장함수)
  5. 연산 실행2 : 30일 단위 데이터 세트 통계치
  6. 플로팅 변수 준비1 : 1년치 데이터 통계치 (사용자정의함수 <-> 내장함수)
  7. 플로팅 변수 준비2 : 30일 단위 데이터 세트 통계치
  8. 플로팅1 : 1년치 데이터 통계치 계산 결과 비교 (사용자정의함수 <-> 내장함수)
  9. 플로팅2 : 30일 단위 데이터 세트 통계치

핵심 함수

  • figure
  • legend
  • size
  • statistic_value
  • std
  • title
  • xlabel
  • ylabel

실습 과제

  • 샘플링 주파수나 입력 주파수를 바꿔 스펙트럼 변화를 비교해보세요.
  • 같은 연산을 내장 함수와 사용자 함수 두 방식으로 계산해 오차를 비교해보세요.
  • 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.

학습 팁

  • 그래프 비교 시 축 범위(XLim/YLim)와 단위를 먼저 고정하면 해석 오류를 줄일 수 있습니다.
  • 입력 파일 경로가 현재 작업 디렉터리 기준인지 먼저 확인하세요.

같은 카테고리 코드

이전 코드 read_csv_table 다음 코드 partitioning_data