Как мне экстраполировать 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);

В основном, учитывая зеленую линию, я хочу найти синюю линию. введите описание изображения здесь

PearsonArtPhoto
источник
3
Это в контексте мозаичного изображения, создания чего-то вроде расширения неба или чего-то еще? Другими словами, есть ли другие качественные показатели для расширения, кроме того, что оно «гладкое» по краям?
Datageist
3
Ваш вопрос не ясен. Что вы подразумеваете под «расширением»? Вы пытаетесь дублировать и наклеивать копии вашего сигнала (тайлинг) или хотите увеличить его в 5 раз, или вы хотите записать его в 5 раз дольше? Ваш сигнал периодический? Я думаю, что нужен более конкретный и четко определенный вопрос, и минимальный пример того, чего вы пытаетесь достичь, определенно поможет.
Lorem Ipsum
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в качестве фильтра БИХ и предварительно загружая известные значения временных рядов в состояние фильтра; что-то вроде этого:

% 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, и было бы интересно узнать больше.

-

РЕДАКТИРОВАТЬ: @china и @Emre правы, метод Бург, кажется, работает намного лучше, чем LPC. Просто путем изменения lpcв arburgв приведенном выше коде дает следующие результаты:

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

Код доступен здесь: https://gist.github.com/2843661

nibot
источник
ЧАС(Z)знак равноб(Z)/a(Z)
@ Emre Есть ли способ улучшить экстраполяцию?
нибот
Как говорит @chinnu, самый простой способ - подать вывод на вход.
Эмре
2
Хорошо, вы заставили меня запустить MATLAB: P Эту проблему можно избежать, используя другой алгоритм оценки AR; просто заменить a=lpc(x,N)на a=arburg(x,N). Для (сухого) обсуждения алгоритмов AR см. Почему Yule-Walker не должен использоваться для авторегрессионного моделирования
Emre
1
Это, очевидно, немного поздно, но есть проблема с вашей настройкой. Вы предоставляете полный временной ряд x( Pизмерения) для lpc(или arburg) при оценке коэффициентов модели. Для экстраполяции по исходному вопросу вы должны основывать эту оценку только на первых Mизмерениях. Предоставление меньшего количества временных точек приводит к плохой экстраполяции, но все еще работает достаточно хорошо.
Крис С.
6

1-D «Экстраполяция» довольно проста с помощью метода БУРГА для оценки коэффициентов ЛП. Как только коэффициенты LP становятся доступными, можно легко вычислить выборки времени, применяя фильтр. Сэмплы, которые предсказываются с помощью Бургса, являются очередными сэмплами вашего входного временного сегмента.

chinnu
источник
6

Если вы абсолютно уверены, что в сигнале есть только несколько частотных компонентов, вы можете попробовать алгоритм MUSIC , чтобы выяснить, какие частоты содержатся в вашем сигнале, и попытаться работать оттуда. Я не совсем уверен, что это можно сделать, чтобы работать отлично.

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

В общем, это проблема экстраполяции. Возможно, вы захотите Google что-то вроде экстраполяции цены Фурье .

Phonon
источник
(Спустя годы) другим алгоритмом нахождения нескольких частотных составляющих является гармоническая инверсия .
Денис