main_03_cgh

Signal Processing + Control & Dynamics 중심의 Octave 학습 예제

ex-recv/03/03_cgh/main_03_cgh.m

코드 인덱스로 돌아가기

카테고리

Submission Archive

학습 소스 그룹

코드 길이

86

lines

작성자

-

날짜 정보 없음

패키지

none

pkg load 기준

전체 코드

전체 코드를 복사해서 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. #1. 주파수 성분 m개가 포함된 sinusoidal 신호를 출력하는 함수를 작성하라
  2. sum_signal = sum([signal1;signal2;signal3],1);
  3. #2. 함수의 출력이 가속도 물리량으로 가정하고 시간 그래프를 그려라
  4. #6. 시간 신호에 hanning 윈도우를 적용하고 직전 과정을 반복하고 비교 결과를 주석에 남겨라
  5. #6_2. 함수의 출력이 가속도 물리량으로 가정하고 시간 그래프를 그려라

핵심 함수/주제

printffigureplottitlexlabelcal_Time_Psumceilconj

실습 과제

  • 샘플링 주파수나 입력 주파수를 바꿔 스펙트럼 변화를 비교해보세요.
  • 질량/감쇠/강성 또는 전달함수 계수를 바꿔 응답 변화를 확인해보세요.
  • 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.

학습 팁

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

같은 카테고리의 다른 코드