Professional Documents
Culture Documents
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.
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);
plot(speech);
Terkadang lebih dipilih untuk sumbu X untuk menampilkan waktu dalam detik:
fid=fopen(’recording.pcm’, ’r’);
Menutup file :
fclose(fid);
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);
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:
soundsc(s);
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);
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);
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.
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 ().
noise=rand(1,Fs*Td);
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);