Measuring transcription latency – for each correctly transcribed word, measure the time from when the word ends in the audio stream (x) to when that same word first appears in the partial transcript received by the client (y). Latency = y − x. Only words that are transcribed correctly are included in the calculation.The latency is measured using audio files balanced across:Clean speech – LibriSpeech excerptsReal-world calls – internal benchmark recordings (retail support, drive-thru, B2B triage)Stress clips – crafted edge-cases (rapid speaker turns, burst noise, long silences)This mix captures everyday usage and the extreme scenarios that typically break streaming systems.
Measuring transcription accuracy - We use word error rate (WER) for accuracy measurement. For comprehensive evaluation, we use datasets totaling more than 205 hours of audio. These datasets cover various domains, including meetings, broadcasts, and call centers, as well as a wide range of English accents. They also encompass various audio conditions, in terms of duration, signal-to-noise ratios, speech-to-silence ratios, and other factors.
이 포맷은 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~9와 A~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진수)로 표현할 수 있습니다.
요약
0x0080은 16진수 표기법으로, 십진수로는 128에 해당합니다.
16진수 표기는 메모리 주소, 바이트 값, 유니코드 코드 포인트 등을 다룰 때 유용하며, 컴퓨터 과학에서 자주 사용됩니다.
유니코드에서 0x0080은 ASCII 확장 영역에 해당하며, 이를 UTF-8 인코딩으로 표현할 때는 여러 바이트로 나타낼 수 있습니다.
2진수(바이너리)를 16진수(헥사)로 변환하는 방법은 비교적 간단합니다. 2진수는 0과 1의 조합으로 구성되고, 16진수는 0-9와 A-F의 조합으로 이루어져 있습니다. 변환 방법을 설명하고 예시를 통해 보여드리겠습니다.
1. 2진수에서 16진수로 변환하는 방법
2진수를 16진수로 변환하려면 4비트씩 묶어서 각 묶음을 16진수로 변환하면 됩니다.
16진수는 4비트로 표현할 수 있기 때문에, 2진수의 비트들을 4비트 그룹으로 나누면 쉽게 변환할 수 있습니다.
2. 변환 과정
4비트씩 그룹화:
2진수를 오른쪽부터 4비트씩 묶습니다. 만약 비트 수가 4의 배수가 아니라면 왼쪽에 0을 추가해서 4비트로 맞춥니다.
각 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
각 그룹을 대응되는 16진수로 변환하여 결합합니다.
3. 예시
예시 1: 2진수 11011011을 16진수로 변환
2진수를 4비트씩 그룹화합니다:
1101 1011
각 그룹을 16진수로 변환합니다:
1101 → D
1011 → B
따라서, 11011011의 16진수 표현은 0xDB입니다.
예시 2: 2진수 101010을 16진수로 변환
2진수를 4비트씩 그룹화합니다. 이 경우 6비트이므로, 앞에 00을 추가해 4의 배수로 맞춥니다:
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.
Fisher Corpus
Data Size: Part 1 consists of 984 hours, and the entire collection has over 2000 hours of English conversational telephone speech.
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.
National Speech Corpus (Part 1, Part 6)
Data Size: The entire corpus is approximately 1.2 TB in size (specific hours not provided).
Description: A large-scale Singapore English corpus for automatic speech recognition (ASR) research, designed to improve speech engines’ accuracy for locally accented English.
VCTK
Data Size: 44 Hours (Each of the 109 native English speakers reads about 400 sentences.)
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.
VoxPopuli (EN)
Data Size: 543 Hours (Part of a larger corpus with 1.8K hours of transcribed speeches in 16 languages.)
Description: A large-scale multilingual corpus with unlabelled and transcribed speech data in multiple languages, intended for unsupervised and semi-supervised learning.
Europarl-ASR (EN)
Data Size: 1300 hours of English-language annotated speech data.
Description: A corpus of parliamentary debates for ASR training and benchmarking, containing speeches and their official transcripts from the European Parliament.
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.
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.
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.
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.
음성 인식, 음성 합성, 오디오 신호 처리 등의 기술을 익히기 위해서는 신호에 대한 기본적인 지식과 컴퓨터 상에서 다룰 수 있는 능력이 있어야 합니다. 신호는 시간 영역과 주파수 영역에서 분석할 수 있으며 파이썬으로 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 samplingrate(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를 추가하여 amplituderesolution를 향상시킨다.
높은 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 이상)까지 증가한다.
제품에 들어가는 엔지니어링 마이크는 일반적으로 마이크와 그 어플리케이션에 내재된 문제로 복잡하다.
대부분의 마이크에 내재된 한 가지 문제는, 낮은 신호 대 잡음 비율(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 코딩 기술을 보유한 오디오 엔지니어는 거의 없다.