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 범위에서의 그래프


Reference

위키피디아 : 능동 소음 제어