clear x = randn(1, 65536); x = x / max(abs(x)); wavwrite(x, 8000, 16, 'noise.wav') !./sox -V noise.wav -r 44100 nup_rate.wav rate !./sox -V noise.wav -r 44100 nup_poly.wav polyphase !./sox -V noise.wav -r 44100 nup_resamp.wav resample x_rate = wavread('nup_rate.wav'); x_poly = wavread('nup_poly.wav'); x_resamp = wavread('nup_resamp.wav'); XR = 20*log10(abs(fft(2*hanning(65536).*x_rate(1:65536), 65536))); XP = 20*log10(abs(fft(2*hanning(65536).*x_poly(1:65536), 65536))); XS = 20*log10(abs(fft(2*hanning(65536).*x_resamp(1:65536), 65536))); w = [0:65535]/65536 * 44100; plot(w, XR, w, XP, w, XS) axis([0 22050 -100 80]) legend('Linear','Polyphase','Resample') l = line([4000 4000], [-100 80]); set(l, 'Color', 'g') st = text(5000, -50, '4 kHz: Upper Limit of Data'); l = line([44100 - 4000 44100 - 4000], [-100 80]); set(l, 'Color', 'g') title('Rate Convert From 8 kHz to 44.1 kHz Of Random Noise'); ylabel('Magnitude of Spectrum in dB') xlabel('Frequency in kHz'); xlabel('Frequency in Hz'); print -dppm -painters -r0 RandomNoiseUpsample.ppm plot(w, XR) axis([0 22050 -100 80]) xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Linear Interpolation, Rate Conversion From 8 kHz to 44.1 kHz Of Random Noise'); l = line([4000 4000], [-100 80]); set(l, 'Color', 'g') XM = max(XR); l = line([0 4000], [XM XM]); set(l, 'Color', 'g') l = line([0 4000], [XM - 3 XM - 3]); set(l, 'Color', 'g') set(l, 'Color', 'r') XM = max(XR(floor(5000/44100*65536):floor(20000/44100*65536))); l = line([0 22050], [XM XM]); delete(l) XM = max(XR(floor(10000/44100*65536):floor(20000/44100*65536))); l = line([0 22050], [XM XM]); set(l, 'Color', 'y') set(l, 'Color', 'c') axis([0 22050 -100 80]) l = line([4000 4000], [-100 80]); set(l, 'Color', 'g') print -dppm -painters -r0 RandomNoiseUpsampleLinear.ppm plot(w, XS) l = line([4000 4000], [-100 80]); set(l, 'Color', 'g') axis([0 22050 -100 80]) delete(l) l = line([4000 4000], [-100 80]); delete(l) l = line([4001 3990], [-100 80]); set(l, 'Color', 'g') delete(l) l = line([4000 4000], [-100 80]); delete(l) l = line([4000 4001], [-100 80]); set(l, 'Color', 'g') XM = max(XR); l = line([0 4000], [XM XM]); set(l, 'Color', 'g') l = line([0 4000], [XM - 3 XM - 3]); set(l, 'Color', 'r') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Bandlimited Interpolation (sox-12.16), Rate Conversion From 8 kHz to 44.1 kHz of Random Noise'); XM = max(XS(floor(10000/44100*65536):floor(20000/44100*65536))); l = line([0 22050], [XM XM]); set(l, 'Color', 'c') print -dppm -painters -r0 RandomNoiseUpsampleResample.ppm plot(w, XP) l = line([4000 4001], [-100 80]); set(l, 'Color', 'g') axis([0 22050 -100 80]) XM = max(XP); l = line([0 4000], [XM XM]); set(l, 'Color', 'g') l = line([0 4000], [XM - 3 XM - 3]); set(l, 'Color', 'r') XM = max(XP(floor(10000/44100*65536):floor(20000/44100*65536))); l = line([0 22050], [XM XM]); set(l, 'Color', 'c') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Polyphase Interpolation, Rate Conversion From 8 kHz to 44.1 kHz of Random Noise'); print -dppm -painters -r0 RandomNoiseUpsamplePolyphase.ppm t = [0:65535]/8000; x = sin(2*pi*500*t) + sin(2*pi*1000*t) + sin(2*pi*1500*t) + sin(2*pi*2000*t) + sin(2*pi*2500*t) + sin(2*pi*3000*t) + sin(2*pi*3500*t) + sin(2*pi*3900*t); x = x / max(abs(x)); wavwrite(x, 8000, 16, 'sine.wav'); x = wavread('sine.wav'); X = 20*log10(abs(fft(2*hanning(65536).*x(1:65536), 65536))); w = [0:65535]/65536 * 8000; plot(w,X) axis([0 4000 -100 80]) xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Input Sine Wave Spectrum'); % X = 20*log10(abs(fft(2*hanning(65536)'.*x(1:65536), 65536))); % plot(w,X) % axis([0 4000 -100 80]) % xlabel('Frequency in Hz'); % ylabel('Magnitude of Spectrum in dB') % title('Input Sine Wave Spectrum'); print -dppm -painters -r0 SineWaveInput.ppm !./sox -V sine.wav -r 44100 s_rate.wav rate !./sox -V sine.wav -r 44100 s_poly.wav polyphase !./sox -V sine.wav -r 44100 s_resamp.wav resample s_rate = wavread('s_rate.wav'); s_poly = wavread('s_poly.wav'); s_resamp = wavread('s_resamp.wav'); SR = 20*log10(abs(fft(2*hanning(65536).*s_rate(1:65536), 65536))); SP = 20*log10(abs(fft(2*hanning(65536).*s_poly(1:65536), 65536))); SS = 20*log10(abs(fft(2*hanning(65536).*s_resamp(1:65536), 65536))); w = [0:65535]/65536*44100; plot(w,SR, w, SP, w, SS) axis([0 22050 -100 80]) legend('Linear','Polyphase','Resample') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Rate Conversion From 8 kHz to 44.1 kHz of Sine Waves'); print -dppm -painters -r0 SineWaveOutput.ppm plot(w, SR) axis([0 22050 -100 80]) l = line([4000 4001], [-100 80]); delete(l) l = line([4000 4001], [-100 80]); set(l, 'Color', 'g') XM = max(XR); l = line([0 4000], [XM XM]); delete(l) XM = max(SR); l = line([0 4000], [XM XM]); set(l, 'Color', 'g') l = line([0 4000], [XM - 3 XM - 3]); set(l, 'Color', 'r') XM = max(SR(floor(10000/44100*65536):floor(20000/44100*65536))); l = line([0 22050], [XM XM]); set(l, 'Color', 'c') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Linear Interpolation, Rate Conversion From 8 kHz to 44.1 kHz of Sine Waves'); print -dppm -painters -r0 SineWaveLinear.ppm plot(w, SP) axis([0 22050 -100 80]) XM = max(SP); l = line([4000 4001], [-100 80]); set(l, 'Color', 'g') l = line([0 4000], [XM XM]); set(l, 'Color', 'g') l = line([0 4000], [XM - 3 XM - 3]); set(l, 'Color', 'r') XM = max(SP(floor(10000/44100*65536):floor(20000/44100*65536))); l = line([0 22050], [XM XM]); set(l, 'Color', 'c') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Polyphase Interpolation, Rate Conversion From 8 kHz to 44.1 kHz of Sine Waves'); print -dppm -painters -r0 SineWavePolyphase.ppm plot(w, SS) l = line([4000 4001], [-100 80]); axis([0 22050 -100 80]) set(l, 'Color', 'g') XM = max(SS); l = line([0 4000], [XM XM]); set(l, 'Color', 'g') l = line([0 4000], [XM - 3 XM - 3]); set(l, 'Color', 'r') XM = max(SS(floor(10000/44100*65536):floor(20000/44100*65536))); l = line([0 22050], [XM XM]); set(l, 'Color', 'c') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Bandlimited Interpolation (sox-12.16), Rate Conversion From 8 kHz to 44.1 kHz of Sine Waves'); print -dppm -painters -r0 SineWaveResample.ppm x = randn(1, 65536 * 6); x = x / max(abs(x)); wavwrite(x, 44100, 16, 'noise2.wav'); !./sox -V noise2.wav -r 8000 ndown_rate.wav rate !./sox -V noise2.wav -r 8000 ndown_resamp.wav resample !./sox -V noise2.wav -r 8000 test.raw polyphase !./sox -c 1 -r 8000 -s -w test.raw ndown_poly.wav n_rate = wavread('ndown_rate.wav'); n_poly = wavread('ndown_poly.wav'); n_resamp = wavread('ndown_resamp.wav'); NR = 20*log10(abs(fft(2*hanning(65536).*n_rate(1:65536), 65536))); NP = 20*log10(abs(fft(2*hanning(65536).*n_poly(1:65536), 65536))); NS = 20*log10(abs(fft(2*hanning(65536).*n_resamp(1:65536), 65536))); w = [0:65535]/65536*8000; plot(w, NR, w, NP, w, NS) axis([0 4000 -100 80]) xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Rate Conversion From 44.1 kHz to 8 kHz of Random Noise'); legend('Linear','Polyphase','Resample') print -dppm -painters -r0 RandomNoiseDownsample.ppm plot(w,NR) axis([0 4000 -100 80]) l = line([4000 4001], [-100 80]); delete(l) l = line([4000 4001], [-30 40]); delete(l) l = line([4000 4001], [-30 50]); set(l, 'Color', 'g') XM = max(NR); l = line([0 4000], [XM XM]); set(l, 'Color', 'g') l = line([0 4000], [XM - 3 XM - 3]); set(l, 'Color', 'r') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Linear Interpolation, Rate Conversion From 44.1 kHz to 8 kHz of Random Noise'); print -dppm -painters -r0 RandomNoiseDownsampleLinear.ppm plot(w,NP) axis([0 4000 -100 80]) l = line([4000 4001], [-30 50]); set(l, 'Color', 'g') XM = max(NP); l = line([0 4000], [XM XM]); set(l, 'Color', 'g') l = line([0 4000], [XM - 3 XM - 3]); set(l, 'Color', 'r') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Polyphase Interpolation, Rate Conversion From 44.1 kHz to 8 kHz of Random Noise'); print -dppm -painters -r0 RandomNoiseDownsamplePolyphase.ppm plot(w,NS) axis([0 4000 -100 80]) l = line([4000 4001], [-30 50]); l = line([4000 4001], [-30 40]); plot(w,NS) axis([0 4000 -100 80]) l = line([4000 4001], [-30 40]); set(l, 'Color', 'g') XM = max(NS); l = line([0 4000], [XM XM]); set(l, 'Color', 'g') l = line([0 4000], [XM - 3 XM - 3]); set(l, 'Color', 'r') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Bandlimited Interpolation (sox-12.16), Rate Conversion From 44.1 kHz to 8 kHz of Random Noise'); print -dppm -painters -r0 RandomNoiseDownsampleResample.ppm t = [0:65535*6] / 44100; NumFreqs = floor(22050 / 500) - 1; x = zeros(size(t)); for k = 1:NumFreqs x = x + sin(k*2*pi*500*t); end x = x / max(abs(x)); wavwrite(x, 44100, 16, 'sineup.wav'); x = wavread('sineup.wav'); X = 20*log10(abs(fft(2*hanning(65536).*x(1:65536), 65536))); w = [0:65535]/65536*44100; plot(w,X) axis([0 22050 -100 80]) xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Input Sine Wave Spectrum'); print -dppm -painters -r0 InputSineWaveUp.ppm !./sox -V sineup.wav -r 8000 sdown_rate.wav rate !./sox -V sineup.wav -r 8000 test.raw polyphase !./sox -V sineup.wav -r 8000 sdown_resamp.wav resample !./sox -c 1 -r 8000 -s -w test.raw sdown_poly.wav sdown_rate = wavread('sdown_rate.wav'); sdown_poly = wavread('sdown_poly.wav'); sdown_resamp = wavread('sdown_resamp.wav'); SR = 20*log10(abs(fft(2*hanning(65536).*sdown_rate(1:65536), 65536))); SP = 20*log10(abs(fft(2*hanning(65536).*sdown_poly(1:65536), 65536))); SS = 20*log10(abs(fft(2*hanning(65536).*sdown_resamp(1:65536), 65536))); w = [0:65535]/65536 * 8000; plot(w, SR, w, SP, w, SS) axis([0 4000 -100 80]) legend('Linear','Polyphase','Resample') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Rate Conversion From 44.1 kHz to 8 kHz of Sine Waves'); print -dppm -painters -r0 SineWaveDownSample.ppm plot(w,SR) axis([0 4000 -100 80]) XM = max(SR); l = line([0 4000], [XM XM]); set(l, 'Color', 'g') l = line([4000 4001], [-100 80]); set(l, 'Color', 'g') l = line([0 4000], [XM - 3 XM - 3]); set(l, 'Color', 'r') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Linear Interpolation, Rate Conversion From 44.1 kHz to 8 kHz of Sine Waves'); print -dppm -painters -r0 SineWaveDownSampleLinear.ppm plot(w,SP) axis([0 4000 -100 80]) l = line([4000 4001], [-100 80]); set(l, 'Color', 'g') XM = max(SS); XM = max(SP); l = line([0 4000], [XM XM]); set(l, 'Color', 'g') l = line([0 4000], [XM - 3 XM - 3]); set(l, 'Color', 'r') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Polyphase Interpolation, Rate Conversion From 44.1 kHz to 8 kHz of Sine Waves'); print -dppm -painters -r0 SineWaveDownSamplePolyphase.ppm plot(w,SS) axis([0 4000 -100 80]) l = line([4000 4001], [-100 80]); set(l, 'Color', 'g') XM = max(SS); l = line([0 4000], [XM XM]); set(l, 'Color', 'g') l = line([0 4000], [XM - 3 XM - 3]); set(l, 'Color', 'r') xlabel('Frequency in Hz'); ylabel('Magnitude of Spectrum in dB') title('Bandlimited Interpolation (sox-12.16), Rate Conversion From 44.1 kHz to 8 kHz of Sine Waves'); print -dppm -painters -r0 SineWaveDownSampleResample.ppm