main_03_cjw

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

ex-recv/03/03_cjw/main_03_cjw.m

코드 인덱스로 돌아가기

카테고리

Submission Archive

학습 소스 그룹

코드 길이

90

lines

작성자

-

날짜 정보 없음

패키지

none

pkg load 기준

전체 코드

전체 코드를 복사해서 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 출력

실행 흐름

  1. 6-2. 시간 그래프 그리기

핵심 함수/주제

zerosfigureplottitlexlabelylabelabscalc_freq_power_sum

실습 과제

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

학습 팁

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

같은 카테고리의 다른 코드