Перейти к содержанию
    

Сдвинуть сигнал на 90 градусов

Подскажите, какой фильтр лучше подойдет чтобы сдвинуть сигнал (все гармоники в спектре от 5 Гц до 2000 КГц) на 90 градусов, амплитуда в этом диапазоне желательно чтобы (почти) не менялась.

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

Смотрел на фильтр гильберта в Матлабе, но так и не понял как его прикрутить, и вообще то ли это.

1319559788___.thumb.jpg.38d9a22b57dcccf0401bd9768fa4b0af.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Фильтр Гильберта является идеальным фазовращателем. В идеальном случае у него АЧХ равна 1 во всей полосе частот. Им вы не сможете обеспечить полосовую фильтрацию. Здесь надо будет фильтровать сигнал, а затем использовать такой всепропускающий фильтр (с такой ФЧХ), чтобы после прохождения двух фильтров ФЧХ равнялась 90 градусам во всей полосе частот. То есть вам надо будет скорректировать ФЧХ полосового фильтра, при этом ещё обеспечить постоянный фазовый сдвиг в 90 градусов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так мне не надо фильтровать, надо только сдвинуть на 90 градусов в заданной полосе частот.

22 minutes ago, Grizzly said:

То есть вам надо будет скорректировать ФЧХ полосового фильтра, при этом ещё обеспечить постоянный фазовый сдвиг в 90 градусов.

А как это сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

35 минут назад, C2000 сказал:

Так мне не надо фильтровать, надо только сдвинуть на 90 градусов в заданной полосе частот

У идеального Гильберта будет сдвиг во всей полосе частот.

В реальности будет то, как вы получили при синтезе в Matlab. АЧХ не будет постоянна во всем диапазоне частот. В зависимости от вашей частоты дискретизации могут быть несколько зарезаны частоты по краям.

Понял, что вы хотите получить. Это невозможно теоретически. В реальности вы сможете получить линейную ФЧХ, но не постоянную.

https://dsp.stackexchange.com/questions/50563/phase-response-of-a-fir-hilbert-transformer

Если ничего фильтровать не надо, то нужное вам - это простое умножение на комплексную экспоненту exp(j*pi/2) = j.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, C2000 сказал:

Смотрел на фильтр гильберта в Матлабе, но так и не понял как его прикрутить, и вообще то ли это.

Да, это то. Только есть одна небольшая проблема - фильтр Гильберта для Fs = 8кГц и с полосой пропускания от 5Гц будет иметь приблизительно 2000-й порядок. Это если конечно у Вас на скриншоте не опечатка и Fs на самом деле не 8кГц а 8МГц (если судить из "все гармоники в спектре от 5 Гц до 2000 КГц"). Тогда все несколько хуже:) И это еще смотря сколько в цифрах вот это вот "чтобы (почти) не менялась", а то порядок может и подрасти:)

 

Вы лучше раскройте Вашу тайну и скажите что нужно получить в конечном итоге. Из чего и для чего. А дальше народ подтянется и может быть окажется, что и никакого Гильберта и не надо вовсе:)

 

Ну и конечно то, что:

3 часа назад, C2000 сказал:

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

делает задачу слегка малореализуемой, даже для Fs = 8кГц...

Изменено пользователем Самурай

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Grizzly сказал:

В идеальном случае у него АЧХ равна 1 во всей полосе частот.

Это не совсем так, даже в идеальном случае на нулевой частоте у фильтра Гильберта АЧХ = 0. А для дискретного фильтра Гильберта нечетного порядка АЧХ = 0 еще и на Fs/2. Иными словами - фильтр Гильберта это как минимум ФВЧ, а то и вовсе ПФ.

1 час назад, Grizzly сказал:

Понял, что вы хотите получить. Это невозможно теоретически. В реальности вы сможете получить линейную ФЧХ, но не постоянную.

Возможно. Я могу взять вещественный сигнал, например, синус с частотой 1кГц и дискретизацией 8кГц, пропустить его через фильтр Гильберта и получить на выходе опять же вещественный сигнал, но уже косинус 1кГц. Разумеется, косинусом он будет только по отношению к входному синусу, задержанному на задержку в фильтре Гильберта. А вот что я получу, если:

1 час назад, Grizzly сказал:

простое умножение на комплексную экспоненту exp(j*pi/2) = j

я не знаю:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, Самурай said:

Вы лучше раскройте Вашу тайну и скажите что нужно получить в конечном итоге. Из чего и для чего. А дальше народ подтянется и может быть окажется, что и никакого Гильберта и не надо вовсе:)

Нужно посчитать мощности в сети.

Активная просто, интеграл от U*I

А вот для расчёта реактивной напряжение нужно сдвинуть на 90 град, причем в идеале нужно подвинуть и гармоники.

Есть более простой способ, обычная временная задержка, равная 90 градусам на основной частоте 50Гц, но этот метод даёт некоторую погрешность при наличии гармоник в сети. Да и за частотой сети всегда нужно следить, рассинхронизация сразу же всё рушит.

5 Гц не так критично конечно, это в идеале хотелось бы чтобы и субгармоники тоже не "искажались".

 

REACTIVE_energy_metering.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, C2000 said:

Смотрел на фильтр гильберта в Матлабе, но так и не понял как его прикрутить, и вообще то ли это.

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

в задаче указано, что максимум порядок фильтра - несколько десятков, поэтому расчитаем фильтр гильберта для предельного случая, когда порядок фильтра равен 90, больше мы точно брать не можем.

частота дискретизации 8кГц. Полоса фильтра, с учетом порядка фильтра, получилась от 50 Гц до 2кГц.

res_00.thumb.png.6bc078f91a2a4a4e211615313cc291db.png

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

посмотрим ИХ

Spoiler

% FIR least-squares Hilbert transformer
% filter designed using the FIRLS function.

% All frequency values are in kHz.
Fs = 8;  % Sampling Frequency

N =  90;                            % Order
F = [0, 0.0001, 0.005, 2, 2.1, 4];  % Frequency Vector
A = [0, 0, 1, 1, 0, 0];             % Amplitude Vector
W = [1, 10, 1];                     % Weight Vector

b  = firls(N, F/(Fs/2), A, W, 'hilbert');

%
b0 = zeros(size(b));
b0((end+1)/2) = 1;
hfvt = fvtool(b0,1,b,1);
hfvt.Analysis = 'impulse';

 

res_01.thumb.png.1057e9514ab3d1bf8bc97a2ae4640e79.png

 

построим АЧХ

hfvt = fvtool(b0,1,b,1);
hfvt.Fs = 8e3;
hfvt.Analysis = 'magnitude';

res_03.thumb.png.9c293f681f8f3dbbf22240cc4f3d54b9.png

построим ФЧХ

hfvt = fvtool(b0,1,b,1);
hfvt.Fs = 8e3;
hfvt.Analysis = 'phase';
hfvt.PhaseUnits = 'degrees';

res_04.thumb.png.859fdf4af4c465f6c214a6ae6b7a9287.png

по результатам видно, что разность в 90° держится в необходимой полосе частот

 

порядок фильтра равный 90 был взят как предельный возможный, при уменьшении порядка характеристики фильтра будут ухудшаться: сдвиг фазы все еще будет 90°, но полоса будет уменьшаться.

для изучения влияния порядка фильтра на характеристики, сделаем аналогичные расчеты для более реального порядка фильтра, равного 30

 

Spoiler

% FIR least-squares Hilbert transformer
% filter designed using the FIRLS function.

% All frequency values are in kHz.
Fs = 8;  % Sampling Frequency

N =  30;                            % Order
F = [0, 0.0001, 0.005, 2, 2.1, 4];  % Frequency Vector
A = [0, 0, 1, 1, 0, 0];             % Amplitude Vector
W = [1, 10, 1];                     % Weight Vector

b  = firls(N, F/(Fs/2), A, W, 'hilbert');

hfvt = fvtool(b0,1,b,1);
hfvt.Fs = 8e3;
hfvt.Analysis = 'magnitude';

res_05.thumb.png.1f2df00c9a2aa661cb6ec55e43c53509.png


hfvt = fvtool(b0,1,b,1);
hfvt.Fs = 8e3;
hfvt.Analysis = 'phase';
hfvt.PhaseUnits = 'degrees';

res_06.thumb.png.394c13b16043d0ba4a7191890407aa01.png

 

Изменено пользователем stealthisname

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Одного фильтра с постоянной фазой в заданном диапазоне в принципе не бывает?

Теперь надо подумать, возможно ли это сделать фильтрами, меньшего порядка, возможно IIR.

Можно ли как то подобрать 2 фазовых фильтра, чтобы между ними всегда было 90 градусов? Т.е. не методом подбора, а методика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 часов назад, Самурай сказал:

Это не совсем так, даже в идеальном случае на нулевой частоте у фильтра Гильберта АЧХ = 0. А для дискретного фильтра Гильберта нечетного порядка АЧХ = 0 еще и на Fs/2. Иными словами - фильтр Гильберта это как минимум ФВЧ, а то и вовсе ПФ.

Согласен.

9 часов назад, Самурай сказал:

Разумеется, косинусом он будет только по отношению к входному синусу, задержанному на задержку в фильтре Гильберта.

Если исходный сигнал задерживать, то с этим тоже согласен :)

9 часов назад, Самурай сказал:

я не знаю:)

При введении постоянного фазового сдвига мы умножаем значение каждого бина на exp(j*phi). В по свойству линейности преобразования Фурье этот множитель появляется и перед временными отсчетами. Но исходный сигнал должен юыть комплексным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, C2000 сказал:

Можно ли как то подобрать 2 фазовых фильтра, чтобы между ними всегда было 90 градусов? Т.е. не методом подбора, а методика.

Если вы сделали фильтр Гильберта  в виде КИХ фильтра, то сделать точно такую же задержку не представляет проблем - это задержка отсчётов на длину фильтра Гильберта  .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Lmx2315 said:

Если вы сделали фильтр Гильберта  в виде КИХ фильтра, то сделать точно такую же задержку не представляет проблем - это задержка отсчётов на длину фильтра Гильберта  .

Т.е. если фильтр 20-го порядка то для второго сигнала нужна всего лишь задержка на 20 семплов ровно, без всяких доп. фильтров или аппроксимаций? тогда между ними на выходе будет 90 градусов для всех гармоник?

4 hours ago, stealthisname said:

порядок фильтра равный 90 был взят как предельный возможный, при уменьшении порядка характеристики фильтра будут ухудшаться: сдвиг фазы все еще будет 90°, но полоса будет уменьшаться.

для изучения влияния порядка фильтра на характеристики, сделаем аналогичные расчеты для более реального порядка фильтра, равного 30

 

Можно немного теории, как Вы подбирали вектора, их количество. Чем при этом необходимо руководствоваться.

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

В итоге хотелось бы получить фильтр с порядком в пределах 10, а лучше 5, а еще лучше 3 (это вроде бы минимум), с "идеальными" характеристиками в районе 50Гц (плюс 5 гармоник как минимум). Очень уж напряжно на МК в риал-тайме фильтры просчитывать с большими порядками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 минут назад, C2000 сказал:

Т.е. если фильтр 20-го порядка то для второго сигнала нужна всего лишь задержка на 20 семплов ровно, без всяких доп. фильтров или аппроксимаций? тогда между ними на выходе будет 90 градусов для всех гармоник?

да

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Lmx2315 сказал:

Если вы сделали фильтр Гильберта  в виде КИХ фильтра, то сделать точно такую же задержку не представляет проблем - это задержка отсчётов на длину фильтра Гильберта  .

Только все-таки на половину длины фильтра... Точнее, для фильтра нечетного порядка на (длина-1)/2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто подскажет как фильтр синтезировать в Matlab, что значат входные аргументы: вектора и вес векторов?

Основная частота 50Гц при Fs=8000Гц

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...