Saya memiliki sinyal yang panjang, katakanlah 1000 sampel. Saya ingin memperluas sinyal ini ke 5000 sampel, sampel pada tingkat yang sama dengan aslinya (yaitu, saya ingin memprediksi apa sinyal jika saya terus sampel itu untuk periode waktu yang lebih lama). Sinyal terdiri dari beberapa komponen sinusoidal yang ditambahkan bersama-sama.
Metode yang pertama kali datang kepada saya adalah untuk mengambil seluruh FFT, dan memperpanjangnya, tetapi ini meninggalkan diskontinuitas yang sangat kuat pada frame 1001. Saya juga dianggap hanya menggunakan bagian spektrum dekat puncak, dan sementara ini tampaknya agak meningkatkan sinyal, bagi saya sepertinya fase dijamin tidak benar. Apa metode terbaik untuk memperluas sinyal ini?
Berikut adalah beberapa kode MATLAB yang menunjukkan metode ideal dari apa yang saya inginkan. Tentu saja, saya tidak akan tahu sebelumnya bahwa ada 3 komponen sinusoidal, atau fase dan frekuensi yang tepat. Saya ingin memastikan bahwa fungsinya kontinu, bahwa tidak ada lompatan saat kita bergerak ke titik 501,
vals = 1:50;
signal = 100+5*sin(vals/3.7+.3)+3*sin(vals/1.3+.1)+2*sin(vals/34.7+.7); % This is the measured signal
% Note, the real signal will have noise and not be known exactly.
output_vals = 1:200;
output_signal = 100+5*sin(output_vals/3.7+.3)+3*sin(output_vals/1.3+.1)+2*sin(output_vals/34.7+.7); % This is the output signal
figure;
plot(output_signal);
hold all;
plot(signal);
Pada dasarnya, diberi garis hijau, saya ingin menemukan garis biru.
Jawaban:
Tergantung pada bahan sumbernya, metode interpolasi spektral berbasis DCT yang dijelaskan dalam makalah berikut ini terlihat menjanjikan:
Ini salah satu gambar dari makalah yang menunjukkan contoh interpolasi:
Penerapan teknik untuk pemulihan segmen yang hilang ( misalnya 4.2. Sintesis periode nada yang hilang ) mungkin paling relevan dengan ekstrapolasi. Dengan kata lain, ambil sepotong bahan sumber yang ada, berpura-pura ada segmen yang hilang antara tepi dan segmen sewenang-wenang yang Anda pilih, lalu "merekonstruksi" bagian "hilang" (dan mungkin membuang bagian yang Anda gunakan di akhir). Tampaknya aplikasi teknik yang bahkan lebih sederhana akan bekerja untuk pengulangan materi sumber dengan mulus ( mis. 3.1. Interpolasi amplitudo spektral ).
sumber
Saya pikir coding prediktif linier (atau dikenal sebagai rata-rata bergerak regresif otomatis ) adalah apa yang Anda cari. LPC mengekstrapolasi deret waktu dengan terlebih dahulu memasang model linier ke deret waktu, di mana setiap sampel diasumsikan merupakan kombinasi linear dari sampel sebelumnya. Setelah menyesuaikan model ini dengan deret waktu yang ada, dapat dijalankan untuk memperkirakan nilai lebih lanjut sambil mempertahankan spektrum daya stasioner (?).
Berikut adalah sedikit contoh di Matlab, menggunakan
lpc
fungsi untuk memperkirakan koefisien LPC.Tentu saja, dalam kode nyata Anda akan menggunakan
filter
untuk menerapkan ekstrapolasi, dengan menggunakan koefisien LPCa
sebagai filter IIR dan pra-memuat nilai jangka waktu yang diketahui ke dalam kondisi filter; sesuatu seperti ini:Berikut hasilnya:
Itu melakukan pekerjaan yang masuk akal, meskipun prediksi itu hilang dengan waktu karena suatu alasan.
Saya sebenarnya tidak tahu banyak tentang model AR dan juga ingin tahu untuk mempelajari lebih lanjut.
-
EDIT: @china dan @Emre benar, metode Burg tampaknya bekerja lebih baik daripada LPC. Hanya dengan mengubah
lpc
kearburg
dalam hasil kode di atas hasil sebagai berikut:Kode tersedia di sini: https://gist.github.com/2843661
sumber
a=lpc(x,N)
dengana=arburg(x,N)
. Untuk diskusi (kering) tentang algoritma AR, lihat Mengapa Yule-Walker Tidak boleh Digunakan untuk Pemodelan Autoregresifx
(P
pengukuran) untuklpc
(atauarburg
) ketika memperkirakan koefisien model. Untuk ekstrapolasi per pertanyaan awal, Anda harus benar-benar hanya mendasarkan estimasi ini padaM
pengukuran pertama . Memberikan poin waktu lebih sedikit menghasilkan ekstrapolasi yang lebih rendah, tetapi masih bekerja dengan cukup baik.1-D 'Ekstrapolasi' cukup sederhana dengan menggunakan metode BURG untuk memperkirakan koefisien LP. Setelah koefisien LP tersedia, Anda dapat dengan mudah menghitung sampel waktu dengan menerapkan filter. Sampel yang diprediksi dengan Burg adalah sampel waktu berikutnya dari segmen waktu input Anda.
sumber
Jika Anda benar-benar yakin bahwa hanya ada beberapa komponen frekuensi pada sinyal, Anda dapat mencoba algoritme MUSIC untuk mengetahui frekuensi mana yang terkandung dalam sinyal Anda dan mencoba bekerja dari sana. Saya tidak sepenuhnya yakin ini dapat dibuat untuk bekerja dengan sempurna.
Selain itu, karena data Anda sepenuhnya deterministik, Anda dapat mencoba membuat semacam prediktor non-linier, melatihnya menggunakan kumpulan data yang ada dan membiarkannya memperkirakan yang lain.
Secara umum ini adalah masalah ekstrapolasi, apakah Anda mungkin ingin Google sesuatu seperti ekstrapolasi harga Fourier .
sumber