기록

[GPT가 알려주는] array spacing (2channel 선형 마이크 간격)을 물리적으로 변경할 수 없을 때 가청대역에서 beamforming 하는 방법 본문

잡동사니/GPT가 알려주는

[GPT가 알려주는] array spacing (2channel 선형 마이크 간격)을 물리적으로 변경할 수 없을 때 가청대역에서 beamforming 하는 방법

heylo 2025. 9. 18. 09:31

🎧 1. Beamforming이란?

  • 여러 개 마이크로 들어온 신호를 공간적으로 합성해서
    특정 방향(예: 정면, 90° 등)에서 오는 소리를 강조하고,
    다른 방향(간섭, 잡음)은 약화시키는 기술이에요.
  • 결과적으로:
    • “소리가 어느 방향에서 오는지 알 수 있다” (Direction of Arrival, DOA 추정)
    • 동시에 특정 방향 소리만 선명하게 들을 수 있다 (빔 포커싱)

👉 카메라로 치면 “줌렌즈 + 포커스” 같은 역할을 마이크에서 하는 거예요.


📐 2. 문제: 81 mm 간격, 20 Hz~20 kHz 전 대역

  • 가청 대역은 20 Hz ~ 20 kHz
  • 81 mm (0.081 m) 배열의 aliasing 임계 주파수:falias=3432×0.081≈2.1 kHzf_{\text{alias}} = \frac{343}{2 \times 0.081} \approx 2.1 \,\text{kHz}
  • 즉:
    • 2.1 kHz 이하 → 정상적으로 beamforming 가능
    • 2.1 kHz 이상 → grating lobes (가짜 방향) 생겨서 DOA 인식이 틀어짐

🎯 3. 그래서 생기는 딜레마

  • 사람 목소리의 핵심 정보는 300 Hz ~ 3.4 kHz → 여기서 이미 절반 이상 aliasing 걸림 😥
  • 치찰음(“ㅅ, ㅈ, ㅊ”) 같은 고주파 정보는 거의 다 aliasing 구간
  • **음악, 생활 소리(10~20 kHz)**는 더 심각

즉, 81 mm 배열로는 전 대역 beamforming 자체가 물리적으로 불가능합니다. (Nyquist 한계 때문)


🔧 4. 해결 아이디어 (간격 못 줄일 때)

  1. 대역 분할(band-splitting)
    • 0 ~ 2 kHz → beamforming 적용 (방향 인식 + 저주파 잡음 억제)
    • 2 kHz 이상 → 그냥 패스, 또는 잡음 억제 필터만 적용
    • 실제 WebRTC, Zoom, Teams 같은 솔루션도 이 방식 많이 씀
  2. 멀티채널/비선형 알고리즘
    • MUSIC, ESPRIT 같은 고해상도 알고리즘은 aliasing 영향이 덜함
    • 하지만 2ch (81 mm)로는 한계가 뚜렷
  3. 후처리(post-filtering)
    • 180° 같은 aliasing lobes를 “간섭 방향”으로 인위적으로 약화
    • Nonlinear beamformer(WebRTC도 이 구조)

✅ 결론

  • Beamforming = 특정 방향 소리만 뽑아내고, 그 방향이 어디인지 알 수 있는 기술
  • 20 Hz ~ 20 kHz 전 대역을 81 mm 간격에서 beamforming → 불가능 (Nyquist 위배)
  • 현실적 대안:
    • 저주파(≤ 2 kHz) beamforming
    • 고주파는 beamforming 포기, 다른 기법(post-filter/합성)으로 처리

👉 원하시면 제가 **“81 mm 2ch 어레이로 beamforming 시, 가청 대역을 저/중/고로 나눠서 어느 구간은 가능하고, 어느 구간은 불가능한지”**를 도표로 정리해드릴까요?

 

----

그 방법은 알아보고 있는 중이다...

높은 피아노 건반 소리 하나에 고주파(높은 소리) 만 있는 게 아니라

저주파 소리도 함께 있다고 하니

 

현재 81mm의 마이크 간격으로 beamforming을 적용할 수 있는 대역은

2kHz까지이다.

(나이퀴스트 정리에 의해)

(나이퀴스트 기준: 마이크 간격 <= 소리파장/2 )

 

따라서 2kHz보다 높은 대역은 2kHz이하의 대역으로

beamforming한 결과를 통해 추정하여 빔포밍 하는 것은 어떤지가 나의 생각이다.

 

현재 선형마이크 2channel이고 나이퀴스트 기준을 충족하지 않았기 때문에

180-degree ambiguity가 발생하는 것 같다.

 

근거는 아래 파이썬 beamforming 문서의

When d is not λ/2 부분이다.

 https://pysdr.org/content/doa.html

나는 스피커 이지만 위는 안테나의 예시이다.

 

 


🎯 상황 다시 정리

  • 마이크 2개, 간격은 81mm (절대 못 바꿈).
  • 듣고 싶은 건 사람이 들을 수 있는 모든 소리(20Hz~20kHz).
  • 그런데 81mm 간격이면 2kHz 이상부터는 원래 가짜 로브(grating lobe)가 튀어나와서 방향을 못 맞춤.
  • 그래도 전 대역을 “빔포밍”해야 함 → 방법은 알고리즘적으로 억지로 정리해야 함.

🗣️ 핵심 아이디어 (말로 쉽게)

  1. 저주파에서만 방향을 제대로 잡자.
    • 2kHz 이하에서는 아직 위상차가 안정적이니까, 여기서 소리가 들어오는 “진짜 방향”을 계산합니다.
    • 마치 나침반으로 방향을 먼저 맞추는 것과 같아요.
  2. 그 방향을 전 대역에 강제로 적용하자.
    • 5kHz, 10kHz, 15kHz 같은 고주파는 사실 간격이 너무 커서 방향을 스스로 못 잡아요.
    • 그래서 그냥 “저주파에서 얻은 방향”을 믿고, 고주파에도 똑같이 그쪽을 보게 만듭니다.
  3. 가짜 로브(잘못된 방향)들을 계산해서 지워주자.
    • 마이크 간격이 크면 “앞에서 오는 소리”랑 똑같은 효과가 “옆”이나 “뒤”에서 생겨버립니다.
    • 이 각도들을 미리 계산할 수 있어요.
    • 그래서 코드에서 “이 각도에서 오는 소리는 잡음이야!” 하고 눌러버리면 됩니다.
  4. 주파수가 높아질수록 빔을 일부러 넓게 펴자.
    • 고주파는 조금만 어긋나도 가짜 로브가 확 튀어나와요.
    • 그래서 고주파는 빔을 날카롭게 하지 말고 넓게 퍼뜨려서, 가짜 로브가 안 두드러지게 만듭니다.
    • 마치 손전등 불빛을 좁히면 그림자가 뚜렷해지지만, 넓히면 그림자가 덜 보이는 원리랑 비슷해요.
  5. 일관성 검사(Coherence check).
    • 두 마이크에 들어온 신호가 정말 “같은 소리”라면 파형이 서로 닮아있어야 해요.
    • 만약 닮지 않았다면(잡음이면) 그 주파수 대역은 그냥 약하게 만들어버립니다.

🔑 결론

  • 저주파에서 방향을 찾고 → 그 방향을 전 대역에 강제로 적용 → 동시에 가짜 로브가 생기는 각도는 눌러주고고주파는 빔을 넓혀서 안정화 → 마지막으로 신호 일관성 없는 건 약화.

이렇게 하면 81mm 2채널로도 “전 대역 빔포밍”을 흉내낼 수 있고,
“방향 구분력”도 유지할 수 있습니다.


👉 원하시면 제가 이걸 **“현실 예시”**로 들어서 설명해드릴게요.
예: 사람이 정면에서 “안녕하세요”라고 말하면 → 저주파에서 방향 잡고 → 10kHz 치찰음(“ㅅ” 소리)도 정면으로 묶여서 beamforming 되는 그림.

그렇게 사례로 설명해드릴까요?