मैं 1D सिग्नल को एक्सट्रपलेशन कैसे कर सकता हूं?


25

मेरे पास कुछ लंबाई का संकेत है, 1000 नमूने कहें। मैं इस सिग्नल को 5000 नमूनों तक विस्तारित करना चाहूंगा, मूल (यानी, मैं भविष्यवाणी करना चाहता हूं कि सिग्नल क्या होगा अगर मैं इसे लंबे समय तक नमूना करना जारी रखता हूं)। संकेत एक साथ जोड़े गए कई साइनसोइडल घटकों से बना है।

पहले जो तरीका मेरे पास आया, वह था पूरे एफएफटी को ले जाना, और उसका विस्तार करना, लेकिन यह 1001 फ्रेम पर एक बहुत मजबूत असंतोष छोड़ देता है। मैंने भी केवल चोटियों के पास स्पेक्ट्रम के हिस्से का उपयोग करने पर विचार किया है, और जबकि ऐसा लगता है संकेत को कुछ हद तक सुधारें, यह मुझे नहीं लगता कि चरण सही होने की गारंटी है। इस सिग्नल को बढ़ाने के लिए सबसे अच्छा तरीका क्या है?

यहाँ कुछ MATLAB कोड है जो मैं चाहता हूँ की एक आदर्श विधि दिखा रहा है। बेशक, मुझे पहले से नहीं पता होगा कि वास्तव में 3 साइनसोइडल घटक हैं, न ही उनके सटीक चरण और आवृत्ति। मैं यह सुनिश्चित करना चाहता हूं कि फ़ंक्शन निरंतर हो, कि हम जंप न करें क्योंकि हम 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);

मूल रूप से, हरी रेखा को देखते हुए, मैं नीली रेखा खोजना चाहता हूं। यहाँ छवि विवरण दर्ज करें


3
क्या यह एक छवि को छेड़ने, एक आकाश विस्तार, या कुछ और जैसा कुछ करने के संदर्भ में है? दूसरे शब्दों में, क्या किनारों पर "चिकनी" होने के अलावा विस्तार के लिए कोई अन्य गुणवत्ता उपाय हैं?
datageist

3
आपका प्रश्न स्पष्ट नहीं है। "विस्तार" से आपका क्या तात्पर्य है? क्या आप अपने सिग्नल की कॉपी (नकल) की नकल और कैटेनेट करने की कोशिश कर रहे हैं या क्या आप इसे 5x से कम करना चाहते हैं या क्या आप इसे 5x से अधिक समय तक रिकॉर्ड करना चाहते हैं? क्या आपका संकेत आवधिक है? मुझे लगता है कि एक अधिक ठोस और अच्छी तरह से परिभाषित प्रश्न आवश्यक है और जो आप प्राप्त करने की कोशिश कर रहे हैं उसका एक न्यूनतम उदाहरण निश्चित रूप से मदद करेगा।
लोरम इप्सम

1
क्या विस्तार का मतलब प्रक्षेप है? प्रश्न बहुत स्पष्ट नहीं है।
श्रीराम

कभी महसूस नहीं किया गया कि यह बहुत सारी चीजों का मतलब हो सकता है ... यह कोशिश करेगा और इसे स्पष्ट कर देगा, मूल रूप से मैं 1-डी सिग्नल को उसी दर पर नमूना करना चाहता हूं, लेकिन लंबे समय तक।
PearsonArtPhoto

1
@endolith: क्या इससे चीजें सुधरती हैं?
PearsonArtPhoto

जवाबों:


16

स्रोत सामग्री के आधार पर, निम्नलिखित पेपर में वर्णित डीसीटी-आधारित वर्णक्रमीय प्रक्षेप विधि आशाजनक दिखती है:

lk, HG, Güler S. "संशोधित डीसीटी संश्लेषण पर आधारित सिग्नल ट्रांसफॉर्मेशन और इंटरपोलेशन" , डिजिटल सिग्नल प्रोसेसिंग, आर्टिकल इन प्रेस, 2011।

यहाँ प्रक्षेप के उदाहरण दिखाते हुए कागज़ के एक आंकड़े हैं:

यहाँ छवि विवरण दर्ज करें

खोए हुए खंडों की पुनर्प्राप्ति के लिए तकनीक के अनुप्रयोग ( जैसे 4.2। खोई हुई अवधि का संश्लेषण ) संभवतः एक्सट्रपलेशन के लिए सबसे अधिक प्रासंगिक हैं। दूसरे शब्दों में, मौजूदा स्रोत सामग्री के एक टुकड़े को पकड़ो, नाटक करें कि आपके द्वारा चुने गए किनारे और मनमाने खंड के बीच एक खो गया खंड है, फिर "लापता" भाग को "फिर से संगठित करें" (और शायद आपके अंत में उपयोग किए गए टुकड़े को छोड़ दें)। यह प्रतीत होता है कि तकनीक का एक और भी सरल अनुप्रयोग स्रोत सामग्री को मूल रूप से लूप करने के लिए काम करेगा ( उदाहरण 3.1। वर्णक्रमीय आयाम का प्रक्षेप )।


1
अफसोस की बात है कि लिंक मर चुका है। मैं केवल यह भुगतान डाउनलोड पा सकता हूं ।
knedlsepp

@knedlsepp यह लिंक पेवेल के बिना पेपर देने के लिए प्रतीत होता है।
पीटर के.एच.

18

मुझे लगता है कि रैखिक भविष्य कहनेवाला कोडिंग (अन्यथा एक ऑटो-प्रतिगामी चलती औसत के रूप में जाना जाता है ) वह है जो आप देख रहे हैं। LPC टाइम श्रृंखला के लिए एक लीनियर मॉडल को पहले फिटिंग करके टाइम सीरीज़ को एक्सट्रापोल करती है, जिसमें प्रत्येक सैंपल को पिछले सैंपलों का एक लीनियर संयोजन माना जाता है। मौजूदा समय श्रृंखला के लिए इस मॉडल को फिट करने के बाद, यह एक स्थिर (-) शक्ति स्पेक्ट्रम को बनाए रखते हुए आगे के मूल्यों को बाहर निकालने के लिए आगे बढ़ाया जा सकता है।

यहां lpcLPC गुणांक का अनुमान लगाने के लिए फ़ंक्शन का उपयोग करते हुए मतलब में एक छोटा सा उदाहरण है ।

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

बेशक, वास्तविक कोड में आप filterएक्सपीआर को लागू करने के लिए एलपीसी गुणांक का उपयोग करके, aआईआईआर फिल्टर के रूप में और ज्ञात समय मानों को फ़िल्टर स्थिति में पूर्व-लोड करके उपयोग करेंगे; कुछ इस तरह:

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

यहाँ उत्पादन है:

LPC उदाहरण

यह एक उचित काम करता है, हालांकि भविष्यवाणी किसी कारण से समय के साथ मर जाती है।

मैं वास्तव में एआर मॉडल के बारे में ज्यादा नहीं जानता और अधिक जानने के लिए उत्सुक भी होगा।

-

संपादित करें: @china और @Emre सही हैं, बर्ग विधि LPC की तुलना में बहुत बेहतर काम करती है। बस उपरोक्त कोड में बदलने lpcसे arburgनिम्नलिखित परिणाम मिलते हैं:

बर्ग विधि का उपयोग करते हुए एक्सट्रैपलेशन

कोड यहां उपलब्ध है: https://gist.github.com/2843661


एच(z)=(z)/(z)

@Emre क्या एक्सट्रपलेशन को बेहतर बनाने का एक तरीका है?
निबोट

जैसा कि @chinnu कहते हैं, आसान तरीका आउटपुट को इनपुट में फीड करना है।
एम्रे

2
ठीक है, आपने मुझे MATLAB में आग लगा दी: पी एक अलग एआर अनुमान एल्गोरिथ्म का उपयोग करके समस्या से बचा जा सकता है; बस a=lpc(x,N)द्वारा प्रतिस्थापित करें a=arburg(x,N)। एआर एल्गोरिदम पर एक (सूखा) चर्चा के लिए देखें क्यों यूल-वाकर चाहिए नहीं autoregressive मॉडलिंग के लिए इस्तेमाल किया
Emre

1
यह स्पष्ट रूप से थोड़ा देर से है, लेकिन आपके सेटअप में कोई समस्या है। आप का पूरा समय श्रृंखला प्रदान करते हैं x( Pकरने के लिए माप) lpc(या arburg) मॉडल गुणांक का आकलन करते हैं। मूल प्रश्न के प्रति एक्सट्रपलेशन के लिए, आपको पहले Mमाप पर केवल इस अनुमान को आधार बनाना चाहिए । कम समय के अंक प्रदान करने से एक हीनता का परिणाम होता है, लेकिन फिर भी यथोचित कार्य करता है।
क्रिस सी

6

एलपी गुणांक का अनुमान लगाने के लिए बर्ग की विधि का उपयोग करके 1-डी 'एक्सट्रैपलेशन' काफी सरल है। एक बार एलपी गुणांक उपलब्ध होने के बाद कोई भी आसानी से फिल्टर लगाकर समय के नमूनों की गणना कर सकता है। जिन नमूनों की भविष्यवाणी बर्ग के साथ की जाती है वे अगली बार आपके इनपुट समय खंड के नमूने हैं।


6

यदि आप पूरी तरह से सुनिश्चित हैं कि सिग्नल के लिए केवल कुछ आवृत्ति घटक हैं, तो आप यह जानने के लिए संगीत एल्गोरिथ्म की कोशिश कर सकते हैं कि आपके सिग्नल में कौन सी फ्रीक्वेंसी निहित हैं और वहां से काम करने की कोशिश करें। मुझे पूरा यकीन नहीं है कि इसे पूरी तरह से काम करने के लिए बनाया जा सकता है।

इसके अतिरिक्त, क्योंकि आपका डेटा पूरी तरह से नियतात्मक है, आप किसी प्रकार के गैर-रेखीय भविष्यवक्ता के निर्माण की कोशिश कर सकते हैं, अपने मौजूदा डेटा सेट का उपयोग करके इसे प्रशिक्षित कर सकते हैं और इसे बाकी हिस्सों को एक्सट्रपलेट कर सकते हैं।

सामान्य तौर पर यह एक एक्सट्रपलेशन समस्या है, क्या आप Google को फूरियर के एक्सट्रपलेशन की तरह कुछ करना चाहते हैं ।


(वर्षों बाद) कुछ आवृत्ति घटकों को खोजने के लिए एक और एल्गोरिदम हार्मोनिक उलटा है
डेनिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.