1D sinyalini nasıl tahmin edebilirim?


25

Bir uzunlukta sinyal var, 1000 örnek. Bu sinyali, orjinali ile aynı hızda örneklenen 5000 örneğe uzatmak istiyorum (yani, daha uzun süre örneklemeye devam edersem sinyalin ne olacağını tahmin etmek istiyorum). Sinyal, birlikte eklenen birkaç sinüzoidal bileşenden oluşur.

İlk önce bana gelen yöntem FFT'nin tamamını almak ve genişletmek oldu, ancak bu 1001 çerçevesinde çok güçlü bir süreksizlik bırakıyor. Ayrıca, sadece spektrumun tepeler yakınındaki kısmını kullanarak da düşündüm. sinyali biraz iyileştirmek, bana fazın doğru olacağının garanti edilmediği anlaşılıyor. Bu sinyali uzatmanın en iyi yöntemi nedir?

İşte istediğim şeyin ideal bir yöntemini gösteren bazı MATLAB kodları. Tabii ki, tam olarak 3 sinüzoidal bileşen olduğunu, ne de onların tam faz ve sıklığını bilmiyorum. İşlevin sürekli olduğundan emin olmak istiyorum, nokta 501'e geçerken bir sıçrama olmadığından,

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

Temel olarak, yeşil çizgiyi göz önüne alındığında, mavi çizgiyi bulmak istiyorum. görüntü tanımını buraya girin


3
Bu, bir görüntüyü döşemek, gökyüzü uzatma gibi bir şey yapmak veya başka bir şey bağlamında mı? Başka bir deyişle, uzantı için kenarlarda "yumuşak" olmasının yanı sıra başka kalite önlemleri var mı?
datageist

3
Sorunuz net değil. "Uzat" derken ne demek istiyorsun? Sinyalin kopyalarını çoğaltmaya ve yakalamaya mı çalışıyorsunuz (döşeme) veya 5x örneklemek mi istiyorsunuz yoksa 5x daha uzun süre kaydetmek mi istiyorsunuz? Sinyaliniz periyodik mi? Daha somut ve iyi tanımlanmış bir sorunun gerekli olduğunu düşünüyorum ve elde etmeye çalıştığınız şeyin asgari bir örneği kesinlikle yardımcı olacaktır.
Lorem Ipsum

1
uzatma enterpolasyon anlamına gelir mi? soru çok açık değil.
Sriram

Bu kadar çok şey ifade edebileceğini asla anlamadım ... Daha açık ve net hale getirecek, temelde aynı hızda, ancak daha uzun bir süre için örneklenmiş bir 1-D sinyalinin olmasını istiyorum.
PearsonArtPhoto

1
@endolith: Bu işleri iyileştirir mi?
PearsonArtPhoto

Yanıtlar:


16

Kaynak malzemeye bağlı olarak, aşağıdaki yazıda açıklanan DCT bazlı spektral enterpolasyon yöntemi umut verici görünmektedir:

lk, HG, Güler S. "Değiştirilmiş DCT sentezine dayalı sinyal dönüşümü ve enterpolasyon" , Sayısal İşaret İşleme, Basım, 2011.

İşte kağıttan enterpolasyon örneği gösteren rakamlardan biri:

görüntü tanımını buraya girin

Tekniğin, kayıp bölümlerin geri kazanımı ( örneğin 4.2. Kayıp zift periyotlarının sentezi ) uygulamaları, muhtemelen ekstrapolasyon ile ilgilidir. Başka bir deyişle, mevcut kaynak materyalin bir parçasını alın, kenar ile seçtiğiniz rasgele segment arasında bir kayıp segment varmış gibi davranın, ardından "eksik" kısmı "yeniden yapılandırın" (ve belki de sonunda kullandığınız parçayı atın). Tekniğin daha basit bir uygulamasının, kaynak malzemeyi sorunsuz bir şekilde ilmeklemek için işe yarayacağı anlaşılmaktadır ( örn. 3.1. Spektral genlik enterpolasyonu ).


1
Ne yazık ki bağlantı öldü. Sadece bu ücretli indirmeyi bulabildim .
knedlsepp

@ knedlsepp Bu bağlantı , kağıdın bir ödeme duvarı arkasında olmadan ortaya çıktığı görülmektedir.
Peter K.

18

Bence lineer prediktif kodlama (aksi halde otomatik gerileyen hareketli ortalama olarak bilinir ) aradığınız şeydir. LPC, önce her numunenin önceki numunelerin lineer bir kombinasyonu olarak kabul edildiği zaman serisine doğrusal bir model uygulayarak bir zaman serisini tahmin eder. Bu modeli mevcut zaman serisine yerleştirdikten sonra, sabit (?) Bir güç spektrumunu koruyarak diğer değerleri tahmin etmek için ileriye doğru çalıştırılabilir.

Matlab'da lpcLPC katsayılarını tahmin etme fonksiyonunu kullanarak küçük bir örnek .

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');

Elbette, gerçek kodda filter, ekstrapolasyonu uygulamak için, aIIR filtresi olarak LPC katsayılarını kullanarak ve bilinen zaman değerleri değerlerini filtre durumuna önceden yükleyerek kullanırsınız; böyle bir şey:

% 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); 

İşte çıktı:

LPC örneği

Tahmin makul bir iş çıkarsa da, tahmin bir sebepten dolayı zamanla sona eriyor.

Aslında AR modelleri hakkında fazla bir şey bilmiyorum ve daha fazla bilgi edinmek için merak ediyorum.

-

EDIT: @china ve @Emre haklı, Burg metodu LPC'den çok daha iyi çalışıyor gibi görünüyor. Basitçe yukarıdaki kodda değişiklik lpcyaparak arburgaşağıdaki sonuçları verir:

Burg metodu kullanılarak ekstrapolasyon

Kod burada bulunabilir: https://gist.github.com/2843661


LPC aslında AR, sans MA. Ekstrapolat sinyali "sönüyor" çünkü ekstrapolatörün transfer fonksiyonu zayıflamaya neden oluyor. H(z)=b(z)/a(z)
Emre

@Emre Ekstrapolasyonu iyileştirmenin bir yolu var mı?
nibot

@Chinnu'nun dediği gibi, kolay yol çıktıyı girdi içine beslemektir.
Emre

2
Tamam, beni ateşlettin. MATLAB: P Farklı bir AR tahmin algoritması kullanarak bu problemden kaçınılabilir; basitçe yerine a=lpc(x,N)göre a=arburg(x,N). AR algoritmaları hakkında (kuru) bir tartışma için, bkz. Yule-Walker Neden Otoregresif Modelleme İçin Kullanılmamalıdır?
Emre

1
Bu açıkçası biraz geç, ancak kurulumunuzla ilgili bir sorun var. Model katsayılarını tahmin ederken tam zamanlı x( Pölçümler) ila lpc(veya arburg) serisini sağlarsınız. Orijinal soru başına ekstrapolasyon için, bu tahminde gerçekten ilk Mölçümlere dayanmanız gerekir. Daha az zaman noktası sağlamak, düşük bir ekstrapolasyonla sonuçlanır, ancak yine de oldukça iyi çalışır.
Chris C,

6

1-D 'Ekstrapolasyon', LP katsayılarını tahmin etmek için BURG yöntemini kullanarak oldukça basittir. LP katsayıları uygun olduğunda, filtre uygulayarak zaman numunelerini kolayca hesaplayabilirsiniz. Burg'larla öngörülen örnekler, bir sonraki giriş zaman segmentinizin örnekleridir.


6

Sinyale yalnızca birkaç frekans bileşeni girdiğinden tamamen eminseniz, sinyalinizde hangi frekansların bulunduğunu bulmak için MUSIC algoritmasını deneyebilir ve oradan çalışmayı deneyebilirsiniz. Bunun kusursuz çalışması için yapılabileceğinden tam olarak emin değilim.

Ek olarak, verileriniz tamamen belirleyici olduğundan, bir tür doğrusal olmayan öngörücü oluşturmaya çalışabilir, mevcut veri kümenizi kullanarak onu eğitebilir ve geri kalanını tahmin etmesini sağlayabilirsiniz .

Genel olarak bu bir ekstrapolasyon problemidir, Google’a Fourier ekstrapolasyon fiyatı gibi bir şey isteyebilirsiniz .


(Yıllar sonra) Birkaç frekans bileşeni bulmak için başka bir algoritma Harmonik inversiyondur .
denis,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.