You are on page 1of 6

M.

Irfan Denatama – 1101120300

BASIC AUDIO PROCESSING

A. Penanganan Audio pada Matlab


 Merekam Suara
Pada saat melakukan proses perekaman suara secara langsung pada aplikasi Matlab,
pengguna diharuskan untuk menentukan jumlah sample yang akan direkam, sample rate,
jumlah kanal, dan format sample. Seperti untuk merekam a vector of double precision floating
point samples on a computer with attached atau integrated microphone. Contoh command
yang digunakan pada matlab adalah :

speech=wavrecord(16000,8000,1,’double’);

Perintah tersebut mencatat 16000 sampel dengan sample rate 8 kHz, dan menempatkan
mereka ke dalam 16000 elemen vektor namedspeech. '1' argumen menetapkan bahwa
rekaman mono bukan stereo. Perintah ini hanya bekerja pada Windows, sehingga di Linux
atau MacOS menggunakan Matlab fungsi audiorecorder (), atau menggunakan aplikasi audio
terpisah untuk merekam audio.
Jika menggunakan fungsi audiorecorder (), langkah yang pertama adalah membuat obyek
rekaman audio, menentukan sample rate, sample precision in bits, dan jumlah kanal.

aro=audiorecorder(16000,16,1);
record(aro);

Pada titik ini, microphone sedang merekam. Ketika telah selesai, berhenti merekam dan coba
untuk memutar kembali audio:

stop(aro);
play(aro);

Untuk merubah rekaman yang tersimpan ke dalam bentuk vektor audio yang lebih umum,
dibutuhkan untuk menggunakan perintah getaudiodata()

speech=getaudiodata(aro, ’double’);

Perintah lain, includingpause() dan resume(), mungkin dikeluarkan selama perekaman untuk
mengontrol proses, dengan seluruh perekaman dan pemutaran beroperasi sebagai perintah
latar belakang, membuat ini pilihan yang baik ketika membangun percobaan interaktif
pengolahan sinyal bicara.

 Penyimpanan dan Mengulang Suara


Pada contoh diatas, data yang direkam menggunakan 16-bit precisin. Nilai maksimum dalam
format 16-bit yaitu antara -32 768 dan +32 767, tetapi ketika dikonversikan ke presisi ganda
adalah skala terletak pada +/- 1.0, dan sebenarnya ini akan menjadi skala paling umum dalam
Matlab jadi kita akan menggunakan ini sedapat mungkin. Dalam format ini, sampel yang
direkam dengan nilai integer 32 767 akan disimpan dengan nilai floating point + 1.0, dan
sampel direkam dengan nilai-32 768 akan disimpan dengan floating point 1.0.
Mengulang vektor suara disimpan dalam format floating point juga mudah:

sound(speech, 8000);
Perintah alternatif otomatis akan skala vektor audio yang sebelum pemutaran berdasarkan
unsur amplitudo maksimum dalam vektor audio:

soundsc(speech, 8000);

Perintah ini mengukur kedua arah sehingga vektor yang terlalu tenang akan diperkuat, dan
salah satu yang terlalu besar akan dilemahkan. Tentu saja kita bisa mencapai sesuatu yang
mirip dengan skala audio vektor sendiri.

sound(speech/max(abs(speech)), 8000);

Domain waktu untuk plot suara adalah :

plot(speech);

Terkadang lebih dipilih untuk sumbu X untuk menampilkan waktu dalam detik:

plot( [ 1: size(speech) ] / 8000, speech);

 Penanganan File Audio


Untuk membaca suara PCM ke Matlab, dapat digunakan fungsi fread (), yang memiliki uraian
untuk menentukan ketelitian nilai data yang akan dibaca dalam data biner, dan juga
endianess.
Pertama buka data untuk dibaca berdasarkan nama :

fid=fopen(’recording.pcm’, ’r’);

Selanjutnya, baca seluruh file, dalam kesatuan ke dalam vektor :

speech=fread(fid , inf , ’int16’ , 0, ’ieee-le’);

Menutup file :

fclose(fid);

 Masalah Konversi Audio


Rekaman audio diplot langsung, dan quantised ke unsigned berbagai 8-bit di atas gambar.
Pada bagian bawah, suara yang sama diplot dengan benar byte pemesanan (dalam hal ini di
mana masing-masing sampel 16-bit telah diperlakukan sebagai sejumlah besar-endian
daripada nomor little-endian), dan sebagai nomor unsigned mutlak. Perhatikan bahwa semua
contoh ini, ketika didengar oleh telinga, menghasilkan pidato dimengerti - bahkan replay salah
byte memerintahkan (mudah untuk memverifikasi ini, cobalah Matlab swapbytes () fungsi
dalam hubungannya dengan soundsc ()).
Masalah lain untuk mencari adalah rekaman yang baik dua kali lebih lama, atau setengah
selama mereka seharusnya. Ini mungkin menunjukkan array 8-bit diperlakukan sebagai nomor
16-bit, atau array 16-bit diperlakukan sebagai ganda.
B. Normalisasi
Ada satu langkah terakhir untuk penanganan audio dasar, dan yang normalisasi vektor sampel.
Jika Anda perhatikan ketika kita membahas memutar suara sebelumnya, kita terkadang harus
menormalisasikan terlebih dahulu pertama untuk mencegah clipping :

sound(speech/max(abs(speech)), 8000);

C. Audio Processing
FIR filter :
y=filter(b, 1, x);
Dimana b adalah vektor memegang koefisien filter. X dan yv ectors adalah vektor dengan panjang
yang sama dari input dan output sampel masing-masing, dengan masing-masing sampel yang
dihitung dari persamaan perbedaan:
y(n)=b(1)×x(n)+b(2)×x(n−1)+b(3)×x(n−2)+···+b(m+1)×x(n−m).
IIR filter :
y=filter(b, a, x);
Baik a dan b adalah vektor memegang coefficients.x filter dan y adalah vektor panjang lagi sama
input dan output sampel masing-masing, dengan masing-masing sampel dari y yang dihitung dari
persamaan perbedaan:
y(n)=b(1)×x(n)+b(2)×x(n−1)+b(3)×x(n−2)+···+b(m+1)×x(n−m)
−a(2)×y(n−1)−a(3)×y(n−2)···−a(m+1)×y(n−m).

Sebaliknya, operasi frekuensi domain, biasanya membutuhkan audio dikonversi terlebih dahulu
ke domain frekuensi dengan menggunakan transformasi Fourier atau serupa, seperti Fast Fourier
Transform (FFT):

a_spec=fft(a_vector);

berikut ilustrasi untuk FFT 256-elemen:

a_spec=fft(a_vector, 256);
a_spec=fft(a_vector(1:256));

Dalam Matlab, resultan vektor frekuensi-domain akan menjadi kompleks. Memplot nilai absolut
dari vektor yang menyediakan frekuensi dua sisi yang ditunjukkan diplot menggunakan:

plot(abs(a_spec));

Dalam plot yang tidak biasa ini, sumbu frekuensi (jika diskalakan dengan benar), akan mulai 0,
kemajuan untuk frekuensi Nyquist pada titik pusat, dan kemudian menurun menjadi 0 di bagian
paling kanan. Frekuensi baik positif maupun negatif yang ditampilkan - sesuatu yang tidak
berguna. Kita dapat membuat standard plot yang lebih standar dengan frekuensi rendah
menggunakan :

plot(abs(fftshift(a_spec)));

Memplot spektrum yang sama dengan variabel Fs = 8000 dan Ns = 256 menggambarkan tingkat
sampel asli dan ukuran FFT masing-masing, maka plot yang lebih baik akan dicapai dengan:

plot( [1 : 2*Fs/Ns : Fs], abs(a_spec(1:Ns/2)), ’r’);


D. Segmentasi
 Overlap
Overlap berarti bahwa alih-alih segmentasi langsung dari vektor audio ke frame berurutan,
setiap frame baru dibuat mengandung bagian dari frame sebelumnya dan bagian dari frame
berikutnya. Overlap memastikan bahwa fitur audio yang terjadi pada diskontinuitas yang
paling dianggap keseluruhan dalam berikutnya, overlap, bingkai.
Tingkat overlap (biasanya dinyatakan sebagai persentase) menggambarkan jumlah frame
sebelumnya yang diulang dalam bingkai berikut. Presentase Overlap dari 25% dan 50% pada
umumnya.
 Windowing
Windowing merupakan salah satu syarat untuk analisis frekuensi untuk mencegah efek tepi -
fenomena Gibbs - oleh FFT.
 Continous Filtering
Pertama, rekan speech beberapa detik dengan sample rate 8 kHz.Asumsikan aray ini dengan
nama s.

Replay rekaman tadi:

soundsc(s);

Definisikan filter digital kecil untuk speech

h=[1, -0.9375];

y=filter(h, 1, s);

soundsc(y);

suara output ‘kecil’ atau ‘sengau’ tetapi speech jelas, ulangi filtering, kali ini speech akan
dipecah kedalam 240 sample frame yang akan di filter masing-masing.

w=240;

n=floor(length(s)/w);

for k=1:n

seg=s(1+(k-1)*w:k*w);

segf=filter(h, 1, seg);

outsp(1+(k-1)*w:k*w)=segf;

end

soundsc(outsp);

output terdengar sama, namun akan tedengar suara click.

Matlab menyediakan cara yang mudah untuk mengatur dan menyimpan sejarah internal
dengan menggunakan peritah filter().

w=240;

hst=[];
n=floor(length(s)/w);

for k=1:n

seg=s(1+(k-1)*w:k*w);

[segf, hst]=filter(h, 1, seg, hst);

outsp2(1+(k-1)*w:k*w)=segf;

end

soundsc(outsp2);

Output terdengar sama, tetapi kemungkinan besar akan dirusak oleh suara clicks.Dalam kode
yang telah diperbarui, kita mengakses history array untuk perintah filter() perintah, dan setiap
kali kita melakukan filter kita menyimpan sejarah internal.

E. Analisis Pengukuran Window


 Signal stationarity
Untuk menganalisis aplikasi rekaman musik untuk menentukan catatan saat ini sedang
dimainkan, itu akan masuk akal dalam analisis panjang windowing yang sama dengan durasi
satu catatan, atau kurang. Untuk setiap window analisis kita bisa melakukan FFT, dan mencari
puncak dalam spektrum. Namun jika kita menganalisa durasi window yang lebih lama, kita
mungkin berakhir melakukan FFT yang membentang di dua catatan, dan tidak mampu untuk
menentukan yang baik catatan.
Lebih penting lagi, teori yang menimbulkan FFT mengasumsikan bahwa komponen
frekuensi sinyal yang tidak berubah di jendela analisis menarik. Setiap penyimpangan dari
asumsi ini akan mengakibatkan penentuan akurat dari komponen frekuensi. Titik-titik ini
bersama-sama mengungkapkan pentingnya memastikan bahwa jendela analisis mengarah ke
FFT menjadi ukuran sehingga sinyal stasioner di periode analisis. Dalam prakteknya banyak
sinyal audio tidak cenderung untuk tetap diam untuk waktu yang lama, dan jendela analisis
sehingga lebih kecil diperlukan untuk menangkap rincian yang berubah dengan cepat.
 Time-frequency resolution
Pindah kembali ke FFT, vektor frekuensi output, dari Ann-sampel FFT audio sampel di Fs
/ Hz, berisi N / 2 + 1 sampah frekuensi positif. Setiap bin mengumpulkan energi dari berbagai
kecil frekuensi dalam sinyal asli. Lebar bin terkait baik tingkat sampling dan jumlah sampel
yang dianalisis, Fs / N. Dengan kata lain, lebar bin ini sama dengan kebalikan dari rentang
waktu yang dicakup oleh analisis window.

F. Visualisasi
 A brief note on axes
Karena rentang dinamis yang besar dari sinyal audio, itu adalah umum untuk plot logaritma
dari amplitudo mutlak, bukan amplitudo langsung; sehingga spektrum akan sering diplot
sebagai spektrum daya, menggunakan 20 × log10 (spektrum), atau dengan Matlab:

semilogy(spectrum);
res=pi/size(spectrum);
semilogy(res:res:pi, spectrum);
 Correologram
Sebuah correlogram adalah plot dari autokorelasi sinyal. Korelasi adalah proses dimana dua
sinyal dibandingkan untuk persamaan yang mungkin ada di antara mereka baik pada saat ini
atau di masa lalu (data masa lalu namun banyak yang tersedia). Dalam Matlab analisis seperti
ini dilakukan dengan menggunakan fungsi xcorr lebih panjang terpendek dari dua vektor yang
dianalisis :

[c,lags]=xcorr(x,y);

 Cepstrum
Cepstrum yang dihasilkan sebagai Transformasi Fourier log dari Transformasi Fourier dari
sinyal asli. Contoh memplotting cepstrum speechdianalisis di atas dengan correlogram
menggunakan matlab :

ps=log(abs(fft(hamming(length(segment)).*segment)));
plot(abs(ifft( ps )));

G. Sound Generation
 Pure tone generation
Pure tone merupakan sinusoid unmodulated dalam bentuk. Untuk menghasilkan nada seperti
frekuensi Ft pada tingkat sampel Fs, berlangsung selama Td detik. Dibuat dengan Matlab
menggunakan fungsi yang disebut tonegen ().

function [s]=tonegen(Ft, Fs, Td)


s=sin([1:Fs*Td]*2*pi*Ft/Fs);

 White Noise Generation


White noise terdiri dari nomor acak terdistribusi seragam, yang mudah dihasilkan di Matlab,
menggunakan notasi yang sama seperti sebelumnya Td detik durasi di tingkat sampel Fs:

noise=rand(1,Fs*Td);

 Variabel Tone Generation

function [snd]=freqgen(frc, Fs)


th=0;
fr=frc*2*pi/Fs;
for si=1:length(fr)
th=th+fr(si);
snd(si)=sin(th);
th=unwrap(th);
end

 Mixing Sounds
Dua array audio yang memiliki panjang yang sama dapat digabungkan atau dicampur
bersama-sama. Dalam hal ini digambarkan dan didengarkan hasilnya menggunakan soundsc ().
C=tonegen(261.63, 8000, 2);
E=tonegen(329.63, 8000, 2);
G=tonegen(783.99, 8000, 2);
B=tonegen(987.77, 8000, 2);
soundsc(C+E+G+B, 8000);

You might also like