파이썬으로 액티브 노이즈캔슬링 원리 살펴보기
Inrto
함께 파이널 프로젝트를 진행한 팀원의 요청으로, 노이즈캔슬링의 기본 원리(상쇄)를 구현해보았다.
들어가기 전에
음성자료.. 영상자료와 비슷하잖아?
영상 자료와 음성 자료를 공부하다보니, 서로 비슷하다는 생각이 든다.
모두 강도(intensity) 를 숫자료 표기하며, 배열 형태의 자료이다.
(컴퓨터는 모든 신호를 수의 연산으로 처리하니 당연한 것)
그렇다면 자료의 처리 방법 역시 비슷할 것이다.
더하기, 곱하기, 나누기 등으로 연산하여 intensity를 조절하면 변형을 할 수 있는 것이다.
다른 점이라면 영상 자료의 경우 2차원 배열(+색상채널)로 intensity를 가진 pixel이 위치값을 가지게 된다는 것.
그리고 음성 자료의 경우 1차원 배열에서 intensity를 가진 원소가 시간흐름(sampling rate를 통해 계산되는) 중 어딘가에 위치값을 가진다는 점이다.
아래의 이미지를 통해 설명을 보충한다.

깃허브 (코드, 파일) 공유
https://github.com/whdrns2013/lab/tree/main/20230502_noise_canceling
액티브 노이즈 캔슬링 구현해보기
노이즈 캔슬링은 소음을 차단하는 것을 말하며, 그 방법에 따라 두 가지로 나뉜다.
-
액티브 노이즈 캔슬링
소음에 완전히 반대되는 위상의 소리를 만들어, 소음을 상쇄시킨다.
+1과 -1을 더하면 0이 되는 제로섬과 같다고 보면 된다. -
패시브 노이즈 캔슬링
소음에너지 자체를 물리적으로 차단하는 방법으로,
귀마개와 같이 소음을 차단하거나, 방음재나 흡음재를 통해 소음 에너지를 차단/분산시키는 것이 이에 해당된다.
본 포스트에서는 액티브 노이즈캔슬링의 원리를 실험해본다.
추론
음성 자료에서 intensity는 기본적으로 1 ~ -1 범위 내의 float 형으로 표시할 수 있다.
그렇다면 원래의 소리에 -1을 곱해서 동일한 강도면서 진동의 방향은 반대인 음원을 만들 수 있을 것이다.
그리고 원래의 소리와 -1을 곱한 소리를 더하면 0, 즉 아무 소리도 안날 것이다.

테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import soundfile
import IPython
import matplotlib.pyplot as plt
# 사운드파일 불러오기
soundfile_path = './iloveyou_kakao.mp3'
sound, sampling_rate = soundfile.read(soundfile_path)
# 역위상 음원 만들기
sound_reverse = sound * (-1)
# 원 음원과 역위상 음원 더하기
noise_canceling = sound + sound_reverse
# 그래프 보기
plt.figure(figsize = (20, 10))
plt.subplot(1, 3, 1)
plt.plot(range(len(sound)), sound)
plt.title('sound_original')
plt.subplot(1, 3, 2)
plt.plot(range(len(sound_reverse)), sound_reverse)
plt.title('sound_reverse')
plt.subplot(1, 3, 3)
plt.plot(range(len(noise_canceling)), noise_canceling)
plt.title('noise_canceling')
plt.show()
원 음원
역위상 음원
노이즈 캔슬(원 음원 + 역위상 음원)
그래프

결과
추론한대로 상쇄간섭 효과가 일어나 소리가 0이 되었다.
그래프에 대한 추가 설명
그런데.. 그래프를 얼핏 보니 원 음원과 역위상 음원이 비슷하게 생겼는데?
그리고 역위상 음원이 소리가 이상하게 날 것으로 예상되었는데, 원 음원과 동일하다!
이에 대해서는 추가적으로 더 공부해봐야겠지만, 일단 짐작으로는..
음성은 1과 -1 범위 내에서 진동한다는 특징이 있다.
즉 이는, -1을 곱한다고 하더라도 동일 intensity를 그저 음수로 표현했을 뿐,
여전히 동일한 파워의 진동을 (반대 방향으로)가지고 있다는 뜻이 된다.
그래서 들리는 역위상으로 만들어도 들리는 소리 자체는 동일한 게 아닐까 추측한다.
시각화 그래프는 언뜻 보면 비슷하게 생겼지만, 확대해서 보면 다르다.
(이하 참고)
전체 시간 동안의 그래프

5000ms ~ 5200ms 범위에서의 그래프

댓글 남기기