일단 0의 방식을 진행하기 전에 우선 기본적으로 오버드라이브를 만들어보자
import numpy as np
import soundfile as sf
x, sr = sf.read("sine_wave.wav")
gain = 10
y = np.tanh(gain * x)
sf.write("sine_wave_gain10.wav", y, sr)
게인을 5, 10씩 줘서 다양한 outpupt 을 생성하였다. 이를 토대로 매트랩으로 스펙트럼 분석을 해보자
더보기
코드는 아래와 같다
sine_files = {
'DATA/sine wave.wav'
'DATA/sine wave gain5.wav'
'DATA/sine wave gain10.wav'
};
files = sine_files;
figure
for i = 1:length(files)
[x, fs] = audioread(files{i});
[P, f] = pspectrum(x,fs);
P_dB = 10*log10(P);
% 그래프 생성
subplot(length(files),1,i);
plot(f, P_dB)
xlabel('Frequency (Hz)')
ylabel('Power (dB)')
grid on
title(files{i}(6:end-4))
end
sine_files = {
'DATA/sine wave.wav'
'DATA/sine wave gain5.wav'
'DATA/sine wave gain10.wav'
};
figure
for i = 1:length(sine_files)
[x, fs] = audioread(sine_files{i});
if size(x,2) > 1
x = x(:,1);
end
t = (0:length(x)-1)/fs;
subplot(length(sine_files),1,i)
plot(t, x)
xlabel('Time (s)')
ylabel('Amplitude')
xlim([0 0.01])
ylim([-1.1 1.1])
title(sine_files{i}(6:end-4))
grid on
end

이런식으로 sin파가 사각파에 가까워지는걸 clipping이라고 한다.

원본은 440Hz 부근에서만 피크가 보이지만
gain 을 늘릴수록 배음이 커지느것을 볼수있다.
배음을 좀더 분석해보려고 peak를 분석해보았다.
더보기
sine_files = {
'DATA/sine wave.wav'
'DATA/sine wave gain5.wav'
'DATA/sine wave gain10.wav'
};
files = sine_files;
figure
for i = 1:length(files)
[x, fs] = audioread(files{i});
[P, f] = pspectrum(x,fs);
P_dB = 10*log10(P);
% peak 검출
[pks, locs] = findpeaks(P_dB, f, ...
'MinPeakHeight', max(P_dB)-40,... % 상위 40 dB만
'MinPeakDistance', 50); % 너무 가까운 peak 제거
fprintf('\n%s\n', files{i}(6:end-4));
fprintf('Peak Frequencies (Hz) | Power (dB)\n');
fprintf('-----------------------------------\n');
for k = 1:length(pks)
fprintf('%10.2f Hz | %8.2f dB\n', locs(k), pks(k));
end
% 그래프 생성
subplot(length(files),1,i);
plot(f, P_dB)
xlabel('Frequency (Hz)')
ylabel('Power (dB)')
grid on
title(files{i}(6:end-4))
end
sine wave
Peak Frequencies (Hz) | Power (dB)
-----------------------------------
441.54 Hz | -3.03 dB
sine wave gain5
Peak Frequencies (Hz) | Power (dB)
-----------------------------------
441.54 Hz | -1.08 dB
1319.23 Hz | -11.76 dB
2202.31 Hz | -18.31 dB
3080.00 Hz | -23.99 dB
3957.69 Hz | -29.51 dB
4840.77 Hz | -34.89 dB
5718.46 Hz | -40.29 dB
sine wave gain10
Peak Frequencies (Hz) | Power (dB)
-----------------------------------
441.54 Hz | -0.97 dB
1319.23 Hz | -10.78 dB
2202.31 Hz | -15.81 dB
3080.00 Hz | -19.51 dB
3957.69 Hz | -22.77 dB
4840.77 Hz | -25.72 dB
5718.46 Hz | -28.59 dB
6601.54 Hz | -31.39 dB
7479.23 Hz | -34.13 dB
8362.31 Hz | -36.91 dB
9240.00 Hz | -39.60 dB
두가지 분석 결과를 얻을 수 있다.
1. overdrive를 거치면 홀수 배음 생성된다.
2. gain값이 커질수록 배음의 진폭이 커진다.
'이직로그 > DSP' 카테고리의 다른 글
| Audio DSP: 일렉기타 이펙터 만들기 2 - wet, dry 신호 분석 (0) | 2026.03.27 |
|---|---|
| Audio DSP 프로젝트: 이펙터 시뮬레이터 만들기 (0) | 2026.03.27 |
| USTB 스터디 3: 예제 분석하기 (0) | 2026.02.12 |
| USTB 스터디 2 - 데이터셋 튜토리얼 따라가기 (0) | 2026.01.26 |
| USTB 스터디 1 (0) | 2026.01.26 |