Bagaimana cara mengekstrapolasi sinyal 1D?

25

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. masukkan deskripsi gambar di sini

PearsonArtPhoto
sumber
3
Apakah ini dalam konteks memasang gambar, melakukan sesuatu seperti ekstensi langit, atau sesuatu yang lain? Dengan kata lain, apakah ada ukuran kualitas lain untuk ekstensi selain itu "halus" di tepinya?
datageist
3
Pertanyaan Anda tidak jelas. Apa yang Anda maksud dengan "memperpanjang"? Apakah Anda mencoba menduplikasi dan membuat salinan sinyal Anda (tiling) atau ingin meng-upample 5x atau Anda ingin merekamnya 5x lebih lama? Apakah sinyal Anda periodik? Saya pikir pertanyaan yang lebih konkret dan didefinisikan dengan baik diperlukan dan contoh minimal dari apa yang Anda coba capai pasti akan membantu.
Lorem Ipsum
1
arti ekstensi berarti interpolasi? pertanyaannya tidak terlalu jelas.
Sriram
Tidak pernah menyadari itu bisa berarti banyak hal ... Akan mencoba dan membuatnya lebih jelas, pada dasarnya saya ingin memiliki sinyal 1-D sampel pada tingkat yang sama, tetapi untuk jangka waktu yang lebih lama.
PearsonArtPhoto
1
@endolith: Apakah itu memperbaiki keadaan?
PearsonArtPhoto

Jawaban:

16

Tergantung pada bahan sumbernya, metode interpolasi spektral berbasis DCT yang dijelaskan dalam makalah berikut ini terlihat menjanjikan:

lk, HG, Güler S. "Transformasi dan interpolasi sinyal berdasarkan sintesis DCT yang dimodifikasi" , Pemrosesan Sinyal Digital, Artikel dalam Pers, 2011.

Ini salah satu gambar dari makalah yang menunjukkan contoh interpolasi:

masukkan deskripsi gambar di sini

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

datageist
sumber
1
Sayangnya tautannya sudah mati. Saya hanya dapat menemukan unduhan berbayar ini .
knedlsepp
@knedlsepp Tautan ini tampaknya memberikan kertas tanpa berada di belakang paywall.
Peter K.
18

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 lpcfungsi untuk memperkirakan koefisien LPC.

N = 150;    % Order of LPC auto-regressive model
P = 500;    % Number of samples in the extrapolated time series
M = 150;    % Point at which to start predicting

t = 1:P;

x = 5*sin(t/3.7+.3)+3*sin(t/1.3+.1)+2*sin(t/34.7+.7); %This is the measured signal

a = lpc(x, N);

y = zeros(1, P);

% fill in the known part of the time series
y(1:M) = x(1:M);

% in reality, you would use `filter` instead of the for-loop
for ii=(M+1):P      
    y(ii) = -sum(a(2:end) .* y((ii-1):-1:(ii-N)));
end

plot(t, x, t, y);
l = line(M*[1 1], get(gca, 'ylim'));
set(l, 'color', [0,0,0]);
legend('actual signal', 'extrapolated signal', 'start of extrapolation');

Tentu saja, dalam kode nyata Anda akan menggunakan filteruntuk menerapkan ekstrapolasi, dengan menggunakan koefisien LPC asebagai filter IIR dan pra-memuat nilai jangka waktu yang diketahui ke dalam kondisi filter; sesuatu seperti ini:

% Run the initial timeseries through the filter to get the filter state 
[~, zf] = filter(-[0 a(2:end)], 1, x(1:M));     

% Now use the filter as an IIR to extrapolate
y((M+1):P) = filter([0 0], -a, zeros(1, P-M), zf); 

Berikut hasilnya:

Contoh LPC

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 lpcke arburgdalam hasil kode di atas hasil sebagai berikut:

Ekstrapolasi menggunakan metode Burg

Kode tersedia di sini: https://gist.github.com/2843661

nibot
sumber
H(z)=b(z)/a(z)
@ Emre Apakah ada cara untuk meningkatkan ekstrapolasi?
nibot
Seperti yang dikatakan @chinnu, cara mudah adalah memberi makan output ke input.
Emre
2
Baiklah, Anda membuat saya menjalankan MATLAB: P Masalahnya dapat dihindari dengan menggunakan algoritma estimasi AR yang berbeda; cukup ganti a=lpc(x,N)dengan a=arburg(x,N). Untuk diskusi (kering) tentang algoritma AR, lihat Mengapa Yule-Walker Tidak boleh Digunakan untuk Pemodelan Autoregresif
Emre
1
Ini jelas agak terlambat, tetapi ada masalah dengan pengaturan Anda. Anda memberikan serangkaian waktu penuh x( Ppengukuran) untuk lpc(atau arburg) ketika memperkirakan koefisien model. Untuk ekstrapolasi per pertanyaan awal, Anda harus benar-benar hanya mendasarkan estimasi ini pada Mpengukuran pertama . Memberikan poin waktu lebih sedikit menghasilkan ekstrapolasi yang lebih rendah, tetapi masih bekerja dengan cukup baik.
Chris C
6

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.

chinnu
sumber
6

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 .

Phonon
sumber
(Bertahun-tahun kemudian) algoritma lain untuk menemukan beberapa komponen frekuensi adalah pembalikan Harmonik .
denis