[originalAudio, Fs] = audioread('original.wav');
[noisyAudio, ~] = audioread('noisy.wav');
t = (0:length(originalAudio)-1)/Fs;
figure;
subplot(2,1,1);
plot(t, originalAudio);
xlabel('Time (s)');
ylabel('Amplitude');
title('Original Audio');
subplot(2,1,2);
plot(t, noisyAudio);
xlabel('Time (s)');
ylabel('Amplitude');
title('Noisy Audio');
N = length(originalAudio);
f = Fs*(0:(N/2))/N;
originalSpec = fft(originalAudio);
noisySpec = fft(noisyAudio);
figure;
subplot(2,1,1);
plot(f, abs(originalSpec(1:N/2+1)));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Original Audio Spectrum');
subplot(2,1,2);
plot(f, abs(noisySpec(1:N/2+1)));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Noisy Audio Spectrum');
fc1 = 2000;
fc2 = 500;
[b1, a1] = butter(6, fc1/(Fs/2), 'low');
[b2, a2] = butter(6, fc2/(Fs/2), 'low');
filteredAudio1 = filter(b1, a1, noisyAudio);
filteredAudio2 = filter(b2, a2, filteredAudio1);
figure;
plot(t, filteredAudio2);
xlabel('Time (s)');
ylabel('Amplitude');
title('Filtered Audio');
filteredSpec2 = fft(filteredAudio2);
figure;
plot(f, abs(filteredSpec2(1:N/2+1)));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Filtered Audio Spectrum');
figure;
subplot(2,1,1);
plot(t, originalAudio);
xlabel('Time (s)');
ylabel('Amplitude');
title('Original Audio');
subplot(2,1,2);
plot(t, filteredAudio2);
xlabel('Time (s)');
ylabel('Amplitude');
title('Filtered Audio (Closest to Original)');
sound(filteredAudio2, Fs);
I have the noisy file and the original file that is attached: I need to make the noisy file as close to the original as possible.