apa yang lebih baik: naik atau turun?


13

Saya ingin membandingkan dua sinyal atau kurva. kurva sampel pada 30 Hz samplet kurva pada 2000 Hz

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. perbandingan


1
Saya mengangkat pertanyaan Anda. Yang menurut Anda lebih bijak.

jika presisi yang sangat tinggi tidak masalah (dalam hal ini saya pikir tidak) maka Anda dapat menurunkan sampel, terutama jika itu membuat prosesnya jauh lebih cepat dan Anda menghargai waktu Anda di tempat kerja
user1306322

@Stanley Pawlukiewicz, jelas, saya kehilangan semua puncak kecil dengan downsampling. Jadi upampling mungkin cara untuk pergi. Kemudian lagi saya tidak perlu puncak kecil. Saya bahkan berpikir untuk menghaluskan sinyal kedua. Jadi dalam kasus saya, mungkin tidak masalah jika saya sampel atas atau bawah.
NelsonOrange

Lagi diperlukan umpan balik dan jawaban?
Laurent Duval

Jawaban:


18

Pendeknya:

  • Upsampling : tidak / tidak boleh kehilangan informasi (jika dilakukan dengan bijak), maka lebih aman ,
  • Downsampling : dapat kehilangan informasi (jika dilakukan secara tidak bijaksana), namun lebih efisien secara komputasi .

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:

  • dengan integer upsampling, Anda tidak diwajibkan untuk menggunakan teknik penyaringan yang rumit, dan interpolasi linier sederhana mudah. Ingat juga bahwa upampling menambahkan beberapa informasi.
  • dengan sinyal dalam skala yang sama, Anda dapat mengekstraksi fitur dan membandingkannya: kebisingan, variabilitas, kemiringan, turunan, dll. Anda dapat menerapkan skala / koreksi offset yang benar (mereka tidak memiliki amplitudo yang sama), menggunakan linier atau non- transformasi linear (Fourier, dll.) untuk memeriksa apakah fitur kesamaan ada di domain yang berbeda
  • pada tahap ini, Anda harus dapat membuat kualitas dan mengukur fitur / metrik yang diperlukan untuk membangun algoritma Anda. Dan Anda dapat memperkirakan apa yang bisa Anda kehilangan dari kedua data. Misalnya, Anda dapat membuat algoritme Anda, dan melihat seberapa kuatnya sinyal downsampling, dan seberapa jauh Anda bisa melangkah. Di sini, algoritma Anda mulai lebih efisien.

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.


14
Downsampling hampir selalu akan kehilangan informasi, bahkan jika itu tidak dilakukan dengan cara yang tidak bijaksana. Namun kehilangan informasi sebenarnya bisa menjadi hal yang bijaksana, jadi ...
leftaroundabout

@leftaroundabout Dalam kasus tepi apa downsampling tidak kehilangan informasi?
Willem

2
@leftaroundabout Saya tidak setuju. Kehilangan informasi selalu lebih buruk daripada menyimpannya. Satu-satunya hal yang bijaksana adalah mengetahui informasi mana yang dibuang untuk representasi sinyal yang lebih baik, bukan kehilangan informasi itu sendiri.
AlexTP

5
@ Willem: Sebagai kasus yang sangat jelas, sinyal DC dapat di-downsampled ke sampel tunggal. Secara umum, sinyal apa pun yang tidak memiliki komponen di atas batas Nyquist (baru) dapat dengan aman di-downsampled.
MSalters

1
Dapat dikatakan bahwa tidak ada informasi yang hilang dari sinyal DC ke sinyal 1 sampel karena Anda dapat mengkonversi kembali ke sinyal yang identik dengan yang asli dari 1 sampel. Dapat dikatakan bahwa informasi hilang karena jika Anda memberikan sinyal sampel 1 kepada seseorang tanpa informasi lebih lanjut dan bertanya "Apakah ini merupakan sinyal DC?" jawabannya adalah "Tidak tahu, tidak cukup informasi dengan satu sampel".
SE melanggar hak cipta

7

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.

masukkan deskripsi gambar di sini

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.

Pertanyaan saya adalah: Apakah lebih bijaksana untuk mengecilkan kurva kedua atau mengganti yang pertama?

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.

masukkan deskripsi gambar di sini

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.


4

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.


+1, karena Anda berhasil memeras beberapa informasi penting dalam jawaban yang sangat ringkas.
dsp_user

3

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"


1

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.