ex-signal
Signal Processing + Visualization 중심의 Octave 학습 예제
ex-pkg/ex-signal.m
전체 코드
전체 코드를 복사해서 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 출력
실행 흐름
- 컨볼루션 결과 플로팅
핵심 함수/주제
plottitlexlabelylabellegendsinabsbutter
실습 과제
- 샘플링 주파수나 입력 주파수를 바꿔 스펙트럼 변화를 비교해보세요.
- 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.
- 핵심 함수 plot의 인자를 한 가지 바꿔 결과 변화를 기록해보세요.
학습 팁
- FFT 결과는 샘플링 주파수(fs)와 길이(nn) 설정에 민감하므로 먼저 축 정의를 확인하세요.
- 그래프 비교 시 축 범위(XLim/YLim)와 단위를 먼저 고정하면 해석 오류를 줄일 수 있습니다.
- 입력 파일 경로가 현재 작업 디렉터리 기준인지 먼저 확인하세요.
같은 카테고리의 다른 코드
- ex-cms
ex-pkg/ex-cms.m - ex-control
ex-pkg/ex-control.m - ex-fmt
ex-pkg/ex-fmt.m - ex-fstring
ex-pkg/ex-fstring.m - ex-image
ex-pkg/ex-image.m - ex-io
ex-pkg/ex-io.m - ex-optim
ex-pkg/ex-optim.m - ex-statistics
ex-pkg/ex-statistics.m - ex-symbolic
ex-pkg/ex-symbolic.m - fmtf
ex-pkg/fmtf.m