"안녕, teacher 의성"이라는 문장을 UTF-8 인코딩byte-level BPE를 활용해 처리하는 과정을 설명해 볼게요.

1. UTF-8 인코딩 과정

UTF-8은 유니코드 문자를 바이트(byte)로 변환하는 방식입니다. 예를 들어, "안녕, teacher 의성" 문장을 UTF-8로 변환하면 각 글자가 바이트 시퀀스로 표현됩니다.

  • "안": EC 95 88
  • "녕": EB 85 95
  • ",": 2C (ASCII 문자)
  • " ": 20 (공백)
  • "t": 74
  • "e": 65
  • "a": 61
  • "c": 63
  • "h": 68
  • "e": 65
  • "r": 72
  • " ": 20 (공백)
  • "의": EC 9D 98
  • "성": EC 84 B1

이렇게 UTF-8 인코딩을 사용하면 각 문자와 기호가 바이트 시퀀스로 변환됩니다.

2. Byte-Level BPE 과정

Byte-Level BPE는 이 바이트 시퀀스를 이용해 자주 등장하는 바이트 쌍을 합치는 과정을 통해 토큰화를 수행합니다. 아래는 이를 통해 진행되는 과정입니다:

  1. 초기 토큰화:
    • 각 문자는 UTF-8 바이트로 변환된 상태에서 개별 바이트 단위로 나눠집니다.
    • 예를 들어, "안녕, teacher 의성"은 다음과 같이 표현됩니다.
      [EC, 95, 88, EB, 85, 95, 2C, 20, 74, 65, 61, 63, 68, 65, 72, 20, EC, 9D, 98, EC, 84, B1]
  2. 바이트 쌍 빈도 계산:
    • 각 인접한 바이트 쌍의 빈도를 계산합니다. 예를 들어, EC95, 9588 같은 인접한 쌍들의 빈도를 셉니다.
    • 예를 들어, EC 95가 가장 자주 나타나는 경우 이를 하나의 새로운 토큰으로 합칩니다.
  3. 쌍 합치기:
    • 가장 빈도가 높은 쌍을 합쳐 새로운 토큰을 만듭니다.
    • 예를 들어, EC 95가 합쳐지면, 이를 EC95라는 새로운 토큰으로 저장하고, 원래 시퀀스에서도 해당 부분을 대체합니다.
    • 이 과정을 반복하여 가장 자주 나타나는 쌍을 합쳐 나가면서 최종적으로 원하는 토큰 수에 도달할 때까지 계속 진행합니다.
  4. 최종 토큰화 결과:
    • 예를 들어, "안녕"과 같은 자주 등장하는 단어들은 하나의 토큰으로 합쳐질 수 있습니다.
    • Byte-Level BPE는 결국 자주 등장하는 바이트 쌍을 기준으로 텍스트를 효과적으로 압축한 토큰 리스트를 생성합니다.

요약

  • "안녕, teacher 의성" 문장은 UTF-8 인코딩을 통해 바이트 시퀀스로 변환됩니다.
  • Byte-Level BPE는 이 바이트 시퀀스를 사용해 자주 등장하는 바이트 쌍을 결합하여 토큰을 만듭니다.
  • 이 과정은 다양한 문자나 특수기호를 처리할 때 특히 유용하며, 언어 간 일관된 처리가 가능합니다.

EC 95 88UTF-8 인코딩 형식의 바이트 시퀀스를 의미합니다. 이 포맷은 각 유니코드 문자를 16진수로 표현한 바이트 시퀀스로 나타냅니다.

상세 설명

  • UTF-8은 유니코드 문자를 1바이트에서 최대 4바이트까지 가변 길이로 인코딩합니다.
  • EC 95 88은 16진수(헥사) 코드로, UTF-8에서 한글 문자 하나를 표현할 때 사용됩니다.
  • 예를 들어, EC 95 88은 유니코드 문자 U+C548에 해당하며, 이는 한글 "안"을 의미합니다.

해석 과정

  1. 유니코드 값 찾기:
    • UTF-8에서 EC 95 88이라는 16진수 코드를 유니코드 값으로 변환하면, 이는 U+C548입니다.
  2. 유니코드 맵핑:
    • U+C548은 유니코드에서 "안"이라는 한글 글자를 나타냅니다.
  3. UTF-8 바이트 시퀀스:
    • UTF-8은 유니코드 값 U+C548을 3바이트 시퀀스인 EC 95 88로 인코딩한 것입니다.

요약

  • EC 95 88UTF-8 바이트 시퀀스로, "안"이라는 한글을 표현합니다.
  • 이 포맷은 16진수(헥사) 표현이며, 한글과 같은 유니코드 문자를 UTF-8에서 인코딩할 때 사용됩니다.

256이라는 숫자는 바이트(byte)와 관련된 값으로, 8비트의 최대값을 의미합니다. UTF-8 인코딩과 바이트 기반 처리에서 256의 의미를 설명하면 다음과 같습니다:

1. 바이트와 256의 관계

  • 바이트(byte)는 8비트(bit)로 구성된 데이터 단위입니다.
  • 1바이트는 0부터 255까지의 값을 가질 수 있습니다.
    • 0에서 255까지 총 256개의 서로 다른 값을 표현할 수 있는 이유는, 8비트로 나타낼 수 있는 수의 조합이 2^8 = 256이기 때문입니다.

2. UTF-8과 바이트

  • UTF-8은 유니코드 문자를 1바이트에서 최대 4바이트로 인코딩합니다.
    • 예를 들어, 영어 알파벳이나 ASCII 문자들은 1바이트(0~127)로 표현됩니다.
    • 한글과 같은 유니코드 문자는 2바이트 이상이 필요하며, 이때 각 바이트는 0~255 사이의 값을 갖습니다.

3. Byte-Level BPE와 256

  • Byte-Level BPE에서 바이트 단위를 사용해 텍스트를 토큰화할 때, 각 바이트가 0~255 범위 내의 값을 가집니다.
  • 이를 통해 모든 가능한 바이트 조합을 다룰 수 있으며, 256개의 개별 바이트는 다양한 유니코드 문자의 조합을 표현할 수 있습니다.

요약

  • 256은 바이트가 표현할 수 있는 값의 개수를 나타내며, 0부터 255까지 총 256가지입니다.
  • UTF-8에서 각 바이트는 0~255 사이의 값을 갖고, 이를 통해 다양한 문자를 표현할 수 있습니다.
  • Byte-Level BPE에서는 이 256개의 바이트 값을 토큰화의 기본 단위로 사용하여, 유니코드 문자와 그 조합을 다루게 됩니다.

UTF-8의 이론적인 표현 가능 문자 수는 유니코드의 설계와 관련이 있습니다. 유니코드 자체는 전 세계의 모든 문자를 포함하기 위해 설계되었고, UTF-8은 이 유니코드 문자를 바이트 단위로 인코딩합니다. UTF-8이 이론적으로 표현할 수 있는 문자 수는 다음과 같이 계산할 수 있습니다:

1. UTF-8의 구조

UTF-8은 1바이트에서 4바이트까지 가변 길이 인코딩 방식을 사용합니다. 각 바이트는 특정한 비트 패턴을 통해 인코딩되며, 이 패턴은 유니코드 코드 포인트 범위에 따라 달라집니다.

  • 1바이트 (7비트 사용): 0x00~0x7F (ASCII와 동일, 128개)
  • 2바이트 (11비트 사용): 0x0080~0x07FF (약 2,048개)
  • 3바이트 (16비트 사용): 0x0800~0xFFFF (약 65,536개)
  • 4바이트 (21비트 사용): 0x010000~0x10FFFF (약 1,112,064개)

2. 유니코드 코드 포인트 범위

  • 유니코드의 코드 포인트U+0000에서 U+10FFFF까지 정의되어 있습니다.
  • 이 범위는 약 1,114,112개의 코드 포인트를 포함합니다. 그러나, 실제로 사용 가능한 문자 수는 이보다 적습니다.

3. 실제 표현 가능한 문자 수

  • 모든 코드 포인트가 문자를 나타내지는 않습니다. 일부 코드 포인트는 제어 문자특수 용도로 예약되어 있으며, 문자로 직접적으로 사용되지 않습니다.
  • 현재 유니코드 표준(유니코드 15.0 기준)에서는 약 149,186개의 문자가 정의되어 있습니다. 이 숫자는 유니코드의 다양한 언어 스크립트와 기호를 포함합니다.

4. 이론적인 UTF-8 표현 가능 수

  • 이론적으로 UTF-8은 0x0000에서 0x10FFFF까지의 유니코드 범위를 모두 표현할 수 있기 때문에, 약 1,114,112개의 코드 포인트를 지원합니다.
  • 그러나, 실제로 유니코드 표준에서 정의한 문자 수는 이보다 적고, 추가로 제어 문자와 기타 예약된 코드 포인트를 고려해야 합니다.

요약

  • 이론적으로 UTF-8은 약 1,114,112개의 코드 포인트를 표현할 수 있습니다.
  • 실제로 현재 유니코드에서 정의된 문자는 약 149,186개이며, 유니코드는 계속해서 확장되고 있습니다.
  • UTF-8은 유니코드의 모든 코드 포인트를 바이트 시퀀스로 인코딩할 수 있는 유연한 방식입니다.

0x0080과 같은 표현은 16진수(Hexadecimal)를 사용해 숫자를 나타내는 방식입니다. 이 표현은 컴퓨터 과학과 프로그래밍에서 많이 사용되며, 특히 메모리 주소, 유니코드 코드 포인트, 바이트 데이터 등을 다룰 때 유용합니다. 아래에 0x0080과 같은 표현에 대해 자세히 설명해 드릴게요.

1. 16진수(Hexadecimal) 표현

  • 16진수0~9A~F를 사용하는 숫자 체계입니다. 이는 기수 16의 체계로, 한 자리 수가 최대 16가지 값을 가질 수 있습니다.
  • 예를 들어:
    • 0x0 = 0 (십진수)
    • 0xA = 10 (십진수)
    • 0xF = 15 (십진수)
    • 0x10 = 16 (십진수)
  • 16진수 표현에서 앞에 붙는 0x는 이 값이 16진수임을 나타내는 표기입니다. 즉, 0x0080은 16진수 80을 의미하며, 십진수로는 128에 해당합니다.

2. 0x0080의 의미

  • 0x0080은 16진수로 표현된 숫자 128입니다.
    • 00 부분은 자리수를 맞추기 위한 것이며, 실제 값은 80입니다.
    • 이는 십진수로 변환하면 128이 됩니다.
  • 이 값은 컴퓨터 메모리에서 바이트를 표현하거나, 유니코드 코드 포인트, 색상 코드, 메모리 주소 등을 나타낼 때 자주 사용됩니다.

3. 유니코드와 16진수

  • 유니코드의 코드 포인트는 보통 16진수 형식으로 표현됩니다.
    • 예를 들어, 유니코드 문자 U+0080은 유니코드 표준에서 128번째 코드 포인트를 나타냅니다.
    • UTF-8 인코딩에서, 0x0080에 해당하는 문자는 여러 바이트로 표현될 수 있습니다.
  • 0x0080은 유니코드의 코드 포인트로 보면, ASCII 확장 영역에 해당합니다. ASCII는 0x0000부터 0x007F(0~127)까지 1바이트로 표현되며, 그 이후의 0x0080(128) 이상의 값들은 2바이트 이상을 사용해 표현됩니다.

4. 16진수 사용의 장점

  • 메모리 주소 표현: 메모리 주소와 바이트 데이터를 표현할 때 16진수를 사용하면, 메모리의 크기를 더 쉽게 계산하고 확인할 수 있습니다.
  • 컴퓨터 친화적: 컴퓨터 하드웨어는 이진수(0과 1)로 데이터를 처리하지만, 이를 사람이 읽기 쉽게 표현하기 위해 2진수16진수로 변환하여 사용합니다. 16진수는 4비트를 한 자리로 표현할 수 있어 간결합니다.
    • 예: 0x10 (16진수)은 0001 0000 (2진수)로 표현할 수 있습니다.

요약

  • 0x008016진수 표기법으로, 십진수로는 128에 해당합니다.
  • 16진수 표기는 메모리 주소, 바이트 값, 유니코드 코드 포인트 등을 다룰 때 유용하며, 컴퓨터 과학에서 자주 사용됩니다.
  • 유니코드에서 0x0080은 ASCII 확장 영역에 해당하며, 이를 UTF-8 인코딩으로 표현할 때는 여러 바이트로 나타낼 수 있습니다.

2진수(바이너리)를 16진수(헥사)로 변환하는 방법은 비교적 간단합니다. 2진수01의 조합으로 구성되고, 16진수0-9와 A-F의 조합으로 이루어져 있습니다. 변환 방법을 설명하고 예시를 통해 보여드리겠습니다.

1. 2진수에서 16진수로 변환하는 방법

  • 2진수를 16진수로 변환하려면 4비트씩 묶어서 각 묶음을 16진수로 변환하면 됩니다.
  • 16진수는 4비트로 표현할 수 있기 때문에, 2진수의 비트들을 4비트 그룹으로 나누면 쉽게 변환할 수 있습니다.

2. 변환 과정

  1. 4비트씩 그룹화:
    • 2진수를 오른쪽부터 4비트씩 묶습니다. 만약 비트 수가 4의 배수가 아니라면 왼쪽에 0을 추가해서 4비트로 맞춥니다.
  2. 각 4비트를 16진수로 변환:
    • 각 4비트 그룹은 다음과 같이 16진수로 변환할 수 있습니다:
2진수 16진수
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
  1. 각 그룹을 대응되는 16진수로 변환하여 결합합니다.

3. 예시

예시 1: 2진수 11011011을 16진수로 변환

  1. 2진수를 4비트씩 그룹화합니다:
    1101 1011
  2. 각 그룹을 16진수로 변환합니다:
    • 1101D
    • 1011B
  3. 따라서, 11011011의 16진수 표현은 0xDB입니다.

예시 2: 2진수 101010을 16진수로 변환

  1. 2진수를 4비트씩 그룹화합니다. 이 경우 6비트이므로, 앞에 00을 추가해 4의 배수로 맞춥니다:
    0010 1010
  2. 각 그룹을 16진수로 변환합니다:
    • 00102
    • 1010A
  3. 따라서, 101010의 16진수 표현은 0x2A입니다.

4. 요약

  • 2진수에서 16진수로 변환하려면 4비트씩 묶어서 각 묶음을 변환하면 됩니다.
  • 4비트는 16진수의 한 자리수에 해당하므로, 이를 사용해 효율적으로 변환할 수 있습니다.
  • 예시: 110110110xDB, 1010100x2A.

이 과정을 통해 2진수와 16진수 간의 변환을 쉽게 수행할 수 있습니다.

  1. OWSM v1, v2, and v3: Refer the paper
    • OWSM v1
      • AISHELL-1 [23],
      • CoVoST2 [24],
      • GigaSpeech [25],
      • LibriSpeech [26],
      • MuST-C [27],
      • SPGISpeech [28]
      • TEDLIUM3 [29].
    • OWSM v2
      • builds upon v1 and includes additional datasets:
      • GigaST [30]
      • Multilingual LibriSpeech [31]
      • WenetSpeech [32].
    • OWSM v3
      • extends v2 with even more datasets:
      • AIDATATANG [33],
      • AMI [34],
      • Babel [35],
      • Common Voice [36],
      • Fisher (Switchboard) [37],
      • Fisher Callhome Spanish [38],
      • FLEURS [39],
      • Googlei18n3 ,
      • KsponSpeech [40],
      • MagicData [41],
      • ReazonSpeech [42],
      • Russian Open STT [43],
      • VCTK [44],
      • VoxForge [45],
      • VoxPopuli [46],
      • WSJ [47].
  2. NeMo-Public dataset
    • Librispeech
    • Fisher Corpus
    • Switchboard-1 Dataset
    • WSJ-0 and WSJ-1
    • National Speech Corpus (Part 1, Part 6)
    • VCTK
    • VoxPopuli (EN)
    • Europarl-ASR (EN)
    • Multilingual Librispeech (MLS EN) - 2,000 hrs subset
    • Mozilla Common Voice (v8.0)
    • People's Speech - 12,000 hrs subset
  3. SpeechStaw
    • Librispeech
    • Common Voice v8.0
    • TED-LIUM v3
    • AMI
    • English Broadcast News2
    • WSJ0 and WSJ1

 

 

Dataset Name Data Size (Hours) Source Description
LibriSpeech 960 LibriSpeech A corpus of read English speech from LibriVox project, segmented and aligned, 16 kHz sampling rate.
Fisher Corpus Part 1: 984, Total: >2000 Fisher Corpus Part 1 Transcripts Spontaneous telephone conversations in English, recorded for linguistic research.
Switchboard-1 Dataset 260 Switchboard-1 English telephone conversations, collected under DARPA sponsorship.
WSJ-0 and WSJ-1 80 WSJ0 Read speech from Wall Street Journal news text, for large-vocabulary CSR systems.
National Speech Corpus Not specified, 1.2 TB National Speech Corpus Singapore English corpus for ASR research, to improve accuracy for locally accented English.
VCTK 44 (per speaker, 109 speakers) VCTK Text-to-speech research, audio of speakers with various accents reading different texts.
VoxPopuli (EN) 543 (part of 1.8K transcribed) VoxPopuli Multilingual corpus for unsupervised and semi-supervised learning.
Europarl-ASR (EN) 1300 Europarl-ASR Parliamentary debates for ASR training, with official transcripts from the European Parliament.
Multilingual LibriSpeech (MLS EN) 2,000 (subset of 44.5K) MLS EN Derived from LibriVox project audiobooks, for speech research in multiple languages.
Mozilla Common Voice (v8.0) 16,000 (ongoing project) Mozilla Common Voice Multilingual read speech corpus for building voice technologies, contributed by volunteers.
People's Speech 12,000 Not found English speech corpus for ASR model training.
TED-LIUM v3 452 TED-LIUM 3 Dataset Audio from TED Talks, including talks from TED-LIUM 2, with automatic transcripts.
AMI 100 AMI Corpus Meeting recordings with various synchronized signals including video and projector outputs.
English Broadcast News2 140 (plus 9000 hours of TV shows) English Broadcast News Speech Recognition by Humans and Machines Wide-band signals from various speakers, different background noises, and news topics, with lightly supervised transcripts.

  1. LibriSpeech
    • Data Size: 960 Hours
    • Source: LibriSpeech
    • Description: A corpus of read English speech derived from read audiobooks from the LibriVox project, carefully segmented and aligned, with a sampling rate of 16 kHz.
  2. Fisher Corpus
    • Data Size: Part 1 consists of 984 hours, and the entire collection has over 2000 hours of English conversational telephone speech.
    • Source: Fisher Corpus Part 1 Transcripts
    • Description: A collection of spontaneous telephone conversations in English between native speakers, recorded for linguistic research.
  3. Switchboard-1 Dataset
    • Data Size: 260 Hours
    • Source: Switchboard-1
    • Description: A corpus of English telephone conversations, collected under DARPA sponsorship and released by NIST and the LDC.
  4. WSJ-0 and WSJ-1
    • Data Size: 80 Hours
    • Source: WSJ0
    • Description: A corpus of read speech with texts drawn from Wall Street Journal news text, known as WSJ0 and WSJ1, used for research on large-vocabulary Continuous Speech Recognition (CSR) systems.
  5. National Speech Corpus (Part 1, Part 6)
    • Data Size: The entire corpus is approximately 1.2 TB in size (specific hours not provided).
    • Source: National Speech Corpus
    • Description: A large-scale Singapore English corpus for automatic speech recognition (ASR) research, designed to improve speech engines’ accuracy for locally accented English.
  6. VCTK
    • Data Size: 44 Hours (Each of the 109 native English speakers reads about 400 sentences.)
    • Source: VCTK
    • Description: A dataset designed for text-to-speech research, containing audio recordings of speakers with various accents reading newspaper excerpts, the Rainbow Passage, and an elicitation paragraph.
  7. VoxPopuli (EN)
    • Data Size: 543 Hours (Part of a larger corpus with 1.8K hours of transcribed speeches in 16 languages.)
    • Source: VoxPopuli
    • Description: A large-scale multilingual corpus with unlabelled and transcribed speech data in multiple languages, intended for unsupervised and semi-supervised learning.
  8. Europarl-ASR (EN)
    • Data Size: 1300 hours of English-language annotated speech data.
    • Source: Europarl-ASR
    • Description: A corpus of parliamentary debates for ASR training and benchmarking, containing speeches and their official transcripts from the European Parliament.
  9. Multilingual LibriSpeech (MLS EN) - 2,000 hrs subset
    • Data Size: 2,000 hours subset of a larger corpus with 44.5K hours of English.
    • Source: MLS EN
    • Description: A corpus derived from read audiobooks from the LibriVox project, suitable for speech research in multiple languages.
  10. Mozilla Common Voice (v8.0)
    • Data Size: 16,000 Hours (The size for v8.0 is not specified, but the project is ongoing with contributions from volunteers.)
    • Source: Mozilla Common Voice
    • Description: A multilingual corpus of read speech collected from volunteers across the globe for building voice-enabled technologies.
  11. *People's Speech *
    • Data Size: 12,000 Hours
    • Source: A specific link for the 12,000 hours subset was not found during the search.
    • Description: A large and diverse English speech corpus aimed at training ASR models.
  12. *TED-LIUM v3 *
    • Data Size: 452 hours of audio
    • Source: TED-LIUM 3 Dataset
    • Description: This audio dataset is derived from TED Talks and includes 2351 audio talks. It features aligned automatic transcripts and takes into account speech disfluencies such as repetitions and hesitations.
  13. AMI
    • Data Size: 100 hours of meeting recordings
    • Source: AMI Corpus
    • Description: The AMI Meeting Corpus is a multi-modal dataset that includes synchronized recordings using various signals. It features close-talking and far-field microphones, individual and room-view video cameras, and outputs from a slide projector and an electronic whiteboard.
  14. English Broadcast News2
    • Data Size: 140 hours of carefully transcribed data, with an additional 9000 hours of TV shows with closed captions used for training.
    • Source: English Broadcast News Speech Recognition by Humans and Machines
    • Description: This dataset is for speech recognition systems that deal with wide-band signals from a variety of speakers in different background noise conditions, speaking on various news topics. The data is similar to written English, with lightly supervised transcripts for training.

음성 데이터 관련해서 맨날 까먹고 헷갈리는 간단한 내용에 대해 메모합니다.

만약 이런 질문이 있다면, 어떤식으로 계산할 수 있을까요?

16kH, 16 Bit인 Wave 파일들 여러개의 총 용량이 500GB 일 때, 해당 Wav 파일들의 총 몇시간인가?

우선 단위에 대해서 정리를 해보겠습니다.

1) 연산 단위
1 KByte = 1024 Byte
1 MByte = 1024 KByte
1 GByte = 1024 MByte

2) 샘플링 레이트 (Sampling Rate)
1 KHz = 1024 Hz (초당 1024 Byte)
16 KHz = 16 * 1024 Hz (초당 16 * 1024 Byte)

3) 비트 레이트 (Bit Rate)
16 Bit = 2 Byte

이제 16kH, 16 Bit인 Wave 1초짜리 용량이 어떻게 되는지 계산해보면 다음과 같습니다.

2 Byte (16 bit) X 16 * 1024 Byte ( 초당 16 * 1024 Hz) = 32 Kb / 1 sec

따라서 1 sec, 1 min, 1 hour 데이터 용량은 다음과 같습니다.

32 KB | 1 sec
1.92 MB = 32 kb X 60 | 1 min
115.2 MB = 1.92 Mb X 60 | 1 hour

결론적으로 답은?!

500 X 1024 MByte / 115.2 Mb (1H) = 4444 H = 185 일

 

음성인식을 위해 일반적으로 16kHz, 16-bit 인 Wave 파일을 많이 다루니, 

대략적으로 음성데이터는 1초에 32 KB, 1분에 2MB, 그리고 1 시간에 115 MB 사이즈 정도 된다고 외우고 있으면 좋을 듯 합니다!

 

개요

 

음성 인식, 음성 합성, 오디오 신호 처리 등의 기술을 익히기 위해서는 신호에 대한 기본적인 지식과 컴퓨터 상에서 다룰 수 있는 능력이 있어야 합니다. 신호는 시간 영역과 주파수 영역에서 분석할 수 있으며 파이썬으로 Librosa 라이브러리를 사용하여 손쉽게 분석이 가능합니다.

 

오디오 파일 Load

 

오디오 파일은 일반적으로 wav, pcm 등의 형식으로 저장되며 sampling 개념을 사용하여 디지털화 됩니다. 오디오 데이터 처리를 위해 대표적으로 사용하는 Python 라이브러리는 librosa 입니다. librosa를 사용하여, 오디오 파일을 로드 해보겠습니다.

 

import librosa

audio_data = 'example.wav'

# 오디오 파일은 명시된 특정 샘플 속도 (sr)로 샘플링 된 후 NumPy 배열로 load 된다.
x = librosa.load(audio_data, sr=16000)

 

The sampling rate (sr) 는 sound의 초당 sample (data points) 수 입니다. 예를 들어 sampling frequency가 44kHz 인 경우 60 초 길이의 파일은 2,646,000(44000*60) 개의 샘플로 구성되어 있습니다.

 

 

시간 영역(TIme-domain) 에서 분석

 

일반적으로 음성/오디오 신호는 시간영역과 주파수영역에서 분석을 할 수 있습니다. 위에서 메모리 상에 load한 샘플링된 신호(데이터)를 시간영역에서 시간에 따른 파형의 진폭을 표현 해보겠습니다.

 

신호를 시각화하고 plotting 하기 위해 Python 시각화 대표 라이브러리인 Matplotlib 를 사용합니다.

 

import matplotlib.pyplot as plt
import librosa.display

plt.figure(figsize=(14, 5))

librosa.display.waveplot(x, sr=16000)

 

주파수 영역(Frequency-domain) 에서 분석

 

 

다음으로 주파수 영역에서 신호를 그려보겠습니다.

spectrogram을 사용하면 시간에 따라 주파수 스펙트럼이 어떻게 변화하는지 확인할 수 있습니다.

 

spectrogram : 시간에 따라 변화하는 신호의 주파수 스펙트럼의 크기를 시각적으로 표현한 것

 

librosa 라이브러리에 포함되어 있는 "Short Time Fourier Transform (STFT)" 를 사용하여 시간영역의 값을 주파수 영역에서 표현한 것입니다. STFT를 통해 구할 수 있는 값은 magnitude, phase로 나눌 수 있고, spectrogram은 magnitude만 가지고, 시간축에 대해서 표현하는 것입니다. abs()함수를 통해 magnitude를 구한후 db scale로 변경하여 다음과 같이 시간에 따른 스펙트럼의 크기를 확인할 수 있습니다.

 

X = librosa.stft(x)

X_mag = abs(X)

# energy levels(dB) 로 변경
Xdb = librosa.amplitude_to_db(X_mag)

plt.figure(figsize=(20, 5))
librosa.display.specshow(Xdb, sr=16000, x_axis='time', y_axis='hz')
plt.colorbar()

개요

 

이번 글에서는 16 비트 고정 소수점(16-bit fixed point), 24 비트 고정 소수점(24-bit fixed poin), 32 비트 부동 소수점(32-bit floating point) 오디오 파일의 차이에 대해 설명한다.

 

16-bit fixed point WAV File

 

기존의 16비트 WAV 파일은 압축되지 않은 오디오 샘플을 저장하며, 각 샘플들은 16 자리(이진수 = "Bit")의 이진수로 표현된다.

 

이 숫자들은 정수(소수점이 없는)이기 때문에 "Fixed-Point"이다. 이진 형식의 16비트 번호는 0에서 65535(2^16)까지의 정수를 나타낸다.


이 숫자 값은 signal amplitude에 해당하는 discrete voltage level을 나타낸다.

 

65535는 신호가 될 수 있는 최대 amplitude(loudest)을 나타내며, 가장 낮은 값은 파일의 noise floor를 나타내며, 가장 낮은 비트는 0과 1 사이에서 왔다갔다 한다. 65536 레벨이 있으므로, noise는 = (1/65536) 이다.

 

이 노이즈를 dB 형식으로 설정하면 the noise level 과 maximum levels은 각각 다음과 같다.

 

dBnoise = 20 x log (1/65536) = -96.3 dB 
dBmax = 20 x log (65536/65536) = 0 dB

16-bit WAV 파일로 표현할 수 있는, 최대 dynamic 범위는 다음과 같다.

 

(0 dB – (-96.3 dB)) = 96.3 dB 

따라서 16 비트 WAV 파일은 0dBFS에서 -96dBFS까지 오디오를 저장할 수 있다.

 

각 오디오 샘플은 하드디스크 또는 메모리에서 16 bit의 공간을 차지하며 48kHz sampling rate에서 mono-channel 16 bit, 48kHz 파일을 저장하려면 초당 16 x 48,000 = 768,000 비트가 필요하다.

 

 

24-bit fixed point WAV File

 

24-bit (fixed point) WAV 파일은 16 bit word를 확장하여 50 % 더 많은 bit를 추가하여 amplitude resolution를 향상시킨다.

 

 

높은 bit 일수록, 오디오 신호를 나누기 위한 더 많은 discrete voltage levels 이 있다. 이진 표기법의 24-bit 범위는 0 - 16,777,215 (2^24)이다.

 

 

또한, the noise level 과 maximum levels은 각각 다음과 같다.

 

dBnoise = 20 x log (1/16777216) = -144.5 dB

dBmax = 20 x log (16777216/16777216) = 0 dB

 

 24-bit (fixed point) 의 dynamic 범위는 다음과 같다.

 

(0 dB – (-144.5 dB)) = 144.5 dB

 

따라서 16 비트 WAV 파일은 0dBFS에서 -144.5dBFS까지 오디오를 저장할 수 있다.

 

16-bit 파일과 마찬가지로, 24-bit wav 파일이 감당할 수 있는 가장 큰 신호는, 0 dBFS이다. 

 

각 오디오 샘플은 하드디스크 또는 메모리에서 24 bit의 공간을 차지하며 48kHz sampling rate에서 mono-channel 24 bit, 48kHz 파일을 저장하려면 초당 24 x 48,000 = 1,152,000 비트가 필요하다.

 

16 비트 파일에 비해 저장 공간이 50 % 증가하고 동적 범위는 96dB에서 최대 144dB로 증가하여 성능이 향상된다. 현재 24 비트, 48kHz WAV 파일은 전문 오디오 커뮤니티에서 가장 널리 사용되는 파일이다.

 

32-bit floating point WAV File

 

fixed-point 파일 (16 비트 또는 24 비트)과 비교하여 32-bit float 파일은 부동 소수점 형식으로 숫자를 저장한다.

 

이러한 WAV 파일의 숫자는 소수점과 지수 (예 : "1456300"대신 "1.4563 x 106")를 사용하여 "scientific notation"으로 저장되므로, 고정 소수점과 근본적으로 다르다. floating point는 fixed-point 표현에 비해 훨씬 크고 작은 숫자를 표현할 수 있다.

 

32-bit float 단어의 형식과 인코딩은 직관적이지 않으므로 컴퓨터가 사람이 읽을 수있는 것이 아니라, 일반적인 수학 기능을 수행 할 수 있도록 최적화되었다.

 

[첫 번째 Bit]는 양수 또는 음수 값을 나타내고, [다음 8 Bit]는 지수(exponent)를 나타내고 [마지막 23 Bit]는 가수(mantissa)를 나타낸다.

 

The largest number which can be represented is ~3.4 x 1038, and the smallest number is ~1.2 x 10-38.

 

가장 큰 수는 ~3.4 x 10^38

가장 작은 수는 ~1.2 x 10^-38 로 표현 가능하다.

 

그러므로 32-bit float WAV로 표현할 수 있는 dB는 다음과 같다.

 

dBnoise = 20 x log (1.2 x 10-38) = -758 dB

dBmax = 20 x log (3.4 x 1038) = 770 dB

 

 

32-bit floating point 파일로 나타낼 수 있는 dynamic range는 1528dB 이다. 지구의 sound pressure의 가장 큰 차이는 무반향실(anechoic chamber)에서 거대한 충격파(massive shockwave)에 이르기까지 약 210dB 일 수 있으므로, 1528dB는 컴퓨터 파일에서 음향 사운드 진폭을 나타내는 데 필요한 것보다 훨씬 더 크다.

 

32-bit floating point wav file은 ultra-high-dynamic-range를 갖는다. 24 비트 또는 16 비트 파일과 비교할 때, 32-bit floating 파일은 최대 +770dBFS이고, noise level도 굉장히 큰 range를 갖는다.

 

 

 

 


32-bit float 파일의 각 오디오 샘플은 하드 디스크 또는 메모리에서 32 bit의 공간을 소비하며 48kHz sampling rate의 경우 32 비트, 48kHz 파일에 초당 32 x 48,000 = 1,536,000 bit가 필요하다. 따라서 24 bit 파일에 비해 33 % 더 많은 저장 공간을 확보하기 위해 캡처 된 dynamic range는 144dB에서 기본적으로 무한 (1500dB 이상)까지 증가한다. 

 

 

REFERENCE

 

[1] https://www.sounddevices.com/32-bit-float-files-explained

 

General challenges in incorporating microphones

 

제품에 들어가는 엔지니어링 마이크는 일반적으로 마이크와 그 어플리케이션에 내재된 문제로 복잡하다.

 

대부분의 마이크에 내재된 한 가지 문제는, 낮은 신호 대 잡음 비율(SNR)이다.

우리는 보통 오디오 전자장치로 90dB 이상의 SNR을 예상하지만, 일반적인 마이크는 60dB의 범위에서 SNR을 가진다.

 

이 문제를 복잡하게 만드는 것은 마이크가 종종 큰 dynamic range를 커버해야 한다는 것이다. 마이크에 30dB SPL만큼 조용한 소리가 들어갈 수도 있고, 1초 후에 2cm 거리에서 110dB SPL로 소리치는 인간의 목소리 또는 가까운 거리에서 130dB만큼 크게 울리는 드럼을 다룰 수 있다. 이 높은 dynamic range는 가장 큰 peak를 수용하지만, 과도한 소음을 발생시키지 않는 gain level을 달성하는 것이 어려울 수도 있다. 대부분의 마이크로폰에 필요한 high-level preamp 회로도 과도한 소음을 발생시킬 수 있다.

 

 

음원과 관련된 마이크의 위치는 스피커폰이나 디지털 카메라와 같은 어플리케이션에서는 예측할 수 없으며, 소스는 1cm 또는 100m까지 떨어져 있을 수 있다. 환경은 때때로 예측할 수 없다; 그것은 40dB SPL의 조용한 방일 수도 있고 100dB SPL의 붐비는 클럽일 수도 있다. 종종, 같은 브랜드와 모델이 수많은 어플리케이션에 걸쳐 지정될 수도 있다. 따라서 이러한 모든 조건과 그 이상을 수용해야 한다.

 

마이크를 위한 어플리케이션의 대부분은 휴대용 장치에 있으며, 이것은 추가적인 문제를 야기한다. 포터블 제품은 소형인 경향이 있으며, 폼 팩터가 설계자의 마이크로 배치 옵션을 제한하기 때문에 성능이 저하되는 경우가 많다. 이 제품들은 대부분 배터리로 구동되며, 한 자릿수 전압 공급만 수중에 있고 종종 몇 시간만 작동한다.

 

 

Specific challenges in incorporating microphones

 

위에서 언급한 일반적인 과제 외에도, 많은 특정 마이크 설계와 애플리케이션은 오디오 엔지니어에게도 도전 과제를 제시한다. 여기에는 다음이 포함된다.

 

- DC offset: 많은 마이크, 특히 MEMS와 콘덴서 유형은, 출력 시 정상 상태 DC 전압을 발생시키며, 이는 다운스트림 구성 요소에 손상을 줄 수 있기 때문에 제거해야 한다.

 

 

 

 

- Non-flat frequency response: 많은 마이크로폰은 높은 주파수 및/또는 낮은 주파수에서 상당한 롤오프 또는 부스트를 나타내며, 인클로저에 장착된 마이크는 큰 비선형성을 발생시키는 경향이 있으며, 그 중 다수는 미드레인지에 있으므로 쉽게 들을 수 있다.

 

 

 

- Output mismatch with multiple mics: 제조 분산으로 인해 마이크는 샘플 간 출력 전압에 상당한 차이를 보일 수 있다. 단일 마이크를 사용할 경우, 이것은 완제품의 성능 차이를 야기할 수 있다. 출력 불일치는 또한 소음/풍력 취소 및 다중 마이크에 의존하는 방향성 음향 수신과 같은 기술의 유효성을 감소시킨다.

 

- Environmental noise: 마이크로폰은 소음 환경에서 작동해야 하는 경우가 많으며, 원하는 소음에 미치는 영향이 최소화된 환경 소음을 제거해야 하는 경우가 많다.

 

- Essing and popping: 근거리 음성 애플리케이션은 downstream circuit에서 왜곡을 일으킬 수 있는 sebilant and plosive sounds (문자 B, D, G, K, P, T)의 높은 공기 속도를 처리할 수 있는 능력을 필요로 한다.

 

- Wind Noise: 대부분의 모바일 애플리케이션에서, 공기는 종종 마이크 바람이나 움직임 때문에 마이크를 가로질러 흐른다. 이것은 원하는 소리를 가릴 수 있는 저주파수 럼은 물론 중, 고주파수 노이즈를 발생시킨다.

 

- Interference from nearby speakers: 마이크로폰은 종종 스피커 시스템과 근접하거나 스피커 시스템과 연계하여 작동해야 하는데,이들의 소리는마이크로폰으로 새어나와 방해나 피드백을 만들어 낼 수 있다.

 

 

Solutions to problems encountered with microphones

 

위에서 인용한 각각의 문제는 신호 처리를 통해 해결할 수 있다. 대부분의 경우, 각각은 고유의 특정한 해결책을 필요로 한다.

 

DC offset

DC 오프셋은 오디오 범위에 영향을 미치지 않을 정도로 낮은 주파수로 설정된 고역 통과 필터를 사용하여 차단할 수 있다. 일반적으로 필터는 2차 순서(12dB/octave) 또는 steeper가 되며, 일반적으로 -3dB point가 10Hz 전후가 된다. 필터는 용도에 맞게 조정되어야 한다. deep bass response 이 문제가 아닐 경우 더 higher frequencies and gentler slopes 를 사용할 수 있다. 일부 base response을 희생하면서 마이크 핸들링 소음과 저주파수 rumble을 reject하기 위해 필터는 오디오 대역의 주파수(일반적으로 80Hz)로 설정할 수도 있다.

 

Non-flat frequency response

마이크 또는 마이크 인클로저에 내재된 주파수 응답 비선형성은 필터를 사용하여 제거할 수 있다. 저역 통과 및/또는 고역 통과 필터는 상승 또는 하강 베이스 또는 트레블 응답을 교정할 수 있다. 밴드패스 및 밴드 제거 필터는 인클로저의 음반사 및/또는 공명 때문에 발생하는 반응 피크 및 딥을 교정할 수 있다.

 

필터는 또한 많은 다른 목적에도 도움이 된다. 예를 들어, 음성 수신 및 인지도를 높이기 위해 미드레인지 부스트 필터(일반적으로 약 2kHz 중심 밴드패스 필터)를 사용하는 경우가 많다. 필터는 또한 주관적인 음질을 최적화하도록 조정될 수 있다.

 

또한 특정 가수의 특성에 맞는 베이스 축소 또는 트레블 응답과 같은 선택 가능한 사운드 모드를 만들 수 있다. 재생산 체인을 알면 필터는 소형 스피커를 사용할 때 베이스 응답을 줄이는 등 재생 장치의 기능에 맞게 마이크 응답을 최적화하도록 조정할 수 있다.

 

 

Output Level Mismatch

제조상의 불일치로 인한 마이크 출력 수준의 불일치는 신호 처리를 통해 보정 또는 자동 게인 제어의 두 가지 방법으로 해결할 수 있다.

 

공장 교정은 마이크를 포함하는 완제품에 가장 적합하다. 테스트 톤을 재생하고, 각 마이크의 출력을 측정하고, 해당 마이크에 대한 적절한 이득을 계산한 다음, 해당 마이크가 설치된 제품의 펌웨어에 해당 게인 설정을 로드하는 것을 포함한다. 현장 교정은 종종 별도로 구매하는 여러 대의 마이크를 사용하는 음향 보강 및 홈 씨어터 애플리케이션에 적합하다. 마이크를 함께 놓고, 테스트 톤을 재생하고, 각 마이크의 출력이 처리되어 모두 일치한다.

 

자동 게인 제어는 각 마이크에서 나오는 신호 레벨을 모니터링하고 모든 마이크가 원하는 평균 또는 피크 레벨을 생성하도록 게인을 조정한다. 특히 멀티채널 사운드 레코딩과 같이 수신할 소리의 환경 및/또는 특성을 알 수 없는 애플리케이션에 적합하다.

 

다이나믹 레인지 관리 앞에서 설명한 것처럼 마이크와 그에 수반되는 전자제품이 전체 다이나믹 레인지를 포착하기 어려운 상황이 많다. 게인이 너무 높게 설정되면 예상치 못한 큰 소리가 왜곡을 일으킬 수 있다. 게인을 너무 낮게 설정하면 마이크에 연결된 아날로그-디지털 변환기(ADC)는 최대 비트 수를 사용할 수 없으므로 필요 이상으로 많은 노이즈를 발생시킨다.

 

 

 

동적 범위 관리를 위한 한 가지 해결책은 이전 섹션에서 설명한 자동 게인 제어다. 마이크로폰의 레벨은 모니터링되고 자동으로 조정되어 소음이 최소화될 수 있을 정도로 레벨이 높지만 0dBFS를 초과해서는 안 되며 따라서 클리핑이 발생하지 않는다.

 

관련 솔루션은 압축기/한계기로, 고정 신호 처리를 사용하여 음질과 녹음 품질을 최적화한다. 리미터에서 미리 결정된 임계값을 초과하는 신호는 레벨에서 감소되어 임계값을 초과하지 않거나, 임계값을 한 번 초과하면 상승 속도가 특정 비율로 감소하는데, 이는 보통 조절이 가능하다. 압축기는 약한 신호의 수준을 높이는 기능과 리미터와 결합한다. 이 조합은 ADC 과부하 위험성이 훨씬 적은 동적 범위를 가진 신호를 발생시킨다.

 

압축기/제한기를 사용하여 마이크가 집는 소리의 품질을 최적화할 수도 있으며, 예를 들어, 소음이 심한 환경에서 음성을 듣고 이해하는 데 도움이 되는 평균 신호 레벨을 생성할 수 있다. 마이크 신호 운하를 압축하면 자체 압축기/제한기 처리가 없는 소형 스피커와 같이 다운스트림 구성 요소에 대한 응력을 줄이고 출력을 최대화할 수 있다.

모든 압축기/제한기는 필터를 추가함으로써 주파수에 따라 달라질 수 있다. 예를 들어, 큰 베이스 소음을 제어해야 하지만 미드레인지 및 트레블 소리가 제어되지 않는 경우, 저역 통과 필터를 압축기/제한기보다 먼저 사용할 수 있으며, 압축기/제한기 출력은 고역 통과 필터링 및 비압축 신호와 재결합된다.

 

Noise / Hiss

소음과 소음은 낮은 SNR과 환경 소음을 발생시키는 경향이 있기 때문에 마이크의 일반적인 문제들이다. 이 소음은 주의를 산만하게 할 수 있다. 듣는 사람에게 귀찮은 이 문제를 완화하거나 제거하기 위해 소음 게이트를 사용할 수 있다. 소음 게이트는 일반적으로 레벨이 일정 수준 이하로 떨어질 때 오디오 신호를 음소거한다. 신호에 중요하거나 청각적인 소리가 없는 경우. 소음 게이트의 문턱값(신호가 음소거되는 아래의 신호 수준)은 불필요한 소리를 차단하거나 음소거 또는 과도한 소음을 허용하지 않도록 조정해야 한다.

 

 

 

 

압축기/제한기와 마찬가지로 소음 게이트는 필터로 신호 체인에 선행함으로써 주파수에 따라 달라질 수 있다. 예를 들어 기계류에서 발생하는 저주파 웅성거림이 소음 게이트를 부적절한 시간에 열어두기에 충분할 경우 저주파 구성요소는 소음 게이트의 수준 감지 입력에서 걸러낼 수 있으므로 게이트의 작동은 고주파 음에만 영향을 받는다.

 

Environmental and wind noise

많은 다른 마이크 신호 처리 기술은 시끄러운 환경 또는 바람 소음에서 원하는 소리를 쉽게 들을 수 있도록 한다. 이러한 기법에는 단순한 필터링부터 노이즈 취소, 고급 멀티 마이크로폰 어레이에 이르기까지 모든 것이 포함된다.

 

필터링은 예상되는 소음 유형을 거부하도록 조정할 수 있다. 예를 들어, 실외 애플리케이션(즉, 작용 캠)을 위한 마이크는 바람과 도로 소음의 저주파 성분을 줄이기 위해 고역 통과를 필터링할 수 있다. 의 범위가

원하는 소리는 상당히 좁다. 예를 들어 대부분 100Hz에서 3kHz까지의 범위인 인간의 음성이나 1kHz를 중심으로 한 대부분의 소닉 에너지를 가진 총성과 같이, 밴드 패스 필터를 사용하여 그 범위를 강조할 수 있다.

 

여러 대의 마이크를 사용하면 소음을 더 효과적으로 취소할 수 있다. 두 개의 마이크(두 번째 마이크로 더 멀리 떨어져 있는 피사체 근처에 위치한 기본 마이크)가 스피커폰에 사용될 때, 두 개의 음량 모두 동일한 음량으로 나타난다.

마이크는 감쇠될 수 있고, 따라서 원하는 소리의 상대적 수준을 증가시킬 수 있다.

 

마이크와 관련된 피사체의 위치가 알려지면, 복수의 마이크를 배열하면 피사체를 환경으로부터 분리하는 데 도움이 되는 방향 픽업 패턴을 생성할 수 있다. 소리는 약간 다른 시간에 배열의 다양한 마이크에 도달한다. 올패스 필터를 사용하여 배열의 특정 마이크에서 위상을 이동시킴으로써 특정 방향에서 도달하는 소리는 증폭되고 다른 방향에서 오는 소리는 감쇠된다.

 

Essing and popping

보컬 어플리케이션에서 Essing과 poping 하는 것은 일반적으로 두 가지 방법을 사용하여 최소화된다. 즉, 플롯과 시빌리언트 사운드가 내는 큰 피크를 줄이는 압축기/제한기와 성가신 주파수에서 출력을 줄이는 필터 또는 필터를 사용한다. 약 100Hz의 고역 통과 필터는 음성 품질에 큰 영향을 미치지 않고 "팝스"의 베이스 성분을 플롯 사운드로 줄일 수 있다. 2에서 밴드 제거 필터

3kHz 범위를 사용해 형성을 줄일 수 있다. 이 두 필터 모두 음질을 크게 줄이지 않고 효과를 극대화하도록 조정해야 한다.

 

Interference from speakers

확성기 앞에서 마이크를 사용해야 하는 경우, 스피커에서 나오는 소리의 픽업은 확성기 공급 신호가 알려진 경우(예: P.A. 시스템 또는 Bluetooth 스피커) 상당히 감소할 수 있다. 스피커에 공급되는 신호는 위상 역전된 다음 마이크에서 나오는 신호와 적절한 수준에서 결합되어 음향 에코 취소 기능을 만든다. 그런 다음 스피커에서 나오는 소리는 감쇠되거나 취소되므로 원하는 소리를 마이크가 집어드는 데 방해가 되지 않는다.

 

Difficulties in implementing microphone processing

최적의 성능을 위해 마이크를 사용하는 대부분의 어플리케이션은 위의 기법의 조합을 필요로 한다. 오디오 엔지니어에게 이러한 조합은 구현하기 어려울 수 있다.

 

아날로그 회로를 사용하여 여러 개의 마이크로 신호 처리 단계를 만드는 것은 대개 비현실적이다. 왜냐하면 아날로그 프로세싱의 여러 단계가 과도한 소음을 발생시키는 경향이 있기 때문이다. 회로의 개발과 튜닝은 너무 많은 시간이 소요되며, 결과 제품은 너무 비쌀 수 있기 때문이다.

 

디지털 신호 처리(DSP)는 이러한 문제를 해결할 수 있지만, 위에서 설명한 많은 기능들은 DSP 칩을 위한 주식 프로그래밍 인터페이스에서 사용할 수 없는 정교한 알고리즘을 필요로 하며, 구현하기 위해서는 상당한 DSP 코딩 스킬이 필요하다. 또한 이러한 처리 기법을 실행하는 데 필요한 정교한 알고리즘은 강력한 DSP 칩을 필요로 하며, 가급적 32비트 처리 능력을 갖추고 있어야 한다.

 

이러한 알고리즘을 실행하는 DSP 칩은 대부분의 경우 배터리 또는 에너지 효율적인 전원 공급 장치에서 저전압으로 작동할 수 있어야 한다. 일부 애플리케이션은 보안 및 건강 모니터링 장비, TV와 Amazon Echo 스마트 Bluetooth 스피커와 같은 자동차 및 가전 제품에 사용되는 음성 명령 시스템 등 DSP를 항상 실행해야 한다. 이러한 애플리케이션에서 제품의 핵심 오디오 프로세싱 구성 요소는 항상 켜져 있어야만 제품을 최대 전원으로 끌어올 수 있는 사용자의 트리거 단어를 감지하고 명령을 실행할 수 있다. 에너지 효율에 대한 우려 때문에, 전력 소비량을 매우 낮은 수준으로 유지하는 것이 바람직하다. 종종 단지 몇 밀리와트에 지나지 않는다.

 

 

마이크를 사용하는 제품의 설계와 튜닝은 DSP 프로그래밍에 사용되는 것과 상당히 다른 기술을 필요로 한다. 소수의 DSP 엔지니어만이 오디오 제품을 설계하고 성능을 최적화할 수 있는 엔지니어링 지식과 경험을 보유하고 있다. 그러나 DSP 코딩 기술을 보유한 오디오 엔지니어는 거의 없다.

 


 

[1] https://dspconcepts.com/sites/default/files/digital_microphone_processing_paper.pdf

 

+ Recent posts