카테고리
Package Drillpackage-drill
코드와 해설을 함께 읽는 학습 문서
Code Detail
Signal Processing + Visualization 중심의 Octave 학습 예제
ex-pkg/ex-signal.m
코드를 복사해 Octave에서 바로 실행할 수 있습니다.
57 lines
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;
ex-pkg/ex-cms.m
ex-pkg/ex-control.m
ex-pkg/ex-fmt.m
ex-pkg/ex-fstring.m
ex-pkg/ex-image.m
ex-pkg/ex-io.m
ex-pkg/ex-optim.m
ex-pkg/ex-statistics.m