main_03_cjw
Signal Processing + Visualization 중심의 Octave 학습 예제
ex-recv/03/03_cjw/main_03_cjw.m
전체 코드
전체 코드를 복사해서 Octave에서 바로 실행할 수 있습니다.
%%주제3: 신호 생성, 주파수 변환, 파워 계산을 합니다.최정우.20250406
clc;clear;close all;
% 시간 벡터 생성
fs = 100; % 샘플링 주파수 [Hz]
dt = 1/fs; % 시간 간격
Record_length = 1; % 측정 시간 [s]
df = 1/Record_length; % 주파수 간격
N = Record_length / dt; % 샘플링 갯수
t = zeros(1,N); % [1x100]
t = dt*(0:N-1); % [1x100],0부터 Record_lengtt까지 dt간격으로 나눈 시간 벡터
f = zeros(1,N); % [1x100]
f = df*(0:N-1); % [1x100], 0부터 fs까지 df간격으로 나눈 주파수 벡터
% 주파수 성분 3개
frequencies = [10, 30, 40]; % [1x3],주파수 성분
amplitudes = [1, 2, 3]; % [1x3],각 주파수 성분에 대한 진폭
## 1. 주파수 성분 m개가 포함된 신호 생성 (m = 3)
signal = create_sine_signal(frequencies, amplitudes, t); %[1x100]
## 2. 시간 신호 그리기
figure(1)
plot(t, signal);
xlabel('시간 (s)');
ylabel('가속도 (m/s^2)');
title('시간 도메인에서의 가속도 신호');
grid on
## 3. 시간 신호에 대해 auto-power spectrum 을 two-side로 그려라.
% 푸리에 변환
fft_signal = zeros(1,N); %[1x100]
fft_signal = fft(signal); %[1x100]
auto_power_spectrum = zeros(1,N); %[1x100]
auto_power_spectrum = abs(fft_signal).^2 /N; %[1x100]
% two-side로 auto-power spectrum 그리기
figure(2)
plot(f, auto_power_spectrum);
xlabel('주파수 [Hz]');
ylabel('파워 [m²/s⁴]');
title('Two-side Auto power spectrum');
grid on
## 4. 시간 도메인에서 power sum 구하기
Time_power_sum = calc_time_power_sum(signal); % value: 700.0
## 5. 주파수 도메인에서 power sum 구하기
Freq_power_sum = calc_freq_power_sum(auto_power_spectrum); % value: 700.0
## 6. 시간 신호에 hanning 윈도우 적용, 1~5 과정 반복
% 6-1. Hanning 윈도우 적용한 신호 생성
signal_windowed = zeros(1,N); %[1x100]
signal_windowed = apply_hanning_window(signal); %[1x100]
hanning_factor = 2; % hanning 보정계수: 2
hanning_signal = zeros(1,N); %[1x100]
hanning_signal= hanning_factor * signal_windowed; %[1x100]
% 6-2. 시간 그래프 그리기
figure(3)
plot(t, hanning_signal);
xlabel('시간 (s)');
ylabel('가속도 (m/s^2)');
title('Hanning이 적용된 시간 신호');
grid on
% 6-3. auto-power spectrum 그리기
fft_signal_windowed = zeros(1,N); %[1x100]
fft_signal_windowed = fft(hanning_signal); %[1x100]
auto_power_spectrum_windowed = zeros(1,N); %[1x100]
auto_power_spectrum_windowed = abs(fft_signal_windowed).^2 / N; %[1x100]
% two-side auto-power spectrum 그리기
figure(4)
plot(f, auto_power_spectrum_windowed);
xlabel('주파수 [Hz]');
ylabel('파워 [m²/s⁴]');
title('Hanning이 적용된 two-side Auto power spectrum');
grid on
% 6-4. 시간 도메인에서 power sum 구하기
time_power_windowed_sum = calc_time_power_sum(hanning_signal);
%value:1039.5
% 6-5. 주파수 도메인에서 power sum 구하기
freq_power_windowed_sum = calc_freq_power_sum(auto_power_spectrum_windowed);
%value:1039.5 코드 해설
목적
Signal Processing + Visualization 중심의 Octave 학습 예제
입력
- 스크립트 상단에서 정의한 파라미터/입력 데이터를 사용합니다.
출력
- 그래프/figure 출력
실행 흐름
- 6-2. 시간 그래프 그리기
핵심 함수/주제
zerosfigureplottitlexlabelylabelabscalc_freq_power_sum
실습 과제
- 샘플링 주파수나 입력 주파수를 바꿔 스펙트럼 변화를 비교해보세요.
- 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.
- 핵심 함수 zeros의 인자를 한 가지 바꿔 결과 변화를 기록해보세요.
학습 팁
- FFT 결과는 샘플링 주파수(fs)와 길이(nn) 설정에 민감하므로 먼저 축 정의를 확인하세요.
- 그래프 비교 시 축 범위(XLim/YLim)와 단위를 먼저 고정하면 해석 오류를 줄일 수 있습니다.
같은 카테고리의 다른 코드
- 수치미분
ex-recv/01/01-CJW-20250321/수치미분.m - main_cjw
ex-recv/01/01-CJW-20250321/main_cjw.m - main-my_diff
ex-recv/01/01-JKH-20250319/main-my_diff.m - hw_1_kim-gpt
ex-recv/01/01-KSG-20250318/hw_1_kim-gpt.m - hw_1_kim
ex-recv/01/01-KSG-20250318/hw_1_kim.m - [Octave] HW#1
ex-recv/01/01-LSH-20250319/[Octave] HW#1.m - Octave_Moon_250319
ex-recv/01/01-MJY-20250319/Octave_Moon_250319.m - Octave01_Park,jm_250319
ex-recv/01/01-PJM-20250319/Octave01_Park,jm_250319.m - [Octave]250318_RYU_poly,dff
ex-recv/01/01-RJW-20250321/[Octave]250318_RYU_poly,dff.m - 과제1_신찬영연구원
ex-recv/01/01-SCY-20250319/과제1_신찬영연구원.m