일단 사용하려는 아날로그 이펙터는 Jan Ray 복각버전이다.
clean1.wav의 경우에는 일렉기타에서 바로 오디오인터페이스를 통해 녹음한 신호이다.(일반적으로 clean,dray라고 불림)
janray.wav의 경우에는 clean1.wav파일을 오디오인터페이스로 다시 출력하여 Jan Ray에 다시 시그널을 통과시켜 일종의 리앰핑을 한 신호이다.
잔래이 특유의 고급진 음색을 느낄수있다.
clean1은 Clean
janray는 JanRay
으로 주파수 대역에서 표기해보도록 해봤다. 코드는 접은글에
guitar_files = {
'DATA/clean1.wav'
'DATA/janray.wav'
};
% wav 읽기
[x, fs] = audioread(guitar_files{1});
[y, ~] = audioread(guitar_files{2});
% 길이 맞추기
N = min(length(x), length(y));
x = x(1:N);
y = y(1:N) ;
% FFT
X = fft(x);
Y = fft(y);
% H(f) 계산
eps = 1e-10;
H = Y ./ (X1 + eps);
% 주파수 축
f = (0:N-1)*(fs/N);
% magnitude (dB)
X_mag = 20*log10(abs(X) + 1e-12);
Y_mag = 20*log10(abs(Y) + 1e-12);
%plot (양수 주파수만)
half = floor(N/2);
% 아래과정을 진행함으로서 구간별 평균값을 표기해서 smooth한 그래프를 출력한다.
window_size = 200;
% H_smooth = sgolayfilt(H_mag,3,201);
X_smooth = movmean(X_mag, window_size);
Y_smooth = movmean(Y_mag, window_size);
figure
% clean (파란색)
plot(f(1:half), X_smooth(1:half), 'b')
hold on
% janray (빨강)
plot(f(1:half), Y_smooth(1:half), 'r', 'LineWidth', 2)
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
title('Frequency Response Comparison')
legend('Clean', 'JanRay')
grid on

필터링 된 신호는 원신호보다 bass는 크고 treble은 작은걸 볼수있다.
그리고 eq 분포가 약간 정돈된 느낌을 가지기도 한다.

이므로 주파수 대역에서 (janray)/(clean) 라는 간단한 수식으로 진행하려고 했다.
하지만 이럴경우 X(f)값이 0에 가깝거나 0 일때 H값이 매우 커지는 문제가 발생하기 때문에 아래 수식을 더 많이 이용한다고 한다.

해당 수식을 이용하여 H함수를 만들고 이를 다시 다른 clean 기타톤인 clean2.wav에 적용하여
새로운 파일 estimated_janray.wav를 만들어보았다.
들리다 싶이 estimated_janray.wav파일을 들어보면 조악하고 좋게 말해야 리버브 나쁘게 말하면 기분나쁜 피드백 소리가 강하게 나는걸 볼수있다.
'이직로그 > DSP' 카테고리의 다른 글
| Audio DSP: 일렉기타 이펙터 만들기 4 - 딜레이 페달 만들기 (0) | 2026.05.07 |
|---|---|
| Audio DSP: 일렉기타 이펙터 만들기 3 - 다양한 데이터 셋으로 전달함수 만들기 (1) | 2026.04.15 |
| Audio DSP 프로젝트: 이펙터 시뮬레이터 만들기 (0) | 2026.03.27 |
| Audio DSP: 일렉기타 이펙터 만들기 1 (1) | 2026.03.17 |
| USTB 스터디 3: 예제 분석하기 (0) | 2026.02.12 |