DSPSYSTEM Теория и практика цифровой обработки сигналов

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » DSPSYSTEM Теория и практика цифровой обработки сигналов » Вопросы по цифровой обработки сигналов » Построение частотного спектра импульсно-периодического сигнала


Построение частотного спектра импульсно-периодического сигнала

Сообщений 1 страница 12 из 12

1

Имеется сигнал, полученный суперпозицией множества компонент, каждая из которых представляет собой периодические всплески в виде, скажем, гауссианы (или ее производной).
Период следования всплесков T значительно превосходит ширину самого всплеска t, например, T=100*t
Компоненты различаются значением периода T, и ставится задача построить частотный спектр (периодограмму) такого сигнала, на котором бы можно было разрешить две близкие компоненты с T1 и T2=1.01*T1, причем на возможно более коротком сигнале.
Конечно, можно использовать классику - БПФ. Но: для разрешения компонент с помощью преобразования Фурье необходимо "подать на вход" сигнал такой длины, в котором эти две компоненты разошлись бы как минимум на один период T1.
В то же время, в силу того, что T=100*t, всплески этих двух компонент расходятся уже на первом периоде, т.е. гораздо более короткий сигнал уже несет в себе нужную информацию.
Попытка решить задачу "в лоб", т.е. сверткой модельного сигнала с компонентами различных частот, показывает, что это работает. Правда, спектр содержит артефакты, и это квадратный алгоритм.

Вопрос: существуют ли методы и быстрые алгоритмы построения частотного спектра для таких сигналов?
Отличие от Фурье, на мой взгляд, в том, что в качестве базы мог бы использоваться не синус, а некий имульсно-периодический сигнал, типа вейвлета, что ли.
Но как его правильно подобрать и обеспечить его ортогональность?

Заренее благодарю.

0

2

я бы хотел уточнить:
1. сами "всплески", которые идут с разными периодами, чем-то друг от друга отличаются? Если нет то как вы представляете выделение из 4 одинаковых всплесков 2 периода повторения? Если они отличаются по форме то можно наверное пытаться как то ускорить процесс анализа.
2. Чтобы померить период  повторения T вам, так или иначе, придется обрабатывать временно отрезок больший этого периода повторения T. Тогда, если я вас правильно понял вы получаете спектр сигнала и по гармонкам периодического сигнала пытаетесь оценить период повторения? Если да то как вы отличаете гармоники одного периодического сигнала от второго?

Было бы здорово посмотреть модель ваших сигналов, думаю это бы внесло ясность.

0

3

Всплески компонент с разными периодами не отличаются друг от друга по форме и ширине, только по интенсивности и фазе (каждая компонента имеет свою интенсивность и фазу).

Если нет то как вы представляете выделение из 4 одинаковых всплесков 2 периода повторения?

Не совсем понял вопрос. Вы имеете в виду, как различить гармоники?

Тогда, если я вас правильно понял вы получаете спектр сигнала и по гармонкам периодического сигнала пытаетесь оценить период повторения? Если да то как вы отличаете гармоники одного периодического сигнала от второго?

Попробую внести ясность. Спектр нужно получить в узкой полосе, т.е. в сигнале замешаны компоненты с пероидами Tmin<T<Tmax, где Tmax<2*TMin.
(при Tmin=2*TMax - уже получаем гармонику). Сигнал представлен n пероидами Tmax, причем n<N, где N - кол-во периодов, необходимых для разрешения всех компонент с помощью БПФ.
Частоты двух самых близких компонент T1<T2, которые нужно разрешать, отличаются на 1 ppm - т.е. для использования БПФ нужен сигнал длиной T2*1E+6.
Свойства сигнала, о которых писал выше, позволяют разрешить эти компоненты на значительно более коротком сигнале, но это все же как минимум T2*1E+4 периодов, а не 2 и не 4, как вы пишете.

0

4

Пример модельного сигнала выложен здесь
http://i40.tinypic.com/2vdphyb.gif
упрощенно показаны компоненты сигнала

Отредактировано Vasily (2010-05-17 15:30:37)

0

5

так вот вопрос если есть сигнал А и B то вы имеете их сумму. КАк вы из суммы выделите период сигнала A и B

0

6

Из вашего рисунка следует, что сигнал B представлен одним периодом, всего двумя всплесками. Этого явно маловато:)

Если же вы все-таки имеете в виду сигнал более длинный (а на рисунке показан только фрагмент), то выделение обоих периодов происходит следующим образом:
Производим свертку суммарного сигнала A+B с ядром, которое представляет собой сигнал, такой же как A или В, но период которого варьируется.
Делаем это K раз, соответственно, для K значений периода. Каждый раз интегрируем свернутый сигнал и получаем одну точку на периодограмме.
На значениях, соответсвующих периодам сигналов A и B, получаем на периодограмме пики - и периоды выделены.
Это - так называемая "корреляционная модель" построения спектра. Конечно, помимо двух наиболее интенсивных пиков для А и В, мы будем наблюдать гармоники, и, что хуже, артефакты.

Суть моего вопроса в том, что свертывать можно не обязательно с ядром, аналогичным компоненте A или В, а с более правильной кривой-вейвлетом (чтобы свести к нулю артефакты).
Кроме того, расчет такой свертки "в лоб" - это крайне неэффективный подход в плане кол-ва операций. Поэтому ищу быстрый алгоритм.

0

7

спектр периодического сигнала всегда линейчатый, причем гармоники спектра будут отстоять друг от друга на величину 1/T, где T - период повторения. Можно взять спектр суммарного сигнала A+B и сравнить его со спектром  A и со спектром B (они могут быть рассчитаны заранее т.к. предполагается что мы их периоды знаем). После взять ОБПФ и получим сигнал A и сигнал B в отдельности. Для нормального функционирования алгоритма требуется одно БПФ на длину содержащуюю несколько периодов повтрения. Возможно это будет быстрее чем делать свертку. Вейвлеты это тоже фильтры и они также требуют свертки. Поэтому надо просчитать все возможные варианты и выбрать тот который наиболее эффективный.
Если надо пример как обработать через БПФ то пишите

0

8

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

podalirius написал(а):

Можно взять спектр суммарного сигнала A+B и сравнить его со спектром  A и со спектром B (они могут быть рассчитаны заранее т.к. предполагается что мы их периоды знаем)

Как это? Откуда мы знаем периоды А и В? Мы решаем задачу поиска этих периодов. Также и спектры компонент А и В мы построить не можем, так как они нам по-отдельности недоступны.
Кроме того, напоминаю:

Vasily написал(а):

Имеется сигнал, полученный суперпозицией множества компонент

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

0

9

Vasily написал(а):

Как это? Откуда мы знаем периоды А и В? Мы решаем задачу поиска этих периодов. Также и спектры компонент А и В мы построить не можем, так как они нам по-отдельности недоступны.

тогда возвращаемся к моему рисунку который я приводил выше и снова пытаемся из суммы A+B выделить A и B не зная периода. Я думаю что что в такой постановке задача не решится если не известны периоды. Если есть a+b и я говорю что a+b = 10, то можно придумать массу вариантов a и b при которых a+b = 10. И если внимательно присмотреться к моему рисунку, то можно заметить что если на нижнем графике выбросить центральный всплеск то будет замечательная периодическая картинка, только к 1 и второй она не имеет отношения никакого.

0

10

podalirius написал(а):

тогда возвращаемся к моему рисунку который я приводил выше и снова пытаемся из суммы A+B выделить A и B не зная периода

Похоже, мы ходим по кругу, либо вы не читаете мои посты.

Vasily написал(а):

Из вашего рисунка следует, что сигнал B представлен одним периодом, всего двумя всплесками. Этого явно маловато:)
Если же вы все-таки имеете в виду сигнал более длинный (а на рисунке показан только фрагмент), то выделение обоих периодов происходит следующим образом:
Производим свертку суммарного сигнала A+B с ядром, которое представляет собой сигнал, такой же как A или В, но период которого варьируется.
Делаем это K раз, соответственно, для K значений периода. Каждый раз интегрируем свернутый сигнал и получаем одну точку на периодограмме.
На значениях, соответсвующих периодам сигналов A и B, получаем на периодограмме пики - и периоды выделены.

podalirius написал(а):

можно заметить что если на нижнем графике выбросить центральный всплеск то будет замечательная периодическая картинка

Попробуйте продолжить свой сигнал еще на 10 периодов, и вы увидите, что свертка все равно "поймает" оба периода. Кстати говоря, точно так же работет и преобразование Фурье, только свертка производится с гармоническими функциями.

Попробую переформулировать свой вопрос:
Может быть, кто-нибудь подскажет другие области, где встречается подобная задача? Есть ли проверенные методы решения?

0

11

Да согласен так будет работать, но вот делать кучу сверток это очень накладно. Лучше обработку вести в частотной области: взяли один раз спектр и потом просто гармоники периодического сигнала. Только вы двигаете период во времени я предлагаю это же самое делать по частоте и строить туже периодограмму но только по частоте (интеграл свертки есть простое произведение спектров, интегрирование свернутого сигнала во времени и по частоте одно и то же согласно равенству парсеваля). Если форма сигнала известна, то можно спектр опорного сигнала не рассчитывать а производить суммирование в частотной области нужных гармоник. Пример в матлабе показывающий принцип работы :

Код:
n = 0:6;
s0 = sin(2*pi*n/6); %единичный паттерн


%первый периодический сигнал
s1 = [s0 zeros(1,121)];
for(i = 1:32)
    s1 = [s1 s0 zeros(1,121)];
end

%второй периодический сигнал
s20 = [zeros(1,78) s0];
while(length(s20)<length(s1)) 
    s20 = [s20 zeros(1,78) s0];
end;
s2 = s20(1:length(s1));

%третий периодический сигнал
s30 = [zeros(1,52) s0];
while(length(s30)<length(s1)) 
    s30 = [s30 zeros(1,52) s0];
end;
s3 = s30(1:length(s1));

s = s1+s2;  %сумма первого и второго


S = abs(fft(s));    %спектр суммы
S1 = abs(fft(s1));  %спектр первого
S2 = abs(fft(s2));  %спектр второго
S3 = abs(fft(s3));  %спектр третьего

subplot(311), plot(1:length(s),S)   % спектр 1+2
subplot(312), plot(1:length(s),S1)  % спектр 1
subplot(313), plot(1:length(s),S2)  % спектр 2

K1 = sum(S.*S1)/sum(S1.^2)  % к-т корреляции 1+2 и 1 (близок к 1)
K2 = sum(S.*S2)/sum(S2.^2)  % к-т корреляции 1+2 и 2 (близок к 1)
K3 = sum(S.*S3)/sum(S3.^2)  % к-т корреляции 1+2 и 3 (близок к 0, т.к. 3 нет в сумме)

Соответственно если форма известна, то можно заранее рассчитать все опорные спектры S1 S2 S3 и просто рассчитывать к-ты корреляции K1 K2 K3

0

12

Спасибо, мысль интересная. К тому же, если мы берем S=abs(fft(s)), S1=abs(fft(s1)) то рассчитанный далее коэффициент корреляции K1 = sum(S.*S1)/sum(S1.^2) будет инвариантен к фазам сигналов S и S1 - одной проблемой меньше.

0


Вы здесь » DSPSYSTEM Теория и практика цифровой обработки сигналов » Вопросы по цифровой обработки сигналов » Построение частотного спектра импульсно-периодического сигнала