Matematik

Scilab FFT HOWTO

Scilab FFT HOWTO
Scilab adalah alat yang hebat untuk banyak kegunaan kerja saintifik dan teknik. Artikel ini akan merangkumi kes khas FFT, Fast Fourier Transform.

Pertama mari kita jelaskan apa itu Fourier Transform yang pantas dan mengapa anda mahu menggunakannya. Matematik adalah mengenai frekuensi. Transformasi Fourier adalah kaedah untuk memisahkan gelombang yang lebih kecil dalam gelombang yang kompleks. Itu terdengar kompleks; semasa anda mendengar muzik anda mendengar banyak nota yang berbeza dari penyanyi, instrumen dan sebagainya. Sebagai manusia, kita sering dapat mendengar gitarnya sendiri tetapi cuba menyusunnya dengan teknologi dalam rakaman dan anda menghadapi masalah. Teknologi moden dapat melakukannya, berkat penjelmaan yang berbeza dari persamaan Fourier asas yang dikembangkan selama bertahun-tahun. Kegunaan moden siri Fourier adalah pemampatan gambar dan video, imbasan GPS dan MRI. Semua ini membuat penghampiran sumber dan menggunakan siri Fourier untuk menjimatkan memori dan mendapatkan hasil yang lebih cepat.

Ahli matematik Jean-Baptiste Joseph Fourier sebenarnya berusaha menyelesaikan persamaan haba, untuk memungkinkan untuk mengira bagaimana haba menyebar dalam bahan pepejal. Apa yang dia hasilkan jauh lebih berguna daripada itu, walaupun metodenya kemudian ditingkatkan menjadi versi yang lebih formal. Persamaan kini digunakan dalam pelbagai bidang.

Untuk memilih frekuensi tertentu dalam isyarat kompleks, anda boleh menggunakan beberapa pengiraan, Transformasi Fourier Cepat. Asas matematik untuk ini memerlukan beberapa latihan. Khan Academy adalah tempat yang bagus untuk belajar matematik.

Apabila anda perlu menganalisis gelombang apa pun, anda dapat menggunakan fungsi sinus untuk menghitung jumlah gelombang dan mendapatkan semua isyarat yang terpisah dari gelombang campuran. Atau sebaliknya, anda boleh membuat gelombang kompleks dari beberapa gelombang sinus. Inilah idea asas di sebalik matematik.

Untuk memahami Transformasi Fourier anda dengan lebih baik, amalan yang baik adalah menulisnya sendiri. Di Scilab anda mempunyai bahasa pengaturcaraan ringkas yang direka dengan penekanan pada matematik.
Tugas berbeza yang anda perlukan transformasi Fourier bermula dengan mencari pekali transformasi. Sebabnya ialah inilah yang digunakan untuk pemampatan gambar dan banyak proses lain.

Apabila anda mempelajari asas-asas siri ini, perkara pertama yang digunakan adalah pekali. Persamaannya seperti ini:

Kod untuk menyelesaikannya agak mudah, ia bermula dengan fungsi. Fungsi ini menerapkan Transformasi Fourier dalam kepingan kecil.
Untuk menentukan fungsi anda menggunakan konstruk 'fungsi' yang jelas. Berikut adalah siri Fourier untuk gelombang persegi:

fungsi y =f(z)
y = 4 * sin (t) / 1 *% pi + 4 * sin (3 * t) / 3 *% pi + 4 * sin (5 * t) / 5 *% pi + 4 * sin (7 * t) / 7 *% pi
+ 4 * sin (9 * t) / 9 *% pi
fungsi akhir

Untuk menjadikan gelombang lebih sekata, ini adalah perkiraan, anda perlu terus meningkatkan jumlah istilah. Semasa anda ingin mencipta corak, katakan kartun, anda menggunakan transformasi Fourier dengan cara yang sangat serupa. Anda hanya perlu menganggap tempoh tersebut sebagai tidak terbatas.

Ringkas betul? Tidak, tanpa pengetahuan asas matematik. Cuba beberapa contoh sendiri, menggunakan scilab.

Contoh ini menunjukkan gabungan isyarat yang paling sederhana; dua isyarat frekuensi berbeza.

// Pilih ukuran sampel
 
N = 100;
 
// Tetapkan urutan, ini membuat susunan
 
n = 0: N-1;
 
// Buat frekuensi isyarat
 
w1 =% pi / 4
 
w2 =% pi / 8
 
// Buat contoh isyarat
 
s1 = cos (w1 * n); // Komponen pertama isyarat
 
s2 = cos (w2 * n); // Komponen kedua isyarat
 
// Gabungkan keduanya menjadi satu isyarat
// Dalam kes ini, kita membuat isyarat bersih sederhana.
 
f = s1 + s2;
 
// Berikut adalah isyarat yang dihasilkan siap untuk transformasi.
 
rajah (0);
plot (f);
 
// Transformasi Fourier isyarat ini hanya menunjukkan frekuensi komponen.
 
F = fft (f);
 
F_abs = abs (F);
 
Rajah 1);
plot (n, F_abs);
 
rajah (2);
plot (F);

Gunakan contoh di atas untuk mempraktikkan bagaimana transformasi berfungsi. Pastikan anda mengubahnya menjadi penapis dengan cara yang berbeza.

Petua adalah menggunakan konsol Scilab untuk melihat apa yang terdapat pada pemboleh ubah pada setiap langkah program, dengan cara ini anda juga dapat melihat bahawa 'F' mempunyai kandungan khayalan. Cuba ubah äfä dengan cara lain untuk mendapatkan hasil yang lebih tepat.

Dalam industri, penggunaan Fourier Transforms yang paling biasa adalah untuk menganalisis isyarat. Untuk menyaring frekuensi daripada isyarat yang bising, anda harus mulai dengan membuat, atau mengimport isyarat.  Coretan kod berikut menghasilkan isyarat campuran dua frekuensi, 50 dan 70 hz. Dalam kod anda juga dapat melihat penggunaan 'grand', ini adalah panggilan scilab secara rawak. Nilai rawak ini ditambahkan untuk menjadikan isyarat sedikit lebih bising, lebih dekat dengan kenyataan.

sample_rate = 1000;
t = 0: 1 / kadar_ sampel: 0.6;
N = saiz (t, '*'); // bilangan sampel
s = sin (2 *% pi * 50 * t) + sin (2 *% pi * 70 * t +% pi / 4) + grand (1, N, 'nor', 0,1);
Sekarang, anda boleh memplot 's' sebagai fungsi 't' dan melihat bahawa grafik kelihatan tidak kemas.
>> plot (t, s);

Di sini, inilah masanya untuk mencuba transformasi Fourier termudah, menjadikan 'y' transformasi Fourier dari s.

y = fft;

fft

Sekiranya anda merancang 'y' sebagai fungsi 't', anda mendapat corak yang agak simetri dari 0 hingga 0.6. Dua lonjakan adalah apa yang kita cari tetapi kita sekarang melihatnya dalam domain masa. Apa yang sebenarnya berlaku ialah hasilnya masih mengandungi nilai khayalan. Untuk mencari dua frekuensi dalam domain frekuensi, kita memerlukan beberapa operasi lagi untuk mencari nombor sebenar sahaja. Dan kemudian anda mengambil nilai mutlak hasilnya. Grafik menunjukkan frekuensi asal dengan jelas.

Inilah kodnya:

// s adalah nyata sehingga tindak balas fft adalah simetri konjugasi dan kami hanya mengekalkan yang pertama
N / 2 mata
f = kadar_ sampel * (0: (N / 2)) / N; // vektor frekuensi yang berkaitan
n = saiz (f, '*')
klf ()
plot (f, absy (1: n)))

Ini adalah penggunaan transformasi Fourier yang paling biasa. Dengan menggunakan sistem ini, anda dapat mencari frekuensi apa pun dalam isyarat yang bising dan kompleks. Persamaan digunakan secara meluas di banyak industri hari ini.
Fungsi Fft2 Scilab adalah versi dua dimensi transformasi Fourier pantas.

Salah satu cara yang baik untuk berlatih adalah memilih nada DTMF, membuat satu tekan butang dan minta scilab mengetahui kunci yang betul.

Demo di Scilab itu sendiri mengandungi pameran fail suara, mempelajarinya.

Sekiranya anda ingin menggali lebih mendalam, berikut adalah beberapa pautan untuk membaca lebih lanjut.

Sastera lanjutan:

https: // cnx.org / kandungan / [dilindungi e-mel] / Melaksanakan-FFTs-in-Practice # uid8

Wolfram…

http: // demonstrasi.wolfram.com / KompleksAndRealPlanesOfDiscreteFourierTransforms /

Melaksanakan dalam bahasa lain:

https: // www.nayuki.io / halaman / cara-melaksanakan-the-diskret-Fourier-transform

Untuk mendapatkan rasa yang tepat untuk subjek:

https: // betterexplained.com / artikel / panduan-interaktif-untuk-the-Fourier-transform /

Cara memuat turun dan Mainkan Sid Meier's Civilization VI di Linux
Pengenalan permainan Civilization 6 adalah konsep moden mengenai konsep klasik yang diperkenalkan dalam siri permainan Age of Empires. Idea itu cukup ...
Cara Memasang dan Memainkan Doom di Linux
Pengenalan Doom Seri Doom berasal dari tahun 90an selepas pembebasan Doom yang asal. Ini adalah hit seketika dan sejak saat itu dan seterusnya siri pe...
Vulkan untuk Pengguna Linux
Dengan setiap kad grafik generasi baru, kami melihat pembangun permainan mendorong had kesetiaan grafik dan semakin dekat dengan fotorealisme. Tetapi ...