ex-signal

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

ex-pkg/ex-signal.m

코드 인덱스로 돌아가기

카테고리

Package Drill

학습 소스 그룹

코드 길이

57

lines

작성자

-

날짜 정보 없음

패키지

signal

pkg load 기준

전체 코드

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

pkg load signal

fs = 1000;  % 샘플링 주파수 (Hz)
t = 0:1/fs:1;  % 1초 동안의 시간 벡터
f1 = 5;  % 5Hz 신호
f2 = 50; % 50Hz 신호

% 두 개의 사인파를 합성한 신호
x = sin(2*pi*f1*t) + 0.5*sin(2*pi*f2*t);

% 신호 플로팅
figure;
plot(t, x);
title('5Hz + 50Hz 신호');
xlabel('시간 (초)');
ylabel('진폭');
grid on;

N = length(x);  % 신호 길이
X = fft(x);  % 푸리에 변환 수행
f = (0:N-1)*(fs/N);  % 주파수 축

% 주파수 도메인 플로팅
figure;
plot(f(1:N/2), abs(X(1:N/2))); % 양의 주파수 성분만 표시
title('FFT 결과');
xlabel('주파수 (Hz)');
ylabel('크기');
grid on;

fc = 10;  % 차단 주파수 10Hz
[b, a] = butter(4, fc/(fs/2), 'low');  % 4차 Butterworth 저역통과 필터 설계

x_filtered = filter(b, a, x);  % 필터 적용

% 필터링된 신호 플로팅
figure;
plot(t, x, 'b', t, x_filtered, 'r');
legend('원본 신호', '필터링된 신호');
title('저역통과 필터 적용 (10Hz)');
xlabel('시간 (초)');
ylabel('진폭');
grid on;

h = ones(1,10)/10;  % 이동 평균 필터 (길이 10)
y = conv(x, h, 'same');  % 컨볼루션 연산

% 컨볼루션 결과 플로팅
figure;
plot(t, x, 'b', t, y, 'r');
legend('원본 신호', '컨볼루션 결과');
title('이동 평균 필터 적용');
xlabel('시간 (초)');
ylabel('진폭');
grid on;

코드 해설

목적

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

입력

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

출력

  • 그래프/figure 출력

실행 흐름

  1. 컨볼루션 결과 플로팅

핵심 함수/주제

plottitlexlabelylabellegendsinabsbutter

실습 과제

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

학습 팁

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

같은 카테고리의 다른 코드