기술에 대한 문의사항은 아래 메일로 연락주시기 바랍니다.


sales@selab.co.kr


아래 사용자 커뮤니티를 통해서도 기술 및 사용법 관련 정보를 얻을 수 있습니다.





사용자 커뮤니티

*배너를 클릭하시면 링크로 이동합니다.


ENVI 튜토리얼

(Youtube 에스이랩 인공지능연구실)

이상우의 IDL 블로그

IDL/ENVI/SARscape 사용자 포럼






사용자 커뮤니티 소식

*커뮤니티에 게시된 새 글 미리보기입니다.

링크를 클릭하시면 본 게시물로 이동합니다.


스펙트로그램 생성 TS_SPECTROGRAM 함수

2026-05-05
조회수 171

7dc7b3c31a92b.png

위 그림과 같이, 데이터를 일정 크기로 끊어서 FFT를 수행하고, 주파수 별 강도로 변환된 결과를 세워서 쭉 이어 붙인 것이 스펙트로그램입니다. 

이 일정 크기(한 마디)를 Window Size라고 하고, 각 Window 간에 중첩을 두어 진행하는데 이를 Overlap 이라고 합니다. 보통은 Window Size의 절반 크기를 Overlap으로 설정합니다. 

IDL에서 TS_SPECTROGRAM 함수를 사용하면(TS는 Time Series를 의미합니다), 간단하게 Spectrogram을 생성할 수 있습니다. 

----------

file="C:\mysong192.mp3"

ok = query_video(file, streams = strms) 

help, strms[0], /struct

** Structure <118eb7f0>, 9 tags, length=56, data length=52, refs=2:   

PID             LONG                 0   

TYPE            LONG                 2                    ; 2는 Audio (1은 Video)

RATE            FLOAT           44100.0               ; 1초에 44100번 샘플링(CD 샘플링 규격)

WIDTH           ULONG                0   

HEIGHT          ULONG                0   

CHANNELS        ULONG                2              ; 좌/우 2채널 스테레오

CODEC           STRING    'mp3float'   

LENGTH          DOUBLE           164.75429       ; 노래 길이(초)  

COUNT           ULONG          7265664     


위와 같은 MP3 음원을 읽습니다.

data = read_video(file, 0, /all)

help, data 

DATA            INT       = Array[2, 7264106] 


이 중 Left Channel 에 대한 스펙트로그램을 생성해 보겠습니다.

left = reform(data[0, *])

result1 = TS_SPECTROGRAM(left, window=4096, overlap=2048, sample_freq = 44100, freq=freq, time=time)

result2 = bytscl(result1 - max(result1), min=-90, max=0)

i=image(result2, time*2048, freq, rgb_table=75, title='TS_SPECTROGRAM', axis_style = 2, aspect_ratio=0)

두번째 줄에서 TS_SPECTROGRAM을 실행할 때, 앞에 그림으로 설명한 Window Size, Overlap 키워드를 사용합니다. 이렇게 해서 만들어지는 스펙트로그램의 X 축 눈금값(time 키워드), Y축 눈금값(freq 키워드)을 받아낼 수 있습니다. 스펙트로그램은 생성된 것입니다. 

세번째 줄은 화면에 표출하기 위한 Scaling 입니다. 이 부분은 표출하는 데이터의 종류, 표출 의도에 따라 달라질 수 있겠지만, 이 예제에서는 음향공학에서 최대 크기를 0dBFS(decibels relative to Full Scale )로 설정하는 관례를 따랐습니다(데이터에서 최대값을 뺐습니다). 16 bit CD 음질이 보통 -96dBFS까지 내려갈 수 있지만, 예제에서는 표출의 최소값을 -90dBFS로 설정하였습니다.  

네 번째 줄에서 X 축의 값을 time*2048 로 하였는데, 이는 스펙트로그램에서 한칸 한칸이 원 데이터에서 2048 만큼씩 진행(Window Size - Overlap)하는 것이기 때문입니다. 

a17c5412977aa.png

TS_SPECTROGRAM의 소스코드는 IDL 설치폴더/lib/ts_spectrogram.pro 입니다. 코드가 길지 않으므로, 스펙트로그램을 생성하는 과정을 한번 검토해 볼만 합니다. 

0 0