Вопрос по преобразованию Гильберта

Аватара пользователя
mbk
Сообщения: 15
Зарегистрирован: 18 июн 2012, 11:41

Re: Вопрос по преобразованию Гильберта

Сообщение mbk »

Вопрос : удвоить спектр в положительной области частот - как правильно удваивать положительную часть спектра?
После прямого преобразования получаем комплексный массив. Удваивать как сумму комплексных чисел или удваивать отдельно реальную и отдельно мнимую части в массиве?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 938
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Вопрос по преобразованию Гильберта

Сообщение Бахурин Сергей »

удваивать каждое комплексное число (с = a+jb тогда 2c = 2a+j*2b)

Gipson
Сообщения: 7
Зарегистрирован: 25 май 2013, 08:39

Re: Вопрос по преобразованию Гильберта

Сообщение Gipson »

Допустим у меня есть сигнал 1Гц-20кГц дискретизированный с частотой 100кГц, из этого сигнала, путем фильтрации эллиптическим БИХ-фильтром выделяются частоты 12кГц-15кГц, необходимо получить спектр огибающей на этих частотах. Соответственно я собираюсь спроектировать фильтр Гильберта, с помощью которого получу в дальнейшем аналитический сигнал, и рассчитаю мгновенную амплитуду для получения огибающей.
Вопрос: Задался вопросом моделирования КИХ-фильтра Гильберта в среде Matlab, в литературе приводится, что он рассчитывается как ПФ с симметричными относительно Fд/4 (Fд - частота дискретизации) частотами полос пропускания, следовательно у меня Fд/4=25000Гц. Я задаю его полосу пропускания соответственно 12кГц-38кГц. и считаю фильтр. Так правильно, или все это делается иначе?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 938
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Вопрос по преобразованию Гильберта

Сообщение Бахурин Сергей »

а зачем полосовой фильтр? почему не сделать так http://www.dsplib.ru/content/quadosc/quadosc.html

Gipson
Сообщения: 7
Зарегистрирован: 25 май 2013, 08:39

Re: Вопрос по преобразованию Гильберта

Сообщение Gipson »

Если честно, то я с трудом представляю перенос всего что описано в статье из непрерывной в дискретную область, т.е. частота несущей будет f0=13.5 кГц (w0=2*pi*f0/Fд), затем я так понимаю реальный сигнал (1Гц - 20 кГц) необходимо умножить на sin и на cos с частотами w0*n*T. После всего прогоняем два получившихся сигнала через ФНЧ (КИХ?) с частотой среза 1,5 кГц, если не трудно можно ли поподробней объяснить, но только для дискретных сигналов :? . И еще вопрос: я так понимаю, при проведении всех манипуляций на выходе будет два сигнала Q и I, огибающая будет получена как Z=(Q^2+I^2)^0.5 - верно ли это?, и соответственно спектр огибающей можно получить проведя БПФ над Z с той-же частотой дискретизации, что и частотный сигнал?

Да, забыл, сигнал на частоте 12 кГц-15 кГц имеет амплитудную модуляцию, задачей является определить по спектру огибающей амплитуду и частоту модулирующего сигнала.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 938
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Вопрос по преобразованию Гильберта

Сообщение Бахурин Сергей »

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

Gipson
Сообщения: 7
Зарегистрирован: 25 май 2013, 08:39

Re: Вопрос по преобразованию Гильберта

Сообщение Gipson »

Бахурин Сергей писал(а):делается все абсолютно точно также только вместо непрерывных сигналов используются дискретные.
Т.е. то что я написал выше правильно?


Моделирую в matlab. Там нашел функцию hilbert, вот и заинтересовался преобразованием Гильберта для получения аналитического сигнала с целью выделения спектра огибающей. Нужно реализовать спектр огибающей для вибродиагностики на C++.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 938
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Вопрос по преобразованию Гильберта

Сообщение Бахурин Сергей »

вот пример который показывает как правильно выделять огибающую и измерять глубину АМ.
Попробуйте будут вопросы задавайте

Код: Выделить всё


close all; clear all; clc;

%% ИСХОДНЫЕ ДАННЫЕ
Fs = 100E3;         % частота дискретизации
f0 = 10E3;          % несущая частота

N = 16384;          % количество дискретных отсчетов
t = (0:N-1)/Fs;     % дискретное время.
frq = Fs*(0:N-1)/N - Fs/2;  % дискретная частота

%% ФОРМИРУЮ АМ НА ЧАСТОТЕ f0

sm  = cos(2*pi*100*t);  % модулирующий сигнал
mAM = 0.9;              % глубина АМ

s = (1+mAM.*sm).*cos(2*pi*f0*t); % AM сигнал на частоте f0

% рассчитываю спектр исходного сигнала и вывожу на график
S = fftshift(abs(fft(s))); 
figure; subplot(211);   plot(t, s); 
                        title('AM signal');
                        xlabel('time, sec');
                        
        subplot(212);   plot(frq, S);
                        title('spectr of AM signal');
                        xlabel('frequency, kHz');
                        
%% ПЕРЕНОС ПРИ ПОМОЩИ КВАДРАТУРНОГО ГЕТЕРОДИНА

i0 =  s.*cos(2*pi*f0*t);
q0 = -s.*sin(2*pi*f0*t);

%% ВЫДЕЛЕНИЕ ОГИБАЮЩЕЙ ПРИ ПОМОЩИ ФНЧ

[b a] = ellip(4, 0.1, 60, 0.1); % формирую ФНЧ

i = filter(b,a,i0); % фильтрую I канал 
q = filter(b,a,q0); % фильтрую Q канал 

z = i + 1i * q;     % выделенная комплексная огибающая

% рассчитываю спектр комплексной огибающей и вывожу на график
Z0 = fftshift(abs(fft(i0+1i*q0)));
Z  = fftshift(abs(fft(z)));
                        
figure; plot(frq, Z0, frq, Z, 'r');
        title('complex envelope spectr');
        xlabel('frequency, kHz');

%% ИЗМЕРЕНИЕ ГЛУБИНЫ АМ ИЗ ВЫДЕЛЕННОЙ ОГИБАЮЩЕЙ

amp = abs(z); % ам есть модуль огибающей z 

% отбрасываю половину модуля чтобы исклюсить переходной процесс фильтрации
amp = amp(end/2:end);

% рассчет глубины и вывод на печать
mam = (max(amp) - min(amp))/(max(amp) + min(amp));
fprintf('исходная глубина модуляции:    %.4f\n', mAM);
fprintf('измеренная глубина модуляции:  %.4f\n', mam);




Gipson
Сообщения: 7
Зарегистрирован: 25 май 2013, 08:39

Re: Вопрос по преобразованию Гильберта

Сообщение Gipson »

Спасибо огромное за пример!
Возник вопрос, если не известна несущая частота, то в моем случае я так понимаю выбирать ее как середину исследуемого диапазона частот 13,5 кГц?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 938
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Вопрос по преобразованию Гильберта

Сообщение Бахурин Сергей »

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

Ответить