image thumbnail
from Lowpass FIR filter on .wav file with windowing by Theo Harushi Franco
it implements a lowpass filter with Windowing on a WAV file

ssd7.m
%Developed in the UTFPR / First semester of 2008.
%Discrete Signals and Systems - Professor Richard Demo Souza

%Theo Harushi Franco
%Elias Cavalet

%--------------------------------------------------------------------------
clear all
close all
clc

%Constants
file_1 = '0500Hz_11.025kHz_16Bit.wav'      %name of the first amostrated file
analysis_time = 10;          %amount of time in seconds taken from files for analisys
filter_order = 12
cutoff_freq = 500

%Storing data from the files
[data_1, FS_1, NBITS_1] = wavread(file_1); clear file_1;
FS_1

%Aranging data
if analysis_time <= 0 | analysis_time > length(data_1)/FS_1
    analysis_time = length(data_1)/FS_1
else
    analysis_time
end

data_1 = data_1(1:FS_1*analysis_time);       %getting data in the amount of time selected
data_1 = data_1*(1/max(abs(data_1)));       %normalizing amplitude to maximum of 1
original_data_1 = data_1;
fft_data_1= fftshift((abs(fft(data_1))));

%rectangular: low-dynamic-range
b=fir1(filter_order,2*cutoff_freq/FS_1,boxcar(filter_order+1));
[H,w]=freqz(b,1,FS_1*analysis_time);
db1=20*log10(abs(H));
rectwin_data_1 = filter(b,1,data_1);


%hamming: narrowband applications
b=fir1(filter_order,2*cutoff_freq/FS_1,hamming(filter_order+1));
[H,w]=freqz(b,1,FS_1*analysis_time);
db2=20*log10(abs(H));
hamming_data_1 = filter(b,1,data_1);


% %hann: narrowband applications
% b=fir1(filter_order,2*cutoff_freq/FS_1,hann(filter_order+1));
% [H,w]=freqz(b,1,FS_1*analysis_time);
% db3=20*log10(abs(H));
% hann_data_1 = filter(b,1,data_1);

%flattop: high-dynamic-range (only available for MATLAB7 or newer)
b=fir1(filter_order,2*cutoff_freq/FS_1,flattopwin(filter_order+1));
[H,w]=freqz(b,1,FS_1*analysis_time);
db3=20*log10(abs(H));
flattopwin_data_1 = filter(b,1,data_1);


%Writing wav files
wavwrite(original_data_1,FS_1,NBITS_1,'sample_1.wav');
wavwrite(rectwin_data_1,FS_1,NBITS_1,'rectwin_1.wav');
wavwrite(hamming_data_1,FS_1,NBITS_1,'hamming_1.wav');
wavwrite(flattopwin_data_1,FS_1,NBITS_1,'flattop_1.wav');

%Plotting
figure;
subplot(2,2,1); 
plot(linspace(-FS_1/2,FS_1/2,analysis_time*FS_1),20*log10(fft_data_1));
title('Original Signal 1');
xlabel('Freq (Hz)')
ylabel('dB')
grid
axis([-FS_1/2,FS_1/2,0,20*log10(max(abs(fft_data_1)))])

subplot(2,2,2);
plot(linspace(-FS_1/2,FS_1/2,analysis_time*FS_1),20*log10(fftshift(abs(fft(rectwin_data_1)))));
title('Rectangular Window 1');
xlabel('Freq (Hz)')
ylabel('dB')
grid
axis([-FS_1/2,FS_1/2,0,20*log10(max(abs(fft_data_1)))])

subplot(2,2,3);
plot(linspace(-FS_1/2,FS_1/2,analysis_time*FS_1),20*log10(fftshift(abs(fft(hamming_data_1)))));
title('Hamming Window 1');
xlabel('Freq (Hz)')
ylabel('dB')
grid
axis([-FS_1/2,FS_1/2,0,20*log10(max(abs(fft_data_1)))])

subplot(2,2,4);
plot(linspace(-FS_1/2,FS_1/2,analysis_time*FS_1),20*log10(fftshift(abs(fft(flattopwin_data_1)))));
title('Flat top Window 1');
xlabel('Freq (Hz)')
ylabel('dB')
grid
axis([-FS_1/2,FS_1/2,0,20*log10(max(abs(fft_data_1)))])


figure;
plot(w,db1,'b',w,db2,'r',w,db3,'g');
title('WINDOWS: Rectangular(blue), Hamming(red), Flat top(green)');
xlabel('rad')
ylabel('dB')
grid

Contact us at files@mathworks.com