지난 시간 [수학과 함께하는 AI기초_02(소리데이터처리)] https://kimilguk.tistory.com/895 에 이어서
온라인강좌) EBS 이솦: https://www.ebssw.kr/lrnng/alctcr/alctcrDetailView.do?alctcrSn=56134
- 강좌명 : 수학과 함께하는 AI기초 #1 - 데이터의 표현과 가공
- 14개 챕터(장), 31개 강의로 이루어 져 있고, 지금 13-1장(챕터) ~ 이후를 하고 있습니다.
오늘은 소리데이터를 디지털 데이터로 생성하는 순서인 *표본화,*양자화,*부호화 에 대해서 알아보고,
이후 2개의 소리 합성하기하는 과정을 알아 보도록 하겠습니다.
- 아래 코드에서 *표본화,*양자화,*부호화 부분이 코딩에서는 어느 부분인지 확인 해 볼 수 있습니다.(아래)
# 소리데이터를 디지털 데이터로 생성:*표본화,*양자화,*부호화 후 2개의 소리 합성하기
import numpy as np
import matplotlib.pyplot as plt
import scipy.io as sio
from scipy.io.wavfile import write
import os
# 1초 데이터 생성을 위한 변경변수 생성(아래)
Fs = 44100.0 # 주기 약 16비트(65,536)인 CD음반 정도의 음
tlen = 1 # 재생시간
Ts = 1/Fs # 주기의 내부 샘플링 간격(시간)
t = np.arange(0, tlen, Ts) # [0,1]사이의 수를 44,100 으로 나눈 배열생성(시간)
# 1초차리 시그널 생성(아래)
sin_freq = 440 # 음워 데이터의 주파수 개수
src = 2*np.pi*sin_freq*t # X값 *표본화=440개의 라디안 단위를 44,100개의 라디안 배열로 변환
print(np.shape(src))
signal = np.sin(src) # y값 *양자화=위 44,100개의 라디안 값을 sin라디안으로 변환
print(np.shape(signal))
# 위 signal 데이터를 그래프로 표현
x_range = 200 # x축 0부터 200개 까지의 데이터범위만 출력
plt.plot(t[0:x_range], signal[0:x_range], color = 'blue')
# plt.show() # signal 소리 그래프 출력
# 위 데이터를 wav로 저장하기(아래)
# 신호/신호의절대값의최고값으로 나눈다.=정규화(0부터 1사이틔 값으로 변환)+계산하기 편리
scaled = np.int16(signal/np.max(np.abs(signal)) * 32767)
write('sin_signal.wav', 44100, scaled) # 실행코딩 *부호화=주기는 코드 상단의 Fs와 동일하게
os.system("start sin_signal.wav") # 윈도우에서 소리듣기
# 합성할 1초까리 노이즈 신호 만들기(아래)
noise = np.random.uniform(-1, 1, len(t)) # -1~1사이에 44,100개로 구성된 잡음 데이터 생성
scaled_noise = 0.3*noise # 소리 볼륨을 30% 줄인다.(numpy 배열 형태로 생성됨)
scaled = np.int16(scaled_noise/np.max(np.abs(scaled_noise)) * 32767)
write('sin_noise.wav', 44100, scaled) # 실행코딩 *부호화=주기는 코드 상단의 Fs와 동일하게
os.system("start sin_noise.wav") # 윈도우에서 소리듣기
# 위 sgnal 소리와 noise 소리를 합성하기(아래)
signal_n = signal + noise
print(np.max(np.absolute(signal_n)))
signal_n = signal + scaled_noise
print(np.max(np.absolute(signal_n)))
# 위 데이터를 wav로 저장하기(아래)
# 신호/신호의절대값의최고값으로 나눈다.=정규화(0부터 1사이틔 값으로 변환)+계산하기 편리
scaled = np.int16(signal_n/np.max(np.abs(signal_n)) * 32767)
write('sin_signal_n.wav', 44100, scaled) # 주기는 코드 상단의 Fs와 동일하게
os.system("start sin_signal_n.wav") # 윈도우에서 소리듣기
# 위 scaled_noise 데이터를 그래프로 표현
plt.plot(t[0:x_range], scaled_noise[0:x_range], color = 'red')
plt.show() # scaled_noise 소리 그래프 출력
# 위 signal_n 데이터를 그래프로 표현
plt.plot(t[0:x_range], signal_n[0:x_range], color = 'green')
plt.show() # scaled_n 함봇소리 그래프 : 잡음이 들어간 사인 그래프가 만들어 진다.
위 소스에서 첫번째 plt.show()함수로 표본화, 양자화를 거친 비프음과 잡음 2가지 사인(sin)파형을 볼수 있습니다.(아래)
- 위 2개의 소리를 합성한 sin(사인)그래프는 아래와 같습니다.(아래)
- write('sin_signal.wav', 44100, scaled) 이 실행코딩으로 파일로 저장 시 *부호화 가 진행되고, 윈도우에서 실행할 수 있다(아래)
- 위 소스에서 생성된 합성 파일입니다.(아래)
수학과 함께하는 AI기초_02(소리데이터처리) (2) | 2024.12.13 |
---|---|
수학과 함께하는 AI기초_01(이미지데이터처리) (3) | 2024.12.09 |
파이썬으로 웹 스크레핑과 반응형 대시보드 앱 만들기(강의용) (0) | 2024.05.15 |
파이썬으로 웹 스크레핑과 반응형 대시보드 앱 만들기 (1) | 2023.03.13 |
장고마무리_어깨힘 풀고 파이썬 (0) | 2019.06.01 |
댓글 영역