%%%% ECE-210-B HW6 - Filters - James Ryan % James Ryan, 03/27/24 % preamble close all; clc; clear; %% Generate white noise Fs = 44100; % Hz = s^-1 N = Fs*2; % 2s * 44100 samples/sec = 88200 samples of noise F = linspace(-Fs/2, Fs/2, N); % range of noise % noise generation % good way noise = randn(1, N); % intensity of noise % funny way - requires `fortune` as a dependency %noise = fortune_favors_the_fontaine(Fs, 2); % thank you! shifted_fft_mag = @(sig, len) fftshift(abs(fft(sig, len))) / len; %% Butterworth Filter Hbutter = butterworth; fvm_butter = fvtool(Hbutter, 'magnitude'); axm_butter = fvm_butter.Children(5); axm_butter.YLim = [-60 5]; axm_butter.Title.String = 'Butterworth Bandpass Filter Magnitude Plot'; fvp_butter = fvtool(Hbutter, 'phase'); axp_butter = fvp_butter.Children(5); axp_butter.Title.String = 'Butterworth Bandpass Filter Phase Plot'; butter_noise = Hbutter.filter(noise); fftm_butter = shifted_fft_mag(butter_noise, N); figure; plot(F, fftm_butter); xlim([-Fs/2 Fs/2]); xlabel("Frequency (Hz)"); ylabel("Magnitude (dB)"); title("FFT of noisy signal passed through Butterworth Bandpass Filter"); % to save you, i played it back in the matlab terminal: %soundsc(noise) %soundsc(fftm_butter) % to me, its just a mostly mute audio track minus two bursts of sound. % that must be the negative and positive passband regions % so the filter took the noise, and just took the regions outside of % the band and killed them. %% Elliptic Filter Hellip = elliptic; fvm_ellip = fvtool(Hellip, 'magnitude'); axm_ellip = fvm_ellip.Children(5); axm_ellip.YLim = [-60 5]; axm_ellip.Title.String = 'Elliptical Bandstop Filter Magnitude Plot'; fvp_ellip = fvtool(Hellip, 'phase'); axp_ellip = fvp_ellip.Children(5); axp_ellip.Title.String = 'Elliptical Bandstop Filter Phase Plot'; ellip_noise = Hellip.filter(noise); fftm_ellip = shifted_fft_mag(ellip_noise, N); figure; plot(F, fftm_ellip); xlim([-Fs/2 Fs/2]); xlabel("Frequency (Hz)"); ylabel("Magnitude (dB)"); title("FFT of noisy signal passed through Elliptical Bandstop Filter"); %soundsc(fftm_ellip) % I can hear this one.. come back? like very faintly % I guess it goes to show how butterworth doesnt have that elliptic % stopband portion, and everything decays to -inf dB. Interesting % difference! % same pattern as the past passband %% Chebyshev Type 1 Filter Hcheb1 = chebyshev1; fvm_cheb1 = fvtool(Hcheb1, 'magnitude'); axm_cheb1 = fvm_cheb1.Children(5); axm_cheb1.YLim = [-60 5]; axm_cheb1.Title.String = 'Chebyshev Type I Lowpass Filter Magnitude Plot'; fvp_cheb1 = fvtool(Hcheb1, 'phase'); axp_cheb1 = fvp_cheb1.Children(5); axp_cheb1.Title.String = 'Chebyshev Type I Lowpass Filter Phase Plot'; cheb1_noise = Hcheb1.filter(noise); fftm_cheb1 = shifted_fft_mag(cheb1_noise, N); figure; plot(F, fftm_cheb1); xlim([-Fs/2 Fs/2]); xlabel("Frequency (Hz)"); ylabel("Magnitude (dB)"); title("FFT of noisy signal passed through Chebyshev I Lowpass Filter"); %soundsc(fftm_cheb1) % It sounds choppy, almost, where it wibbles in and out for the starting portion % where its present. Definitely not the choice for audio filters! % Unless you `want` that distortion in like music production, in which case, go for it % Sort of sounds like a car engine firing %% Chebyshev Type 2 Filter Hcheb2 = chebyshev2; fvm_cheb2 = fvtool(Hcheb2, 'magnitude'); axm_cheb2 = fvm_cheb2.Children(5); axm_cheb2.YLim = [-60 5]; axm_cheb2.Title.String = 'Chebyshev Type I Highpass Filter Magnitude Plot'; fvp_cheb2 = fvtool(Hcheb2, 'phase'); axp_cheb2 = fvp_cheb2.Children(5); axp_cheb2.Title.String = 'Chebyshev Type II Highpass Filter Phase Plot'; cheb2_noise = Hcheb2.filter(noise); fftm_cheb2 = shifted_fft_mag(cheb2_noise, N); figure; plot(F, fftm_cheb2); xlim([-Fs/2 Fs/2]); xlabel("Frequency (Hz)"); ylabel("Magnitude (dB)"); title("FFT of noisy signal passed through Chebyshev II Highpass Filter"); %soundsc(fftm_cheb2) % Its passband is sorta similar to the butterworth passband, but its die-out % has an audible drop off to me. maybe i missed that in others with elliptic % stop bands? No just played back fftm_ellip, and that dropped immediately. hmm % placebo, perhaps