# Compare GSt's filter with LS's one in a frequency response plot. # filename = path and file name of the respective IR sample .dat file # midi_cutoff = GSt's abstract filter cutoff value (range of 0 to 127) function res = plotall2(filename, filter_type, midi_resonance, midi_cutoff) f1 = midi_cutoff * 0.0075279; f2 = f1 - 1 + \ midi_resonance * midi_cutoff * (-5.5389e-5 + 1.1982e-7 * midi_cutoff); if (midi_resonance < 69) gain = 1.0; else gain = 1.598 - midi_resonance * 0.00877; endif if strcmp(filter_type, "lp") || strcmp(filter_type, "turbo") num = [f1 * f1, 0 ]; elseif strcmp(filter_type, "hp") num = [-1, 1, 1, -1]; elseif strcmp(filter_type, "bp") num = [f1, 0, -f1]; elseif strcmp(filter_type, "br") num = [1, -1, f1 * f1 - 1, 1]; else error("unknown filter type"); endif den = [1, f2, f1 * f1 - 1, -f2]; ## the lowpass turbo is simply two identical lowpass filters in ## series, with half gain if strcmp(filter_type, "turbo") num = conv(num, num) / 2; den = conv(den, den); endif [fresp, frequencies] = freqz(num * gain, den, 44100); frequencies = frequencies .* (22050 / pi); title_redesign = [ ";f=", num2str(f1 * 22050 / pi), "Hz;" ]; # and here the respective IR sample for comparison file = fopen(filename, "rb"); res = fscanf(file, "%d") / 2057773824; fclose(file); y = fft(res); y(1) = []; len = length(y) / 2; y = y(1:len); x = (1:len) / len * 22050; title_file = [ ";", filename, ";" ]; # finally plot and compare our designed filter against the original one axis([20, 23000]); xlabel("Frequency [Hz]"); ylabel("Attenuation [dB]"); semilogx(frequencies, 20 * log10(abs(fresp)), title_redesign, x, 20 * log10(abs(y)), title_file), grid; endfunction;