Friday, September 1, 2017

TRANSFORMASI HILBERT BERBASIS JENDELA HANNING UNTUK MENAPIS SINYAL AUDIO DIGITAL











Berikut telah dirancang GUI MATLAB yang mengaplikasikan jendela Hanning sebagai transformasi Hilbert. Tapis ini juga diterapkan untuk menapis audio digital.

Berikut adalah kode sumber callback dari tombol Transformasi Hilbert:
function Trans_Helbert_Callback(hObject, eventdata, handles)
% hObject    handle to Trans_Helbert (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global x;

% Membaca semua parameter tapis
omega1s = str2num(get(handles.omega1s,'String'));
omega2s = str2num(get(handles.omega2s,'String'));
omega1p = str2num(get(handles.omega1p,'String'));
omega2p = str2num(get(handles.omega2p,'String'));
A1s = str2num(get(handles.A1s,'String'));
A2s = str2num(get(handles.A2s,'String'));
R1p = str2num(get(handles.R1p,'String'));
R2p = str2num(get(handles.R2p,'String'));

%Mengalikan dengan pi
omega1s = omega1s * pi;
omega1p = omega1p * pi;
omega2s = omega2s * pi;
omega2p = omega2p * pi;

if(omega1s > omega1p)
%Menghitung
tr_lebar=omega1s-omega1p;
M=ceil(6.6*pi/tr_lebar)+1;
%M=25;
alpha=(M-1)/2;
n=[0:1:M-1];

%Tanggapan tapis helbert
hd=(2/pi)*((sin((pi/2)*(n-alpha)).^2)./(n-alpha)); hd(alpha+1)=0;

%Tanggapan tapis aktual
w_han=(hanning(M))';
h=hd.*w_han;

%Tanggapan frekuensi
[Hr,w,P,L]=Hr_Tipe3(h);
w=w';Hr=Hr';
w=[-fliplr(w),w(2:501)]; Hr=[-fliplr(Hr), Hr(2:501)];

%Menampilkan tanggapan impuls ideal
axes(handles.axes7);
stem(n,hd,'color','r'); title('Respon impuls ideal');
axis([0 M-1 -0.75 0.75]);xlabel('n'); ylabel('hd(n)');
set(gca,'color',[0,0,0]);

%Menampilkan jendela Hanning
axes(handles.axes8);
stem(n,w_han,'color','r'); title('Jendela Hanning');
axis([0 M-1 0 1.1]);xlabel('n'); ylabel('wn');
set(gca,'color',[0,0,0]);

%Menampilkan tanggapan impuls aktual
axes(handles.axes9);
stem(n,h,'color','r');title('Respon impuls aktual');
axis([0 M-1 -0.75 0.75]);xlabel('n'); ylabel('h(n)');
set(gca,'color',[0,0,0]);

%Menampilkan tanggapan dalam dB
axes(handles.axes3);
plot(w/pi,Hr,'color','r', 'LineWidth' ,2);title('Respon magnitudo'); grid on;
xlabel('frekuensi dalam unit pi'); ylabel('dB');
set(gca,'color',[0,0,0]);

% Menghitung Hasil Penapisan
y = conv(double(x),double(h), 'same');
axes(handles.axes2);

t = 0:length(y)-1;  %vektor indeks

stem(t,y,'linewidth',1,'color','y');title('Keluaran Tapis')
set(gca,'color',[0,0,0]);

else
    h = msgbox('Omega1s Harus Lebih Besar dari Omega1p');
end

%Menyimpan data global
global helbert

helbert = h;






No comments: