|
Вычисление огибающей, Вопрос по преобразованию Гильберта |
|
|
|
Oct 29 2008, 16:46
|
Группа: Новичок
Сообщений: 8
Регистрация: 4-04-08
Пользователь №: 36 466

|
Необходимо вычислить огибающую дискретного сигнала. Для этого использую преобразование Гильберта следующим образом: 1). Вычисляю БПФ X(f) по сигналу x(k). 2). Считаю преобразование Гильберта: x'(k) = (2 / F_d) * Im (sum_{i=1}^{N/2}[X(n) * exp^{2*pi*k*n * i/ N}] ), k = 0..N-1, где F_d - частота дискретизации. 3). Нахожу аналитический сигнал z = x + ix'. 4). Модуль |z| и будет огибающей. На практике получается, что в начальные и конечные моменты времени |z| имеет большие скачки, определенно не являющиеся огибающей. Подскажите, является ли такой эффект нормальным результатом или я все же напортачил где-то в вычислениях? И если это нормально, то каким способом лучше склеить огибающие подряд идущих сигналов? Дело в том, что для разных сигналов длина этих "выбросов" разная. На рисунке слева сигналы во временной области, справа ДПФ. Сигнал x[i]= sin(2*pi*100*i) * exp(-100 *i). Частота дискретизации 1000, длина x - 128. Построчно: 1). Слева: Входной x (Красный) и расчитанная огибающая |z|(Голубой) На конце значительное расхождение с сигналом. Справа: ДПФ входного. 2). Слева: Обратное преобразование Фурье от предыдущего ДПФ (синий)(посчитал для проверки) и преобразование Гильберта(Зеленый). Справа ДПФ от ОДПФ  . 3). Слева: преобразование Гильберта (Зеленый). Справа: ДПФ от преобразования Гильберта. Спасибо за ответ
Сообщение отредактировал iggylike - Oct 29 2008, 16:47
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Nov 3 2008, 12:58
|
Группа: Новичок
Сообщений: 8
Регистрация: 4-04-08
Пользователь №: 36 466

|
alex_os: в последнем вашем ответе, который ушел в небытие, вы говорили про такой способ: 1). Посчитать хороший фильтр гильберта (например, Парксом-МакКлеланом). 2). Взять ДПФ от фильтра. Как я понял, что бы получить частотную характеристику. 3). Преремножить с S, вместо того, что бы обнулять S. 4). Дальше все так же (...как я делал).
Вобщем, не очень понял суть этого метода. Если посчитать Парксом-МакКлеланом фильтр, то разве на выходе этого фильтра мы не получим мнимый сигнал?
Сообщение отредактировал iggylike - Nov 3 2008, 13:02
|
|
|
|
|
Nov 4 2008, 11:40
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(iggylike @ Nov 3 2008, 15:58)  alex_os: в последнем вашем ответе, который ушел в небытие, вы говорили про такой способ: 1). Посчитать хороший фильтр гильберта (например, Парксом-МакКлеланом). 2). Взять ДПФ от фильтра. Как я понял, что бы получить частотную характеристику. 3). Преремножить с S, вместо того, что бы обнулять S. 4). Дальше все так же (...как я делал).
Вобщем, не очень понял суть этого метода. Если посчитать Парксом-МакКлеланом фильтр, то разве на выходе этого фильтра мы не получим мнимый сигнал? Конечно. Вы же хотели в частотной области считать? Еще, если в частотной области считать может быть меньше MIPS потребуется (особенно если фильтр длинный).
--------------------
ну не художники мы...
|
|
|
|
|
Nov 5 2008, 08:27
|
Группа: Новичок
Сообщений: 8
Регистрация: 4-04-08
Пользователь №: 36 466

|
На сколько я понимаю, фильтр Гильберта имеет асимметричную частотную характеристику, тоесть обрезает отрицательные частоты, но я ни как не пойму, как его строить в матлабе. Код h = remez(30,[0.1 0.9],[1 1],'Hilbert'); f = fft ([zeros(1, 30), h, zeros(1, 30)]); plot (abs(f)); Характеристика вс равно симметрична. Может потому что надо использовать firpm? Но у меня старый матлаб, и таковой нет
Эскизы прикрепленных изображений
|
|
|
|
|
Nov 5 2008, 11:07
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(iggylike @ Nov 5 2008, 11:27)  На сколько я понимаю, фильтр Гильберта имеет асимметричную частотную характеристику, тоесть обрезает отрицательные частоты, но я ни как не пойму, как его строить в матлабе. Код h = remez(30,[0.1 0.9],[1 1],'Hilbert'); f = fft ([zeros(1, 30), h, zeros(1, 30)]); plot (abs(f)); Характеристика вс равно симметрична. Может потому что надо использовать firpm? Но у меня старый матлаб, и таковой нет Чтобы отфильтровать "отрицательные" частоты коэффициенты должны комплексные: Код h = remez(30,[0.1 0.9],[1 1],'Hilbert'); h = 1j*h; h(16) = 1; % единственный вещественный коэффициент =1 f = fft ([zeros(1, 30), h, zeros(1, 30)]); plot (abs(f));
--------------------
ну не художники мы...
|
|
|
|
Сообщений в этой теме
iggylike Вычисление огибающей Oct 29 2008, 16:46 DRUID3 А просто модуль отсчетов нельзя? Я так понял сигна... Oct 29 2008, 17:09 alex_os Цитата(iggylike @ Oct 29 2008, 19:46) Нео... Oct 29 2008, 19:51 iggylike To DRUID3:
ЦитатаА просто модуль отсчетов нельзя?... Oct 30 2008, 08:54 sergunas Цитата(iggylike @ Oct 30 2008, 11:54) Но ... Oct 30 2008, 09:44 alex_os Цитата(iggylike @ Oct 30 2008, 11:54) To ... Oct 30 2008, 10:11 DRUID3 Блин, люди, у вас задача сделать тот или иной АМ д... Nov 5 2008, 20:24 iggylike Кругом, в том числе на www.dsprelated.com, народ г... Nov 6 2008, 09:24  DRUID3 Цитата(iggylike @ Nov 6 2008, 11:24) Круг... Nov 6 2008, 13:07   alex_os Цитата(DRUID3 @ Nov 6 2008, 16:07) вывод ... Nov 6 2008, 13:47 petrov Непонятно в чём проблема то взять и в матлабе в fd... Nov 6 2008, 10:50 iggylike to: petrov
ЦитатаМожно без гильбертов всяких квадр... Nov 6 2008, 11:15 petrov Цитата(iggylike @ Nov 6 2008, 14:15) to: ... Nov 6 2008, 11:51 iggylike Всем спасибо за ответы, наконец-то более менее раз... Nov 6 2008, 13:01
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|