Selasa, 03 Juli 2012

Matlab : Progam transformasi fourier

%Progam transformasi fourier
clear all;clc;%input sinyal
%fid = fopen('waveform.dat'); % Membuka file data
%data = textscan(fid,'%f'); %membuka isi file
%fclose(fid);%Menutup file data

%Input Sinyal
N = 100; %jumlah sampel
dt = 0.5; %delta waktu
t = [0:dt:(N-1)*dt]; %deret waktu
f1=0.5; f2=2; f3=5;
x = sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t); x=x';

%menentukan matrix W
for k=1:N
    for n=1:N
        a(n,k) = cos((n-1)*(2*pi/N)*(k-1)); %riil --> con(n-1) krn dimulai dari 1:..... ; harusnya dimulai dari nol
        b(n,k) = -(sin((n-1)*(2*pi/N)*(k-1))); %imaginer
    end
end

fnyq = 1/(2*dt) %frek maksimum
df = 1/(N*dt) %delta frekuensi/ sampling frek

F_a = a*x; %Transformasi fourier untuk bagian riil
F_b = b*x; %Transformasi fourier untuk bagian imaginer
F = complex(F_a,F_b) %Bilangan kompleks
Fz = abs(F); %amplitudo spektrum (domain frekuensi)
freq = [0:df:fnyq]; %deret frekuensi
vk = [1:length(freq)]; %indeks frekuensi
Fz_k = Fz(vk); % Amplitudo spektrum dalam deret frekuensi
Fz_k_db = 20*log10(Fz_k/max(Fz_k)); % Amplitudo spektrum dalam unit logaritmik ; db=desibel; maksudnya dari fungsi logaritmik

theta = atan2(imag(F),real(F)); %sudut fasa dalam unit radian; atan=arc tan ...atan2 --> arc tan dalam semua kuadran
theta = (theta/pi)*180; %sudut fasa dalam unit derajat
theta_k = theta(vk); %sudut fasa (unit derajat) dalam deret frekuensi

y=abs(fft(x)); %Fast fourier transform
y_freq = y(vk); %amplitudo spektrum dalam deret frekuensi
y_freq_db = 20*log10(y_freq/max(y_freq)); % Amplitudo spektrum dalam

%Plotting
figure(1)
plot(t,x,'-k')
grid on
xlabel('waktu (detik)'); ylabel('Amplitudo (mikrometer)');
title('Input Sinyal');

figure(2)
plot(freq,Fz_k, '-b')
grid on
xlabel('Frekuensi(Hz)'); ylabel('Amplitudo (dB)');
title('Spektrum Sinyal(Linier Plot)');

figure(3)
plot(freq,Fz_k_db, '-k')
grid on
xlabel('Frek(Hz)'); ylabel('Amplitudo (dB)');
title('Spektrum Sinyal(Log Plot)')
set(gca,'xscale','log')

figure(4)
plot(freq,theta_k,'-r')
grid on
title('Phase Spektrum')
xlabel('Frek(Hz)'); ylabel('Phase (deg)');


 

1 komentar:

januar mochamad mengatakan...

halo kak, maaf mau nanya. untuk me run programnya apakah harus dibuat GUIny terlebih dahulu? ini saya me run scriptny lalu error - undefined variable. makasih kak

Posting Komentar

next page