주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

melSpectrogram

멜 스펙트로그램

설명

S = melSpectrogram(audioIn,fs)는 샘플 레이트 fs에서 오디오 입력의 멜 스펙트로그램을 반환합니다. 이 함수는 입력 열을 개별 채널로 취급합니다.

예제

S = melSpectrogram(audioIn,fs,Name=Value)는 하나 이상의 이름-값 인수를 사용하여 옵션을 지정합니다.

예제

[S,F,T] = melSpectrogram(___)은 대역의 중심 주파수(단위: Hz)와 각 데이터 윈도우의 위치(단위: 초)를 반환합니다. 위치는 각 윈도우의 중심에 대응됩니다. 이 출력 구문은 위에 열거된 입력 구문과 함께 사용할 수 있습니다.

예제

melSpectrogram(___)은 현재 Figure의 곡면에 멜 스펙트로그램을 플로팅합니다.

예제

예제

모두 축소

디폴트 설정을 사용하여 전체 오디오 파일에 대한 멜 스펙트로그램을 계산합니다. 필터 뱅크의 대역통과 필터 개수와 멜 스펙트로그램의 프레임 개수를 출력합니다.

[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');

S = melSpectrogram(audioIn,fs);

[numBands,numFrames] = size(S);
fprintf("Number of bandpass filters in filterbank: %d\n",numBands)
Number of bandpass filters in filterbank: 32
fprintf("Number of frames in spectrogram: %d\n",numFrames)
Number of frames in spectrogram: 1551

멜 스펙트로그램을 플로팅합니다.

melSpectrogram(audioIn,fs)

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

1024개 점이 중첩된 2048개 점으로 구성된 주기적 핸 윈도우의 멜 스펙트럼을 계산합니다. 4096개 점 FFT를 사용하여 주파수 영역으로 변환합니다. 62.5Hz~8kHz 범위에 걸쳐 있는 절반이 중첩된 64개의 삼각 대역통과 필터를 통해 주파수 영역 표현을 전달합니다.

[audioIn,fs] = audioread('FunkyDrums-44p1-stereo-25secs.mp3');

S = melSpectrogram(audioIn,fs, ...
                   'Window',hann(2048,'periodic'), ...
                   'OverlapLength',1024, ...
                   'FFTLength',4096, ...
                   'NumBands',64, ...
                   'FrequencyRange',[62.5,8e3]);

이번에는 멜 스펙트로그램을 시각화할 수 있도록 출력 인수 없이 melSpectrogram을 다시 호출합니다. 입력 오디오는 다중채널 신호입니다. 출력 인수 없이 다중채널 입력값을 사용하여 melSpectrogram을 호출하면 첫 번째 채널만 플로팅됩니다.

melSpectrogram(audioIn,fs, ...
               'Window',hann(2048,'periodic'), ...
               'OverlapLength',1024, ...
               'FFTLength',4096, ...
               'NumBands',64, ...
               'FrequencyRange',[62.5,8e3])

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

melSpectrogram은 시간 단위로 윈도우가 적용된 오디오 신호에 주파수 영역 필터 뱅크를 적용합니다. 필터의 중심 주파수와 분석 윈도우에 대응하는 시점을 melSpectrogram의 두 번째 출력 인수와 세 번째 출력 인수로 구할 수 있습니다.

다중채널 오디오 신호의 멜 스펙트로그램, 필터 뱅크 중심 주파수, 분석 윈도우 시점을 구합니다. 중심 주파수와 시점을 사용하여 각 채널에 대한 멜 스펙트로그램을 플로팅합니다.

[audioIn,fs] = audioread('AudioArray-16-16-4channels-20secs.wav');

[S,cF,t] = melSpectrogram(audioIn,fs);

S = 10*log10(S+eps); % Convert to dB for plotting

for i = 1:size(S,3)
    figure(i)
    surf(t,cF,S(:,:,i),'EdgeColor','none');
    xlabel('Time (s)')
    ylabel('Frequency (Hz)')
    view([0,90])
    title(sprintf('Channel %d',i))
    axis([t(1) t(end) cF(1) cF(end)])
end

Figure contains an axes object. The axes object with title Channel 1, xlabel Time (s), ylabel Frequency (Hz) contains an object of type surface.

Figure contains an axes object. The axes object with title Channel 2, xlabel Time (s), ylabel Frequency (Hz) contains an object of type surface.

Figure contains an axes object. The axes object with title Channel 3, xlabel Time (s), ylabel Frequency (Hz) contains an object of type surface.

Figure contains an axes object. The axes object with title Channel 4, xlabel Time (s), ylabel Frequency (Hz) contains an object of type surface.

입력 인수

모두 축소

오디오 입력으로, 열 벡터 또는 행렬로 지정됩니다. 행렬로 지정된 경우 함수는 각 열을 독립적인 오디오 채널로 취급합니다.

데이터형: single | double

입력 샘플 레이트(단위: Hz)로, 양의 스칼라로 지정됩니다.

데이터형: single | double

이름-값 인수

모두 축소

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: FFTLength=1024

시간 영역에 적용되는 윈도우로, 실수형 벡터로 지정됩니다. 벡터의 요소 개수는 범위 [1,size(audioIn,1)] 내에 있어야 합니다. 또한 벡터의 요소 개수는 OverlapLength보다 커야 합니다.

데이터형: single | double

분석 윈도우 중첩 길이(단위: 샘플 수)로, [0, (numel(Window) - 1)] 범위의 정수로 지정됩니다.

데이터형: single | double

DFT를 계산하는 데 사용되는 지점의 개수로, Window 길이보다 크거나 같은 양의 정수로 지정됩니다. 지정되지 않은 경우, FFTLength는 기본적으로 Window의 길이로 지정됩니다.

데이터형: single | double

멜 대역통과 필터 개수로, 양의 정수로 지정됩니다.

데이터형: single | double

멜 스펙트로그램을 계산할 주파수 범위(단위: Hz)로, [0, fs/2] 범위의 단조 증가하는 값으로 구성된 요소를 2개 가진 행 벡터로 지정됩니다.

데이터형: single | double

멜 스펙트로그램 유형으로, "power" 또는 "magnitude"로 지정됩니다.

데이터형: char | string

윈도우 정규화 적용 여부로, true 또는 false로 지정됩니다. WindowNormalizationtrue로 설정되면 멜 스펙트로그램의 파워(또는 크기)가 정규화되어 시간 영역 Window의 파워(또는 크기)가 제거됩니다.

데이터형: char | string

필터 뱅크 정규화 유형으로,"bandwidth", "area" 또는 "none"으로 지정됩니다.

데이터형: char | string

멜 스타일로, "oshaughnessy" 또는 "slaney"로 지정됩니다.

데이터형: char | string

반환된 멜 스펙트로그램에 밑수가 10인 로그를 적용할지 여부로, true 또는 false로 지정됩니다.

데이터형: logical

출력 인수

모두 축소

멜 스펙트로그램으로, 열 벡터, 행렬 또는 3차원 배열로 반환됩니다. S의 차원은 L×M×N입니다. 여기서,

  • L은 각 멜 스펙트럼의 주파수 Bin 개수입니다. NumBandsfs에 따라 L이 결정됩니다.

  • M은 오디오 신호가 분할되는 프레임 개수입니다. size(audioIn,1), Window 길이, OverlapLength에 따라 M이 결정됩니다.

  • NN = size(audioIn,2)를 충족하는 채널 개수입니다.

후행 한원소 차원은 출력 S에서 제거됩니다.

데이터형: single | double

멜 대역통과 필터의 중심 주파수(단위: Hz)로, 길이가 size(S,1)인 행 벡터로 반환됩니다.

데이터형: single | double

각 오디오 분석 윈도우의 위치(단위: 초)로, 행 벡터 길이 size(S,2)로 반환됩니다. 위치는 각 윈도우의 중심에 대응됩니다.

데이터형: single | double

알고리즘

모두 축소

melSpectrogram 함수는 [1]에 설명된 것처럼 멜 스펙트로그램을 계산하는 일반적인 알고리즘을 따릅니다.

이 알고리즘에서 오디오 입력은 먼저 numel(Window)개 샘플의 프레임으로 버퍼링됩니다. 프레임은 OverlapLength개의 샘플만큼 서로 중첩됩니다. 지정된 Window가 각 프레임에 적용된 다음, 프레임은 FFTLength개의 점을 사용한 주파수 영역 표현으로 변환됩니다. 주파수 영역 표현은 SpectrumType으로 지정된 크기 또는 파워일 수 있습니다. WindowNormalizationtrue로 설정된 경우 스펙트럼은 윈도우로 정규화됩니다. 주파수 영역 표현의 각 프레임은 멜 필터 뱅크를 통과합니다. 멜 필터 뱅크에서 출력된 스펙트럼 값이 합산된 다음, 각 프레임이 요소를 NumBands개 가진 열 벡터로 변환되도록 채널이 결합됩니다.

참고 문헌

[1] Rabiner, Lawrence R., and Ronald W. Schafer. Theory and Applications of Digital Speech Processing. Upper Saddle River, NJ: Pearson, 2010.

[2] O'Shaughnessy, Douglas. Speech Communication: Human and Machine. Reading, MA: Addison-Wesley Publishing Company, 1987.

[3] Slaney, Malcolm. "Auditory Toolbox: A MATLAB Toolbox for Auditory Modeling Work." Technical Report, Version 2, Interval Research Corporation, 1998.

확장 기능

모두 확장

GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.

GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.

버전 내역

R2019a에 개발됨

모두 확장