main_03_ksg

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

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

코드 인덱스로 돌아가기

카테고리

Submission Archive

학습 소스 그룹

코드 길이

57

lines

작성자

-

날짜 정보 없음

패키지

none

pkg load 기준

전체 코드

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

################################################################################
% 주제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

핵심 함수/주제

lengthplotcalc_pwr_sum_freqcalc_pwr_sum_timeconjfftfiguretitle

실습 과제

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

학습 팁

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

같은 카테고리의 다른 코드