Showing posts with label FFT. Show all posts
Showing posts with label FFT. Show all posts
Friday, October 14, 2011
FFT dari Sinyal Sinus di Matlab/Octave
Seharusnya, bila kita membuat sinyal sinusoidal dengan frekuensi 20 Hz, maka kalau kita fft-kan (fourrier transform-kan) sinyal tersebut memiliki frekuensi tunggal pada sumbu X=20. Bila tidak, atau plotnya menunjukkan spektrum yang tidak beraturan, maka gambar dan teknik yang kita gunakan tersebut salah.
![]() |
| Sinyal Sin 20 Hz dan FFT -nya |
% Sampling frequency Fs = 1024; % Time vector of 1 second t = 0:1/Fs:1; % Create a sine wave of 20 Hz. x = sin(2*pi*t*20); % Use next highest power of 2 greater than or equal to length(x) to calculate FFT.Source: Mathwork
nfft= 2^(nextpow2(length(x)));
% Take fft, padding with zeros so that length(fftx) is equal to nfft
fftx = fft(x,nfft);
% Calculate the numberof unique points
NumUniquePts = ceil((nfft+1)/2);
% FFT is symmetric, throw away second half
fftx = fftx(1:NumUniquePts);
% Take the magnitude of fft of x and scale the fft so that it is not a function of the length of x
mx = abs(fftx)/length(x);
% Take the square of the magnitude of fft of x.
mx = mx.^2;
% Since we dropped half the FFT, we multiply mx by 2 to keep the same energy.
% The DC component and Nyquist component, if it exists, are unique and should not be multiplied by 2.
if rem(nfft, 2) % odd nfft excludes Nyquist point
mx(2:end) = mx(2:end)*2;
else
mx(2:end -1) = mx(2:end -1)*2;
end
% This is an evenly spaced frequency vector with NumUniquePts points.
f = (0:NumUniquePts-1)*Fs/nfft;
% Generate the plot, title and labels.
subplot(211); plot(x);
title('Waveform of a 20Hz Sine Wave');
xlabel('Time');
ylabel('Amplitude');
subplot(212); plot(f,mx);
title('Power Spectrum of a 20Hz Sine Wave');
xlabel('Frequency (Hz)');
ylabel('Power');
Friday, May 01, 2009
Pengolahan Sinyal Akustik
Ada beberapa cara untuk merekam dan menganalisa sinyal suara dengan software Matlab. Untuk perekaman, bisa melalui daq toolbox (data acquisition), perintah wavrecord serta audiorecorder. Semua teknik tersebut mensyaratkan adanya souncard yang telah terpasang, baik internal maupun eksternal.
Berikut proses perekaman dengan perintah wavrecord:
>> Fs=8000; % deklarasi frekuensi sampling >> y=wavrecord(5.0*Fs,Fs); % merekam suara selama lima detik >> figure(1); >> plot(y); % menggambar bentuk gelombang >> wavwrite(y,Fs,'aiueo.wav') % menyimpan file .wavhasil perintah diatas adalah sebagai berikut:
![]() |
Gb.1 Waveform Sinyal Akustik
|
Gambar diatas adalah plot sinyal suara dalam domain waktu yang biasa disebut waveform. Pada Matlab, amplitudo sinyal akan dibatasi pada range [-1 1] dikarenakan ini adalah sinyal teganan yang dinormalisasi (encoding PCM) dan tidak bersatuan. Sedangkan pada sumbu-x grafik diatas adalah masih dalam sample point (jumlah sample) bukan dalam satuan detik. Untuk menjadikan sumbu-x menjadi detik, maka dapat kita definisikan variabel t sebagai berikut,
t = 1/Fs:1/Fs:length(y)/Fs; plot(t,y)
Simple bukan..? Next analysis....
Analisis
Hampir semua analisa sinyal dilakukan dalam domain waktu dan frekuensi, karena itulah disebut time-frequency analysis. Dalam domain waktu, sinyal digambarkan dengan bentuk waveform dimana sumbu-x menunjukkan time dan sumbu-y menunjukkan besarnya amplitude tiap waktu. Bentuk ini kadang kurang informatif karena kita tidak bisa mengetahui besarnya magnitude tiap waktu. Untuk itu diperlukan sebuah transformasi yang mampu mengubah waveform menjadi spectrum, dimana tiap komponen frekuensi akan terlihat jelas. Nah, Fourier Transform merupakan tranformasi yang dapat melakukan hal ini. Apalagi ditambah dengan adanya FFT atau Fast Fourier Transform, maka waktu komputasi akan menjadi lebih cepat sehingga memudahkan analisa sinyal suara. Output dari FFT berupa spectrum yang menggambarkan grafik frekuensi dengan magnitudo.
Berikut cara mengubah waveform dari sinyal y hasil perekaman menjadi spectrum dengan teknik sekaligus perintah fft:
Subscribe to:
Posts (Atom)

