delivered
BIN
TP3_8/DiogoEliseu_TP3_8_Relatorio.pdf
Normal file
@ -1,50 +0,0 @@
|
||||
%% Inicialização do ambiente
|
||||
clear; close all; clc
|
||||
|
||||
%% Exercício 8
|
||||
% Input
|
||||
[y, Fs] = audioread("Canto1.mp3"); % Signal and Sampling Frequency
|
||||
signal = y(:,1);
|
||||
Fn = Fs/2; % Nyquist Frequency (Hz)
|
||||
%Ts = 1/Fs;
|
||||
L = length(signal); % Signal Length
|
||||
|
||||
% Find the noise
|
||||
FTsignal = fft(signal)/L; % Fourier Transform
|
||||
Fv = linspace(0, 1, fix(L/2)+1)*Fn; % Frequency Vector
|
||||
Iv = 1:numel(Fv); % Index Vector
|
||||
figure(1)
|
||||
% x is Hz, y is amplitude
|
||||
plot(Fv, abs(FTsignal(Iv))*2)
|
||||
grid
|
||||
|
||||
% Butterworth Low-Pass Order 7
|
||||
%[num, den] = butter(7, fc, 'low'); %order, cutoff frequency, type
|
||||
%[SOS,G] = tf2sos(num, den); % Convert To Second-Order-Section For Stability
|
||||
%figure(1)
|
||||
%freqz(SOS, 4096, Fs) % Check Filter Performance
|
||||
%s_filtered = filtfilt(SOS, G, signal);
|
||||
|
||||
fcutlow = 3000;
|
||||
fcuthigh = 3500;
|
||||
Wp = [fcutlow fcuthigh]/Fn; % Passband Frequency (Normalised)
|
||||
Ws = [fcutlow*0.95 fcuthigh/0.95]/Fn; % Stopband Frequency (Normalised)
|
||||
Rp = 30; % Passband Ripple (dB)
|
||||
Rs = 30; % Stopband Ripple (dB)
|
||||
%[n,Wn] = buttord(Wp,Ws,Rp,Rs); % Filter Order
|
||||
n=2;
|
||||
Wn=3200/Fn;
|
||||
[z,p,k] = butter(n, Wn, 'low'); % Filter Design
|
||||
[sosbp,gbp] = zp2sos(z, p, k); % Convert To Second-Order-Section For Stability
|
||||
%freqz(sosbp, 2^20, Fs) % Filter Bode Plot
|
||||
signal_filtered = filtfilt(sosbp, gbp, signal); % Filter Signal
|
||||
figure(2)
|
||||
subplot(2,1,1)
|
||||
plot(signal)
|
||||
subplot(2,1,2)
|
||||
plot(signal_filtered);
|
||||
|
||||
|
||||
|
||||
% output
|
||||
audiowrite('restored.flac', signal_filtered, Fs);
|
@ -1,45 +0,0 @@
|
||||
%% Inicialização do ambiente
|
||||
clear; close all; clc
|
||||
|
||||
%% Exercício 8
|
||||
[y, Fs] = audioread("Canto1.mp3"); % Signal and Sampling Frequency
|
||||
s = y(:,1);
|
||||
L = length(s);
|
||||
|
||||
Fn = Fs/2; % Nyquist Frequency
|
||||
Wp = [150 5800]/Fn; % Normalised Passband
|
||||
Ws = [ 50 6100]/Fn; % Normalised Stopband
|
||||
Rp = 1; % Passband Ripple (dB)
|
||||
Rs = 30; % Stopband Ripple (dB)
|
||||
[n,Ws] = cheb2ord(Wp,Ws,Rp,Rs); % Chebyshev Type II Order
|
||||
[b,a] = cheby2(n,Rs,Ws); % IIR Filter Coefficients
|
||||
[SOS,G] = tf2sos(b,a); % Convert To Second-Order-Section For Stability
|
||||
figure(1)
|
||||
freqz(SOS, 4096, Fs) % Check Filter Performance
|
||||
|
||||
s_filtered = filtfilt(SOS, G, s);
|
||||
|
||||
fcuts = [680 690 710 720 1190 1205 1210 1220 6000 6100]; % Frequency Vector
|
||||
mags = [1 0 1 0 1 0]; % Magnitude (Defines Passbands & Stopbands)
|
||||
devs = [0.05 0.01 0.05 0.01 0.05 0.01]; % Allowable Deviations
|
||||
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,Fs);
|
||||
n = n + rem(n,2);
|
||||
hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'scale');
|
||||
figure(2)
|
||||
freqz(hh,1, 4096, Fs) % Filter Bode Plot
|
||||
filt_sig = filtfilt(hh, 1, s); % Filter Signal
|
||||
FTS = fft(s)/L; % FFT Of Original Signal
|
||||
FTFS = fft(filt_sig)/L; % FFT Of Filtered Signal
|
||||
Fv = linspace(0, 1, fix(L/2)+1)*Fn; % FFT Frequency Vector
|
||||
Iv = 1:length(Fv); % Index Vector
|
||||
[pks,Frs] = findpeaks(abs(FTS(Iv))*2, Fv, 'MinPeakHeight',0.1); % Find Pure Tone Frequencies
|
||||
figure(3)
|
||||
semilogy(Fv, (abs(FTS(Iv)))*2)
|
||||
hold on
|
||||
plot(Fv, (abs(FTFS(Iv)))*2)
|
||||
hold off
|
||||
grid
|
||||
axis([0 2500 ylim])
|
||||
|
||||
% output
|
||||
audiowrite('restored.flac', s_filtered, Fs);
|
@ -1,30 +0,0 @@
|
||||
%% Inicialização do ambiente
|
||||
clear; close all; clc
|
||||
|
||||
%% Exercício 8
|
||||
% Input
|
||||
[y, Fs] = audioread("Canto1.mp3"); % Signal and Sampling Frequency
|
||||
signal = y(:,1);
|
||||
Fn = Fs/2; % Nyquist Frequency (Hz)
|
||||
%Ts = 1/Fs;
|
||||
L = length(signal); % Signal Length
|
||||
|
||||
% Find the noise
|
||||
FTsignal = fft(signal)/L; % Fourier Transform
|
||||
Fv = linspace(0, 1, fix(L/2)+1)*Fn; % Frequency Vector
|
||||
Iv = 1:numel(Fv); % Index Vector
|
||||
figure(1)
|
||||
% x is Hz, y is amplitude
|
||||
plot(Fv, abs(FTsignal(Iv))*2)
|
||||
grid
|
||||
|
||||
% Filter
|
||||
signal_filtered = filter(nd_designed_sexy,signal);
|
||||
figure(2)
|
||||
subplot(2,1,1)
|
||||
plot(signal)
|
||||
subplot(2,1,2)
|
||||
plot(signal_filtered);
|
||||
|
||||
% output
|
||||
audiowrite('restored.flac', signal_filtered, Fs);
|
Before Width: | Height: | Size: 146 KiB |
Before Width: | Height: | Size: 150 KiB |
Before Width: | Height: | Size: 80 KiB |
@ -1,23 +0,0 @@
|
||||
function Hd = designed_sexy
|
||||
%DESIGNED_SEXY Returns a discrete-time filter object.
|
||||
|
||||
% MATLAB Code
|
||||
% Generated by MATLAB(R) 9.8 and Signal Processing Toolbox 8.4.
|
||||
% Generated on: 28-Dec-2020 08:55:51
|
||||
|
||||
% Butterworth Lowpass filter designed using FDESIGN.LOWPASS.
|
||||
|
||||
% All frequency values are in Hz.
|
||||
Fs = 44100; % Sampling Frequency
|
||||
|
||||
Fpass = 3200; % Passband Frequency
|
||||
Fstop = 6900; % Stopband Frequency
|
||||
Apass = 1; % Passband Ripple (dB)
|
||||
Astop = 80; % Stopband Attenuation (dB)
|
||||
match = 'stopband'; % Band to match exactly
|
||||
|
||||
% Construct an FDESIGN object and call its BUTTER method.
|
||||
h = fdesign.lowpass(Fpass, Fstop, Apass, Astop, Fs);
|
||||
Hd = design(h, 'butter', 'MatchExactly', match);
|
||||
|
||||
% [EOF]
|
Before Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 148 KiB |
Before Width: | Height: | Size: 78 KiB |
@ -1,27 +0,0 @@
|
||||
function Hd = nd_designed_sexy
|
||||
%ND_DESIGNED_SEXY Returns a discrete-time filter object.
|
||||
|
||||
% MATLAB Code
|
||||
% Generated by MATLAB(R) 9.8 and DSP System Toolbox 9.10.
|
||||
% Generated on: 28-Dec-2020 11:09:34
|
||||
|
||||
% Butterworth Bandpass filter designed using FDESIGN.BANDPASS.
|
||||
|
||||
% All frequency values are in Hz.
|
||||
Fs = 48000; % Sampling Frequency
|
||||
|
||||
Fstop1 = 730; % First Stopband Frequency
|
||||
Fpass1 = 3000; % First Passband Frequency
|
||||
Fpass2 = 5000; % Second Passband Frequency
|
||||
Fstop2 = 6800; % Second Stopband Frequency
|
||||
Astop1 = 50; % First Stopband Attenuation (dB)
|
||||
Apass = 0.0005; % Passband Ripple (dB)
|
||||
Astop2 = 50; % Second Stopband Attenuation (dB)
|
||||
match = 'passband'; % Band to match exactly
|
||||
|
||||
% Construct an FDESIGN object and call its BUTTER method.
|
||||
h = fdesign.bandpass(Fstop1, Fpass1, Fpass2, Fstop2, Astop1, Apass, ...
|
||||
Astop2, Fs);
|
||||
Hd = design(h, 'butter', 'MatchExactly', match);
|
||||
|
||||
% [EOF]
|
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 75 KiB |