Saya ingin membandingkan dua sinyal atau kurva.
Sayangnya mereka memiliki tingkat sampel yang berbeda. Yang pertama adalah sampel pada 30 Hz, yang kedua pada 2000 Hz. Matlab memiliki fungsi 'resample' dan saya pikir, ini akan membuat perbandingan lebih mudah.
Pertanyaan saya adalah: Apakah lebih bijaksana untuk mengecilkan kurva kedua atau mengganti yang pertama?
Sunting: Saya melakukan apa yang diperintahkan. Pada gambar di sebelah kiri adalah kurva asli. Kurva di sebelah kanan di-resampled. Kanan atas di-upampled, kanan bawah di-downsampled.
Saya tahu kurva memiliki panjang yang berbeda, ketika di-resampled. Namun, sinyal kedua akan dipotong menjadi panjang sinyal pertama.
resampling
NelsonOrange
sumber
sumber
Jawaban:
Pendeknya:
Jadi jika Anda membandingkan data pada tingkat yang berbeda, dan dalam fase evaluasi ketika seseorang mencoba untuk menentukan bagaimana perbandingan harus dilakukan (fitur mana yang dibandingkan, dengan metrik apa, dengan yang eksternal, seperti presisi, efisien, ketahanan, dll), sebuah pendekatan pertama yang sangat mendasar adalah mengganti kedua sinyal dengan faktor integer untuk merekonsiliasi sampel mereka . Di sini, ini cukup OK, 6000 Hz dapat bekerja untuk keduanya.
Alasannya bisa, untuk praktik DSP:
Setelah Anda meluangkan waktu untuk hal itu, Anda lebih siap untuk memulai dari awal lagi, dan memutuskan apakah Anda harus mengurangi sampel atau tidak, dengan metode apa, dll. Untuk mencapai keamanan dan efisiensi .
Untuk memberikan alternatif, jika Anda memutuskan untuk membandingkan data pada domain Fourier, Anda dapat dengan mudah memberikan dua sinyal dengan panjang dan laju sampling yang berbeda ke jumlah koefisien Fourier yang sama, membantu perbandingan dalam domain frekuensi.
sumber
Jika Anda menggunakan fungsi seperti plot (x, y) cara termudah untuk menampilkannya pada grafik yang sama adalah tidak hanya melakukan resample sama sekali, tetapi cukup mengisi setiap vektor x dengan nilai yang tepat untuk setiap sinyal, sehingga keduanya muncul di mana Anda inginkan di layar.
Anda juga dapat mengatur plot agar memiliki dua sumbu x yang berbeda (satu untuk setiap kurva) dengan label dan legenda yang berbeda jika Anda mau.
Sekarang, tentang resampling. Saya akan menggunakan Fs untuk frekuensi sampling.
Sinyal sampel tidak dapat mengandung komponen frekuensi di atas Fs / 2. Ini terbatas.
Juga, sinyal yang hanya mengandung komponen frekuensi hingga frekuensi F dapat secara akurat direpresentasikan pada laju sampling 2F.
Perhatikan bahwa representasi "akurat" ini adalah matematis, bukan visual. Untuk representasi visual yang baik, memiliki 5-10 sampel per periode (dengan demikian tidak ada komponen frekuensi terkenal di atas Fs / 10 atau lebih) benar-benar membantu otak menghubungkan titik-titik. Lihat gambar ini: sinyal yang sama, kurva yang lebih rendah memiliki laju sampel yang lebih rendah, tidak ada kehilangan informasi karena frekuensinya lebih rendah dari Fs / 2 tetapi masih terlihat seperti omong kosong.
Ini sinyal yang sama persis. Jika Anda melakukan oversample (merekonstruksi) yang ada di bawah dengan filter sinc, Anda akan mendapatkan yang di atas.
Decimation (downsampling) akan melipat kembali semua komponen frekuensi yang lebih tinggi dari Fs / 2 yang baru ke dalam sinyal. Inilah sebabnya kami biasanya meletakkan filter lowpass curam di depan decimator. Misalnya, untuk menurunkan sampel dari Fs = 2000 Hz ke Fs = 30 Hz, pertama-tama kita akan menerapkan lowpass pesanan tinggi dengan cutoff sedikit di bawah 15 hz dan baru kemudian memusnahkan.
Namun filter ini akan memperkenalkan masalah respons sementara, ini akan memiliki fase fase pada frekuensi tertentu, dan itu dapat mengubah aspek visual dari sinyal Anda, yang tidak ingin Anda lakukan jika idenya adalah untuk membandingkannya secara visual. Aturan di atas berlaku, jangan terlalu banyak sampel, selalu pertahankan Fs sebagai frekuensi minat tertinggi 5-10x jika Anda ingin bentuk sinyal berarti sesuatu. Inilah sebabnya mengapa cakupan 200MHz perlu sampel pada 1-2 Gsps.
Seperti yang dikatakan di atas, yang paling bijaksana adalah tidak mengacaukan data sama sekali dan hanya menyajikannya masing-masing dengan sumbu x mereka sendiri pada grafik yang sama.
Konversi laju pengambilan sampel akan diperlukan dalam beberapa kasus. Misalnya untuk mengurangi jumlah titik, mengurangi penggunaan memori, membuatnya lebih cepat ... atau untuk membuat kedua sinyal menggunakan koordinat "x" yang sama untuk melakukan perhitungan pada mereka.
Dalam hal ini Anda juga dapat menggunakan Fs menengah, downsample sinyalnya dengan Fs tinggi dan upsample dengan Fs rendah. Atau hanya downsample yang memiliki Fs tinggi.
Pikirkan kriteria Nyquist, dan jangan memilih laju sampel terlalu rendah atau Anda akan kehilangan kesetiaan bentuk gelombang pada sinyal Fs tinggi, Anda akan mendapatkan pergeseran fasa karena filter lowpass, dll. Atau jika Anda tahu konten frekuensi tinggi diabaikan, Anda dapat membuat pilihan berdasarkan informasi. saya
Jika Anda menggunakan interpolasi linier untuk membuat koordinat "x" cocok, ingat juga membutuhkan Fs yang cukup tinggi. Interpolasi akan bekerja pada sinyal teratas di plot di atas, itu tidak akan bekerja pada yang di bawah. Sama jika Anda tertarik min, maks, dan semacamnya.
Dan ... perhatikan bahwa oversampling / upsampling juga akan mengacaukan respons sementara, setidaknya secara visual. Misalnya, jika Anda melakukan oversample langkah, Anda akan mendapatkan banyak dering karena respons impuls filter tulus. Ini karena Anda mendapatkan sinyal bandlimited, dan langkah yang bagus dengan sudut persegi sebenarnya memiliki bandwidth tak terbatas.
Saya akan mengambil gelombang persegi sebagai contoh. Pikirkan sinyal sampel asli: 0 0 0 1 1 1 0 0 0 1 1 1 ... Otak Anda melihat gelombang persegi.
Tetapi kenyataannya adalah bahwa Anda harus menggambarkan setiap sampel sebagai titik, dan tidak ada di antara titik-titik. Itulah inti dari pengambilan sampel. Tidak ada apapun di antara sampel. Jadi ketika gelombang persegi ini telah oversampled menggunakan interpolasi yang tulus ... itu terlihat lucu.
Ini hanyalah representasi visual dari gelombang persegi terbatas. Goyangan agak ada ... atau mungkin tidak. Tidak ada cara untuk mengetahui apakah mereka ada di sinyal asli atau tidak. Dalam hal ini solusinya adalah dengan memperoleh gelombang persegi asli dengan tingkat pengambilan sampel yang lebih tinggi untuk mendapatkan resolusi yang lebih baik di tepi, idealnya Anda ingin beberapa sampel di tepi Anda sehingga tidak lagi terlihat seperti langkah bandwidth infinte. Kemudian ketika oversampling sinyal seperti itu, hasilnya tidak akan memiliki artefak visual.
Bagaimanapun. Seperti yang Anda lihat ... hanya mengacaukan sumbu x. Jauh lebih sederhana.
sumber
Downsampling kehilangan informasi. Upsampling adalah lossless ketika faktornya adalah bilangan bulat (diambil Anda juga ingat faktornya), tetapi beberapa informasi hilang ketika faktor tersebut bukan bilangan bulat. Upsampling secara teoritis bisa kehilangan lebih banyak informasi daripada downsampling, untuk faktor-faktor resampling yang sangat spesifik.
Yang mana yang harus Anda gunakan? Itu tergantung pada tingkat kepastian yang Anda butuhkan.
Jika Anda tidak membutuhkan kepastian matematis dan hanya menginginkan heuristik, downsampling lebih cepat dan upampling lebih akurat .
Jika Anda perlu membatasi akurasi perhitungan Anda: itu mungkin tapi saya tidak bisa membantu Anda.
sumber
Itu tergantung pada apa yang Anda maksud dengan "bandingkan" dan "lebih bijaksana". Hal bijak, yang tidak sulit di Matlab, adalah melakukannya dengan dua cara dan memutuskan sendiri.
Sebenarnya, jika Anda mengubah pertanyaan Anda dengan hasil dari kedua pendekatan, saya akan meningkatkan pertanyaan Anda dan lebih banyak orang akan menganggapnya menarik, dan kemungkinan besar membantu dalam mencari tahu "membandingkan"
sumber
Saya ingin menunjukkan masalah yang terjadi ketika melakukan upampling yang bisa menjadi sangat penting dalam operasi ini. Ketika sinyal di-upampled dan titik akhir data jauh dari nilai nol maka efek tepi terjadi. Dalam pengalaman praktis, efek yang tidak diinginkan ini harus dihilangkan. Saya berbagi dengan komunitas ini esai singkat dengan gambar dan kode yang saya tulis tentang hal itu yang dapat membantu untuk memahami.
https://medium.com/@davidpinyol91/edge-effects-when-resampling-a-signal-on-matlab-how-to-solve-it-cc6458ab1306
sumber