카테고리
Submission Archivesubmission
코드와 해설을 함께 읽는 학습 문서
Code Detail
Signal Processing + Statistics 중심의 Octave 학습 예제
ex-recv/03/03_scy/main_03_scy.m
코드를 복사해 Octave에서 바로 실행할 수 있습니다.
110 lines
# 신호 생성, 주파수 변환, 파워 계산
# 작성자 : 신찬영
# 작성날짜 : 25.04.07.
clc
clear
posi = [-00, 00, 1000, 500]; %figure 위치 선정
# 1 - 주파수 성분 m개가 포함된 sinusoidal 신호를 출력
[t, signal, fs] = get_signal(1000, 5, 4);
%sin_signal(fs, duration, m)
% Input :
% fs - 샘플링 주파수 (Hz)
% duration - 신호 길이 (s)
% m - sin 함수 개수
% Output :
% Signal - 중첩된 m개의 sin신호 / (1/fs : 1/fs : duration)
% fs - 샘플링 주파수 (Hz) / (-fs/2 : duration/fs : fs/2-duration/fs)
% t - 신호 길이 (s) / (1/fs : 1/fs : duration)
# 2 - 시간 그래프
figure(1,'position',(posi))
plot(t, signal);
grid on;
xlabel("Time[sec]")
ylabel("Acc[m/s^2]")
# 3 - 시간 신호에 대해 auto-power spectrum을 two-side로 그리기
N = length(signal);
X = fft(signal); %(1,N)
X2 = abs(X).^2 / N; %(1,N)
f = fs/N * (-N/2:N/2-1); % 주파수 축 생성 (양쪽 모두)
% 그래프 출력
figure(2,'position',(posi))
plot(f, X2);
grid on;
# 4 - 시간 도메인에서 power sum 계산
P_time = calc_powersum_time(signal);
printf("powersum(time) : %6.2f m^2/s^3 \n", P_time);
# 5 - 주파수 도메인에서 power sum 계산
P_freq = calc_powersum_freq(signal);
printf("powersum(freq) : %6.2f m^2/s^3 \n", P_freq);
# 6 - 시간 신호 hanning 적용 전후 결과 비교
N = length(signal);
w = hanning(N); %(N,1)
signal_hann = signal(:) .* w(:); % hanning 적용 / (N,1)
% hanning 적용 전후 시간신후 plotting
figure(3,'position',(posi))
plot(t, signal); hold on % 원본 신호
plot(t, signal_hann); % hanning 적용 신호
grid on;
hold off;
xlabel("Time[sec]")
ylabel("Acc[m/s^2]")
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% hanning 적용 전후 FFT결과 비교
N_hann = length(signal_hann);
X_hann = fft(signal_hann); % (N_hann,1)
X2_hann = abs(X).^2 / N_hann; % (1,N_hann)
f_hann = fs * (-N_hann/2:N_hann/2-1) / N_hann; % (1,N_hann) % 주파수 축 생성
% 그래프 출력
figure(2,'position',(posi));
plot(f_hann, X2,'linewidth',3); hold on % 원본신호
plot(f_hann, X2_hann,'linewidth',1); % hanning 적용 신호
hold off
xlabel('Frequency (Hz)');
ylabel('Power');
grid on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% hanning 적용 전후 power sum 비교 / correction factor 계산
P_hann = calc_powersum_time(signal_hann);
ACF = sqrt(P_time / P_hann) % Hanning correction factor
P_time_hann = calc_powersum_time(ACF * signal_hann);
P_freq_hann = calc_powersum_freq(ACF * signal_hann);
printf("powersum_hann(time) : %6.2f m^2/s^3 \n", P_time_hann);
printf("powersum)hann(freq) : %6.2f m^2/s^3 \n", P_freq_hann);
ex-recv/01/01-CJW-20250321/수치미분.m
ex-recv/01/01-CJW-20250321/main_cjw.m
ex-recv/01/01-JKH-20250319/main-my_diff.m
ex-recv/01/01-KSG-20250318/hw_1_kim-gpt.m
ex-recv/01/01-KSG-20250318/hw_1_kim.m
ex-recv/01/01-LSH-20250319/[Octave] HW#1.m
ex-recv/01/01-MJY-20250319/Octave_Moon_250319.m
ex-recv/01/01-PJM-20250319/Octave01_Park,jm_250319.m