728x90 반응형 SMALL Linguistic Intelligence/Audio Processing14 영점 교차율 (Zero-crossing rate) 영점 교차율 (Zero-crossing rate) 다양한 음성 및 오디오 파형을 보면 내용에 따라 부드러움 (smoothness)이 많이 다르다는 것을 알 수 있다. 예를 들어, 유성음은 무성음보다 더 부드럽다. 따라서, 부드러움은 신호의 유익한 특성이다. 신호의 부드러움을 측정하는 매우 간단한 방법은 해당 신호 세그먼트 내에서 제로 크로싱 수를 계산하는 것이다. 음성 신호는 천천히 진동한다. 예를 들어, 100Hz 신호는 초당 0을 100 교차하는 반면 무성 마찰음은 초당 3000을 교차할 수 있다. 창에서 신호에 대한 제로 크로싱 구현은 다음과 같다. # static example of zero-crossingfrom ipywidgets import *import IPython.dis.. 2024. 4. 24. 자기 상관 관계 및 공분산 자기 상관 관계 및 공분산 음성 신호 세그먼트는 큰 규모에서 구조를 식별하기 어렵지만 작은 규모에서는 신호가 연속적으로 보인다. 음성 신호는 일반적으로 서로 시간적으로 가까운 샘플링이 진폭이 유사한 구조를 갖는다. 이러한 구조를 종종 단기 시간 구조라고 합니다. 보다 구체적으로, 신호 샘플은 이전 및 다음 샘플과 상관된다. 이러한 구조는 공분산 (covariance)과 상관 관계 (correlation)로 측정된 통계에 있으며, 평균이 0인 변수 x와 y에 대해 다음과 같이 정의된다. import numpy as npimport matplotlib.pyplot as pltfrom scipy.io import wavfileimport scipy# read from storagefilen.. 2024. 4. 24. 음성 신호에서 스펙트로그램 해석 음성 신호에서 스펙트로그램 해석 스펙트로그램 (또는 로그 크기 스펙트로그램)은 음성 신호의 효과적인 시각화이다. 스펙트로그램을 보면 고조파 구조 (harmonic structure), 시간적 사건 (temporal events), 음형대 (formants) 등 음성 신호의 가장 중요한 속성 중 다수를 볼 수 있다. # Initializationimport matplotlib.pyplot as pltfrom scipy.io import wavfileimport scipyimport scipy.fftimport numpy as npimport librosaimport librosa.displayimport IPython.display as ipdspeechfile = 'sample... 2024. 4. 24. 단시간 푸리에 변환 (STFT) 단시간 푸리에 변환 (Short-Time Fourier Transform) 피치 (Pitch)는 높거나 낮은 음조가 무엇을 의미하는지 음조의 주파수에 대한 사람의 인식을 나타낸다. 신호의 푸리에 스펙트럼은 이러한 주파수 내용을 나타낸다. 이는 신호를 시각적으로 검사할 수 있기 때문에 스펙트럼을 작업하기에 직관적인 영역으로 만든다. 실제로, 이산 시간 신호를 사용하여 해당 시간-주파수 변환이 이산 푸리에 변환이 되도록 작업한다. 이는 길이 신호 X를 다음과 같이 N 계수의 복소수 값 주파수 영역 표현으로 매핑한다. 실수 값 입력의 경우 양수 및 음수 주파수 구성 요소는 서로의 복소 공액 (complex conjugates)이므로 고유한 정보 단위를 유지한다. 그러나 스펙트럼은 복소수 벡터이므로 시각화하기가.. 2024. 4. 23. Sound Energy 신호 에너지 신호 에너지란 일반적으로 신호의 분산 (variance)을 의미하며, 이는 신호 x의 평균이 평균인 평균 제곱 편차 (average squared deviation)이다. x를 진자 (pendulum)의 변위 (displacement)로 해석하면 분산은 에너지의 척도다. 진동 신호의 진폭은 진동 기간에 따라 달라지므로 일반적으로 순간 에너지 (instantaneous energy)를 추정하는 것은 의미가 없으며 일부 창에 대한 평균만 계산된다. 그러나 윈도우 함수는 평균 에너지를 감소시키고 (신호에 1보다 작은 양을 곱함) 절대 에너지 추정이 필요한 경우 수정해야 하는 편향 (bias)을 도입한다. 그러나 일반적으로 편향은 데이터 세트 전체에서 일관되며 무시할 수 있다. 일반적인 에너지 추정.. 2024. 4. 23. 윈도우 기법 (Windowing) 윈도우 기법 (Windowing) 음성 문장은 일련의 음소 (phonemes)다. 따라서, 음성 신호는 성격이 시변적 (time-variant)이다. 따라서 신호에서 정보를 추출하려면 신호를 충분히 짧은 세그먼트로 분할해야 한다. 즉, 경험적으로 말하면 각 세그먼트에는 하나의 음소만 포함된다. 즉, 음성 신호의 속성이 해당 세그먼트 내에서 시간 변화를 갖지 않을 만큼 충분히 짧은 세그먼트를 추출해야 한다. 윈도우 기법은 신호 처리의 고전적인 방법으로, 입력 신호를 시간적 세그먼트로 분할하는 것을 의미한다. 그러면 세그먼트의 경계가 실제 신호와 일치하지 않는 불연속성으로 표시된다. 신호의 통계적 속성에 대한 분할의 영향을 줄이기 위해 시간 세그먼트에 윈도우 기법을 적용한다. 윈도우 함수는 경계에서 0으로 .. 2024. 4. 17. 파형 (Waveform) 파형 (Waveform) 음성 신호는 공기를 통해 이동하는 압력 변화 ( pressure variations)로 정의되는 소리 신호다. 압력의 이러한 변화는 파동으로 설명될 수 있고 그에 따라 종종 음파 (sound waves)라고 불린다. 현재, 주로 디지털 시스템에서 그러한 파형의 분석과 처리는 항상 음향 음성 신호가 마이크에 의해 캡처되어 디지털 형태로 변환되었다고 가정할 것이다. 그런 다음 음성 신호는 시간 순간의 상대 기압을 나타내는 일련의 숫자 xn으로 표시다. 이 표현은 종종 PCM으로 약칭되는 펄스 부호 변조 (pulse code modulation)로 알려져 있다. 그런 다음 이 표현의 정확성은 두 가지 요인에 의해 지정된다. 샘플링 주파수 n와 n+1 사이의 시간 단계 xn의 정확성과 .. 2024. 3. 27. Mel-Frequency Cepstral Coefficients (MFCC) Mel-scale 사람 달팽이관 특성을 고려한 값을 Mel-scale이라고 한다. Mel-scale은 톤과 톤 사이의 단계가 사람이 인식하는 단계와 일치하도록 주파수를 매핑하는 척도 (scale)이다. 즉, 예를 들어 X에서 X+1 멜까지의 단계는 Y에서 Y+1 멜까지의 단계만큼 크게 들린다. 삼각형 중심이 멜 음계에서 동일한 거리 단계에 해당하는 주파수에 위치하도록 필터 뱅크 (filter bank)를 형성한다. def freq2mel(f): return 2595*np.log10(1 + (f/700))def mel2freq(m): return 700*(10**(m/2595) - 1)f = np.linspace(0,8000,1000)plt.plot(f/1000,freq2mel(f))plt.xlabel('.. 2024. 3. 20. 캡스트럼 (Cepstrum) 스펙트로그램 (Spectrogram) 스펙트로그램은 음성 신호의 많은 관련 특징을 효과적으로 시각화한다는 점에서 음성을 표현하는 데 유용하다. 특히, 시간 경과에 따른 이벤트, 기본 주파수의 변화, 스펙트럼 포락선 (spectral envelope)의 일부 특징을 관찰할 수 있다. 하지만 단점도 있다. 스펙트럼은 원하는 정보의 양에 비해 많은 수의 계수 (coefficients)를 가지고 있기 때문에 계수 수 측면에서 특별히 효율적인 표현이 아니다. 일반적으로 포먼트 (formant)의 위치와 진폭에 대한 정보를 원하는데, 이는 몇 개의 계수로 표현할 수 있다. 마찬가지로 기본 주파수는 하나의 정보에 불과하지만 수많은 주파수 성분에 숨겨져 있다. 캡스트럼 (Cepstrum) 예를 들어, 음성 신호의 많은.. 2024. 3. 20. 오디오 데이터 처리 Python 라이브러리 import import pandas as pd import numpy as np import matplotlib.pylab as plt import seaborn as sns import librosa import librosa.display import IPython.display as ipd from glob import glob from itertools import cycle sns.set_theme(style="white", palette=None) color_pal = plt.rcParams["axes.prop_cycle"].by_key()["color"] color_cycle = cycle(plt.rcParams["axes.prop_cycle"].by_key()["c.. 2024. 3. 6. 이전 1 2 다음 728x90 반응형 LIST