기본기 다지기

[기본이론] MIR 자문자답 공부 (1)

syveany 2026. 3. 27. 22:34

이번 학기에 파형을 접할 일이 자주 생겨서 또 자문자답 공부를 해보았다.

 

Q1: sr 가 무엇인가?

Sampling rate. 1초를 몇 개로 쪼개서 표현할 것인지를 의미한다.

보통 22050, 44100 등의 값을 사용하고 단위는 Hz이다.

 

    Q1-1: Hz는 무엇인가?

    1초에 몇 번 반복되는지를 의미한다. 1Hz는 1초에 1번 반복되고, 100Hz는 1초에 100번 반복되는 것이다.

    주파수에서의 Hz하고 sr에서의 Hz하고 의미는 조금 다른데 느낌은 비슷하다.

 

    Q1-2: 왜 하필이면 22050, 44100과 같은 특정 숫자를 사용하는가?

    * Nyquist theorem 만족해야하고 + ** 초기 CD 기술때

    * Nyquist theorem (얘는 별도의 글로 파야겠음. 내용이 너무 방대함)

    Nyquist theorem에 의하면 최고 주파수의 2배 이상으로 샘플링을 해야 원래 신호로 복원이 가능하다.

    인간이 들을 수 있는 주파수 범위가 20~20,000Hz이기 때문에 일단 최고 주파수인 20,000Hz의 2배인 40,000Hz는 넘어야 한다.

    ** 초기 CD 기술

    1970~80년도에 CD가 처음 나올 때 오디오를 저장할 기술이 부족해서 비디오 테이프에 오디오를 저장했다고 한다.

    당시 미국의 비디오 프레임이랑 유럽의 비디오 프레임 값이 달랐는데, 이 둘을 모두 만족시키는 sr값을 찾아야 했다.

    sr=(active line)×(field/sec)×(sample/line)이다. 

    그래서 나온 게 미국 NTSC: 1초 = 245 active line * 60 field, 유럽 PAL: 1초 = 294 active line * 50 field 이다.

    60 * 245 = 50 * 294 = 14700 인데, Nyquist theorem에 의해 40,000Hz가 넘어야하므로

    1 active line당 sample수를 3개로 해서 최종 sr를 60 * 245 * 3 = 50 * 294 *3 = 44100Hz로 만들었다! (신기하다)

 

 

Q2: torchaudio.load()가 무엇을 반환하는가?

아래와 같이 waveform하고 sr를 변환함

 

    Q2-1: 그럼 저 텐서는 무엇을 뜻하는가?

    진폭임!

    진폭정보가 2149632개 있다는거고, sr=22050이므로 이 오디오가 몇 초짜리인지 알 수 있음

    2149632 / 22050 해서 약 97.48초임!

 

 

Q3: 왜 rate가 높아질수록 음도 높아지는가?

주파수가 높아지는거라서!

아래 코드에서 rate가 2배가 되면 주파수가 2배가 되면서 음이 높아지는거임

 

 

Q4: 왜 torch.fft.fft(audio).abs().log()를 하면 대칭 형태로 나오는가? (⭐그냥 그런갑다 하고 넘어갔음⭐)

이게 양의 주파수와 음의 주파수 때문이라고 한다.

이해해보려고 해도 잘 안돼서 일단 '항상 대칭이므로 인덱스 길이의 반으로 잘라서 앞부분만 본다! 그런갑다!' 하고 넘어가려고 한다.

 

 

Q5: torch.hamming_window(1000)가 무엇인가?

길이가 1000인 부드럽게 줄어드는 가중치 배열이다.

Hamming window 수식은 아래와 같다.

양쪽 끝이 0.08이고 중간 부분이 1이다. 

아래 왼쪽은 hamming window를 시각화 한 것이고, 오른쪽은 hamming window를 적용하기 전후 파동 모양이다.

x축은 시간, y축은 진폭이다.

 

    Q5-1: 왜 이걸 쓰는가?

    신호의 끝과 끝이 부드럽게 이어지도록 하기 위해서 사용한다.

    FFT는 신호가 계속 반복된다고 가정하기 때문이다.

 

    Q5-2: 왜 FFT가 이 신호가 계속 반복된다고 가정하는 것인가?

    FFT가 신호를 sin하고 cos으로 쪼개는 변환이기 때문이다.

    sin과 cos 모두 무한 반복되는 파형이기 때문에 자연스럽게 신호도 무한 반복된다고 가정하게 된다.

 

    Q5-3: 왜 끝 차이가 많이 나면 가짜 주파수가 생기는 것인가?

    없다가 확 튀면 빠르게 변하는 신호 -> 오 고주파? 이렇게 해석한다.

    그래서 없던 고주파 성분이 생기는 것이다. Spectral leakage라고도 한다.

 

 

Q6: torch.fft.fft(windowed_audio)가 무엇인가?

Fourier Transform 적용하는 함수이다.

이렇게 적용하면 x축이 주파수, y축이 진폭이 된다.

아래 그래프는 Q5 그래프에 fft, abs, log를 적용한 그래프인데, 보면 고주파 부분이 낮게 나오는 것을 알 수 있다. 많이 깎였기 때문이다.

 

 

Q7: Frequency resolution은 어떻게 구하는가?

Frequency resolution = sr / window_size 하면 된다. 한 칸이 몇 Hz인지 계산할 수 있다.

window_size가 커지면 frequency resolution이 작아져서 주파수를 세밀하게 구분할 수 있게 된다.

그래프로도 볼 수 있다. 아래는 window_size가 1000, 2000일 때, 1000, 4000일 때 비교한 그래프이다.

 

주황색이 회색보다 좀 더 자세하고, 빨간색이 그보다 더 자세함을 알 수 있다.

긴 window를 사용해서 frequency resolution이 높아져서 peak가 더 날카롭다는 것을 알 수 있다.

 

    Q7-1: 그럼 window_size가 길면 길수록 좋은 것인가?

    아니다. 시간정보와 trade-off가 있다.

    window_size가 크면 주파수 정보를 자세하게 알 수 있지만 시점이 비교적 모호해지게 된다.

    window_size가 작으면 시점은 비교적 정확해지지만 주파수 정보가 모호해진다.

    그래서 task에 따라서 설정하는 것이 좋다.

    아래 그래프로 비교해볼 수 있다.

 

 

---

아 처음 접하는 내용이라 그런지 하나하나가 생소하다.

시간이 좀 걸려도 정복해나가자. 초장에 잡아야 한다.

화이팅!