Як я екстраполюю 1D-сигнал?


25

У мене є сигнал деякої довжини, скажімо, 1000 зразків. Я хотів би поширити цей сигнал на 5000 зразків, відібраних з тією ж швидкістю, що й оригінал (тобто я хочу передбачити, який би сигнал був, якби я продовжував вибірку його протягом більш тривалого періоду часу). Сигнал складається з декількох синусоїдальних компонентів, доданих разом.

Спочатку до мене прийшов метод взяти весь FFT і розширити його, але це залишає дуже сильну розрив у кадрі 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
Ваше питання не ясно. Що ви маєте на увазі під "продовженням"? Ви намагаєтесь дублювати та катетувати копії свого сигналу (плитка) чи хочете збільшити вибірку на 5 разів чи хочете записати її на 5 разів довше? Ваш сигнал періодичний? Я думаю, що більш конкретне і чітко визначене питання необхідне, і мінімальний приклад того, що ви намагаєтеся досягти, безумовно, допоможе.
Лорем Іпсум

1
чи означає розширення інтерполяцію? Питання не дуже зрозуміле.
Шрірам

Ніколи не усвідомлював, що це може означати так багато речей ... Постараюсь зробити це зрозумілішим, в основному я хочу, щоб 1-D сигнал відбирався з тією ж швидкістю, але протягом більш тривалого періоду часу.
PearsonArtPhoto

1
@endolith: Це покращує це?
PearsonArtPhoto

Відповіді:


16

Залежно від вихідного матеріалу, метод спектральної інтерполяції на основі DCT, описаний у наступній роботі, виглядає перспективним:

lk, HG, Güler S. "Перетворення сигналів та інтерполяція на основі модифікованого синтезу DCT" , Цифрова обробка сигналів, Article in Press, 2011.

Ось одна з цифр із статті, що показує приклад інтерполяції:

введіть тут опис зображення

Застосування методики для відновлення втрачених сегментів ( наприклад, 4.2. Синтез періодів втрачених тонів ), ймовірно, є найбільш актуальним для екстраполяції. Іншими словами, візьміть фрагмент наявного вихідного матеріалу, зробіть вигляд, що між краєм та вибраним вами вибраним сегментом є загублений сегмент, а потім "реконструюйте" частину "відсутньої" (і, можливо, відкиньте частину, яку ви використали наприкінці). Здається, що навіть більш просте застосування методики спрацювало б безперешкодно закручувати вихідний матеріал ( наприклад, 3.1. Інтерполяція спектральної амплітуди ).


1
На жаль посилання мертва. Я міг знайти лише це платне завантаження .
knedlsepp

@knedlsepp Це посилання видає папір, не будучи позаду платної стіни.
Петро К.

18

Я думаю, що лінійне прогностичне кодування (інакше відоме як авторегресивне ковзаюче середнє ) - це те, що ви шукаєте. LPC екстраполює часовий ряд, спочатку пристосовуючи лінійну модель до часового ряду, в якому кожен зразок вважається лінійною комбінацією попередніх вибірок. Після пристосування даної моделі до існуючого часового ряду можна продовжити екстраполяцію подальших значень, зберігаючи нерухомий (?) Спектр потужності.

Ось невеликий приклад в Matlab, використовуючи lpcфункцію для оцінки коефіцієнтів 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');

Звичайно, у реальному коді ви б використовували filterдля здійснення екстраполяції, використовуючи коефіцієнти LPC aяк фільтр IIR та попередньо завантажуючи відомі значення часових рядів у стан фільтра; щось на зразок цього:

% 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

Це робить розумну роботу, хоча прогноз з певних причин відмирає з часом.

Я насправді мало знаю про моделі AR, і мені також цікаво дізнатись більше.

-

EDIT: @china і @Emre вірні, метод Burg виглядає набагато краще, ніж LPC. Просто шляхом зміни lpcв arburgв наведеному вище коді дає наступні результати:

Екстраполяція методом Бурга

Код доступний тут: https://gist.github.com/2843661


LPC насправді є AR, sans MA. Екстраполятний сигнал "відмирає", оскільки функція передачі екстраполятора викликає ослаблення. H(z)=b(z)/a(z)
Емре

@Emre Чи є спосіб поліпшити екстраполяцію?
nibot

Як говорить @chinnu, найпростішим способом є подача результатів на вхід.
Емре

2
Гаразд, ти змусив мене звільнити MATLAB: P Проблему можна уникнути, використовуючи інший алгоритм оцінки AR; просто замінити a=lpc(x,N)на a=arburg(x,N). Для (сухої) дискусії про алгоритми AR дивіться, чому Yule-Walker не слід використовувати для автоматичного моделювання
Емре

1
Це, очевидно, трохи пізно, але є проблема з налаштуванням. Ви надаєте повний часовий ряд від x( Pвимірювань) до lpc(або arburg) при оцінці модельних коефіцієнтів. Для екстраполяції по первинному питанню цю оцінку слід насправді базувати лише на перших Mвимірах. Забезпечення меншої кількості часових точок призводить до неповноцінної екстраполяції, але все ще працює досить добре.
Кріс C

6

1-D 'Екстраполяція' досить проста, використовуючи метод BURG для оцінки коефіцієнтів LP. Після того, як коефіцієнти LP будуть доступні, можна легко обчислити зразки часу, застосувавши фільтр. Вибірки, які прогнозуються за допомогою Burg's, - це наступні вибірки вашого часового відрізка.


6

Якщо ви повністю впевнені, що в сигналі є лише кілька частотних компонентів, ви можете спробувати алгоритм MUSIC , щоб дізнатися, які частоти містяться у вашому сигналі, і спробувати працювати звідти. Я не зовсім впевнений, що це може змусити себе працювати ідеально.

Крім того, оскільки ваші дані повністю детерміновані, ви можете спробувати створити якийсь нелінійний предиктор, тренувати його за допомогою наявного набору даних і дозволяти екстраполювати решту.

Загалом це проблема екстраполяції, чи не хочете ви від Google щось на зразок екстраполяції Фур'є .


(Через роки) ще одним алгоритмом пошуку декількох частотних компонентів є гармонійна інверсія .
denis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.