main_03_cgh
Signal Processing + Control & Dynamics 중심의 Octave 학습 예제
ex-recv/03/03_cgh/main_03_cgh.m
전체 코드
전체 코드를 복사해서 Octave에서 바로 실행할 수 있습니다.
##주제3: 신호 생성, 주파수 변환, 파워 계산을 합니다.
clc;clear;
##1. 주파수 성분 m개가 포함된 sinusoidal 신호를 출력하는 함수를 작성하라.
#sum_signal = sum([signal1;signal2;signal3],1);
dt = 0.001;
end_time = 1 ;
Freq_Mat = [10, 40]; #주파수 성분 Array[Hz]
[time,sum_signal] = cal_my_sig(dt,end_time,Freq_Mat);
##2. 함수의 출력이 가속도 물리량으로 가정하고 시간 그래프를 그려라.
figure(1)
plot(time,sum_signal)
ylabel('Acc[m/s^2]')
xlabel('Time[s]')
title('TimeSig')
xlim([0,1])
##3. 시간 신호에 대해 auto-power spectrum을 two-side로 그려라.
FFTY = fft(sum_signal);
fs = 1/dt;
df = fs/length(sum_signal);
freq_Ny = [0:df:ceil(fs/2)-df];
freq = [0:df:ceil(fs)-df];
AutoP_FFTY = FFTY.*conj(FFTY);
figure(2)
plot(freq,AutoP_FFTY)
xlabel('Freq[Hz]')
title('AutoPower')
##4. 시간 도메인에서 power sum을 구하라. (함수 작성)
T_D_PoS = cal_Time_Psum(sum_signal);
printf("Time power sum : %.2f \n",T_D_PoS);
##5. 주파수 도메인에서 power sum을 구하고 (함수 작성) 값을 비교하라.
F_D_PoS=cal_Freq_Psum(sum_signal);
printf("Freq power sum : %.2f \n",F_D_PoS);
################################################################################
##6. 시간 신호에 hanning 윈도우를 적용하고 직전 과정을 반복하고 비교 결과를 주석에 남겨라.
h_sum_signal = sum_signal.*hanning(length(sum_signal))';
##6_2. 함수의 출력이 가속도 물리량으로 가정하고 시간 그래프를 그려라.
figure(3)
plot(time,h_sum_signal)
ylabel('Acc[m/s^2]')
xlabel('Time[s]')
xlim([time(1),time(end)])
title('TimeSig_h')
##6_3. 시간 신호에 대해 auto-power spectrum을 two-side로 그려라.
h_FFTY = fft(h_sum_signal);
fs = 1/dt;
df = fs/length(h_sum_signal);
freq = [0:df:ceil(fs)-df];
h_AutoP_FFTY = h_FFTY.*conj(h_FFTY);
figure(4)
plot(freq,h_AutoP_FFTY)
ylabel('Acc[m/s^2]')
xlabel('Freq[Hz]')
title('AutoPower_h')
##6_4. 시간 도메인에서 power sum을 구하라. (함수 작성)
Enegy_Factor = sqrt(8/3); #Energy 보정계수
h_power_sum = cal_Time_Psum(h_sum_signal);
EP_h_power_sum = cal_Time_Psum(h_sum_signal)*Enegy_Factor^2;
printf("hanning_psum : %.2f \n",h_power_sum);
printf("C_hanning_psum : %.2f \n",EP_h_power_sum);#Compensated Power
##6_5. 주파수 도메인에서 power sum을 구하고 (함수 작성) 값을 비교하라.
h_AutoP_FFTY = h_FFTY.*conj(h_FFTY); #hann 적용 AutoPower
h_F_D_PoS=cal_Freq_Psum(h_sum_signal); #power 계산
EP_h_F_D_PoS = h_F_D_PoS*Enegy_Factor^2;# 에너지 보정계수 적용(Energy_Factor)
#hannning 적용시 Power sum 0.37, 미적용시 Power sum 1
printf("hann Freq power sum : %.2f \n",h_F_D_PoS);
#hanning Energy Compensatated 적용시 Power sum 1
printf("Compensated_h_F_psum : %.2f \n",EP_h_F_D_PoS);
코드 해설
목적
Signal Processing + Control & Dynamics 중심의 Octave 학습 예제
입력
- 스크립트 상단에서 정의한 파라미터/입력 데이터를 사용합니다.
출력
- 그래프/figure 출력
- 콘솔 텍스트 출력
실행 흐름
- #1. 주파수 성분 m개가 포함된 sinusoidal 신호를 출력하는 함수를 작성하라
- sum_signal = sum([signal1;signal2;signal3],1);
- #2. 함수의 출력이 가속도 물리량으로 가정하고 시간 그래프를 그려라
- #6. 시간 신호에 hanning 윈도우를 적용하고 직전 과정을 반복하고 비교 결과를 주석에 남겨라
- #6_2. 함수의 출력이 가속도 물리량으로 가정하고 시간 그래프를 그려라
핵심 함수/주제
printffigureplottitlexlabelcal_Time_Psumceilconj
실습 과제
- 샘플링 주파수나 입력 주파수를 바꿔 스펙트럼 변화를 비교해보세요.
- 질량/감쇠/강성 또는 전달함수 계수를 바꿔 응답 변화를 확인해보세요.
- 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.
학습 팁
- FFT 결과는 샘플링 주파수(fs)와 길이(nn) 설정에 민감하므로 먼저 축 정의를 확인하세요.
- 그래프 비교 시 축 범위(XLim/YLim)와 단위를 먼저 고정하면 해석 오류를 줄일 수 있습니다.
같은 카테고리의 다른 코드
- 수치미분
ex-recv/01/01-CJW-20250321/수치미분.m - main_cjw
ex-recv/01/01-CJW-20250321/main_cjw.m - main-my_diff
ex-recv/01/01-JKH-20250319/main-my_diff.m - hw_1_kim-gpt
ex-recv/01/01-KSG-20250318/hw_1_kim-gpt.m - hw_1_kim
ex-recv/01/01-KSG-20250318/hw_1_kim.m - [Octave] HW#1
ex-recv/01/01-LSH-20250319/[Octave] HW#1.m - Octave_Moon_250319
ex-recv/01/01-MJY-20250319/Octave_Moon_250319.m - Octave01_Park,jm_250319
ex-recv/01/01-PJM-20250319/Octave01_Park,jm_250319.m - [Octave]250318_RYU_poly,dff
ex-recv/01/01-RJW-20250321/[Octave]250318_RYU_poly,dff.m - 과제1_신찬영연구원
ex-recv/01/01-SCY-20250319/과제1_신찬영연구원.m