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

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

Lmx2315

да

Нет. Нужна задержка порядок/2.

C2000

Гильберта делают с чётным порядком и симметричной АЧХ относительно частоты дискретизации/4, тогда коэффициенты получаются антисимметричными и каждый второй равен 0, соответственно получается экономия на вычислениях.

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


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

3 минуты назад, petrov сказал:

Гильберта делают с чётным порядком и симметричной АЧХ относительно частоты дискретизации/4, тогда коэффициенты получаются антисимметричными и каждый второй равен 0

Только это фильтр нечетного порядка.

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


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

20 minutes ago, petrov said:

Это я видел, вот что с этим делать...

Пробовал разные варианты, но либо порядок фильтра высокий, либо АЧХ не стабильна.

Возможно ли сделать симметричный фильтр, пусть не до 2000КГц, хотя бы до 1КГц (дальше в середине может быть и провал АЧХ, но выше 0 не желательно), но чтобы от 20Гц до 1Кгц АЧХ была постоянная.

Или для КИХ только увеличением порядка можно для низкой частоты нормальную характеристику получить?

Есть ли подобные решения для БИХ фильтров, там за счёт обратной связи можно было бы снизить порядок фильтра.

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


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

C2000

hilbert_2.thumb.png.8c8800e60e75b64bde3bbdc1f3312c98.png

100 умножений на выходной отсчёт.

Это я видел, вот что с этим делать...

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

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


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

11 hours ago, C2000 said:

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

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

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

 

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

 

построим модель сигнала. Сначала сгенерим на нужной тактовой частоте нужную основную гармонику. Смоделируем вторую с заданной разностью фаз. (здесь я беру медленно линейно возрастающую до 60°).

эти два сигнала будут имитировать принятые напряжение и ток

Spoiler

res_00.thumb.png.7ae4429addb59a6bcb8069f4ab91e87b.png

 

добавим дополнительных кратных гармоник, добавим шум.

 

Spoiler

res_01.thumb.png.e4539bc0a1f74363c2b2bb2cbf6497ad.png

res_02.png.56c28329360ba5febaf777a067a93694.png

 

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

Spoiler

res_03.thumb.png.9fe80b2adfdf1433fe60b70feba745e7.png

res_04.png.b4a201b2e9f9f655ff6be22f71ef7df3.png

 

результат продецимируем, например в CIC фильтре

Spoiler

res_05.thumb.png.f7a005be724575c896f20a9951d09f94.png

res_06.png.37539a999612f4ddd7fce8b6a865287b.png

 

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

Spoiler

res_07.thumb.png.725c23c09707aafa6614f76b004f21c7.png

res_08.png.2deb94125bb516a125f883eb8237b993.png

 

накопим значения для очищения от шума (можно с помощью еще одно CIC фильтра)

Spoiler

res_09.thumb.png.08fb08b42ee30bf0366aef50ce99f60c.png

res_10.png.e1a216b754d73a34dd480f7c610c5c4e.png

 

эта комплексная величина как-раз пропорциональна мощности гармоники: действительная часть пропорциональна активной составляющей, мнимая часть пропорциональна реактивной составляющей.

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

делим

Spoiler

res_11.thumb.png.25cfbb392d0f579cf6e0636e8e1ee769.png

res_12.png.e2f2b6fa3be0b47c787643223489d0a2.png

 

чтобы убедиться, что алгоритм расчета устойчив к изменению входной частоты, изменим входную частоту на 58 Гц

 

Spoiler

res_13.thumb.png.e7192ae722dff9d234e74502c04680f1.png

res_14.thumb.png.3d186df216f83b819620d044093f0b14.png

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

 

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

 

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

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


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

10 hours ago, stealthisname said:

эти два сигнала будут имитировать принятые напряжение и ток

Спасибо, интересно, но вряд ли возможно в МК, в реальном времени, когда данные идут непрерывным потоком, и пропуски в обработке недопустимы. Да и считать нужно в диапазоне 5Гц - 2КГц (желательно).

В отличии например от той же Алисы или Гугл помощника, которые могут записать фразу, а потом анализировать её секунду или несколько. Хотя конечно там алгоритмы куда сложнее, но и ресурсы другие. 

А бывают еще интергармоники. В общем фильтр видится идеальным решением, но порядок великоват.

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


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

On 8/4/2021 at 8:29 AM, C2000 said:

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

 

Это же полная мощность.

Активную, надо еще на cos(фи) умножать.

Хотя может вам уже это дальше растолковали.

 

Можете попробовать найти угол между током и напряжением. Найти активную.

И из полной, вычесть активную - получите реактивную.

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


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

1 hour ago, Tpeck said:

Это же полная мощность.

Активную, надо еще на cos(фи) умножать.

Хотя может вам уже это дальше растолковали.

 

Можете попробовать найти угол между током и напряжением. Найти активную.

И из полной, вычесть активную - получите реактивную.

Смешно)

Почитайте внимательно, с самого начала

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

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


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

40 minutes ago, C2000 said:

Смешно)

Почитайте внимательно, с самого начала

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

U, I - обычно обозначают амплитуду, а не мгновенное значение которое вы хотите проинтегрировать.

PS и чем вас не устраивает первый метод, который приведен?

По сути, это то что я написал.

Реальное посчитать можете. Полную посчитать можете.

Вычесть одну из другой, тоже можете.

Операция возведения в квадрат и извлечения корня, не так часто надо делать.

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


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

On 8/4/2021 at 8:34 AM, stealthisname said:

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

посмотрим ИХ

 

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

Можно ли также построить АЧХ и ФЧХ двух фильтров каскадом или разницу между выходами двух фильтров.

Если есть такие примеры буду очень признателен.

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


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

6 hours ago, C2000 said:

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

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

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

Fs = 8;  % Частота дискретизации (кГц)

N =  40; % порядок фильтра
F = [0.005, Fs/2-0.005]; % Frequency Vector
A = [1, 1];              % Amplitude Vector
W = [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 = 'freq';
hfvt.PhaseUnits = 'degrees';


тут b - импульсная характеристика рассчитанного фильтра, b0 - ИХ задержки на половину порядка рассчитанного фильтра.

половина коэффициентов действительно получается нулевыми

1353595411_.thumb.png.24a760ec9d84998e44914be7e0ac0c36.png

 

я не нашел, как в fvtool построить отношение амплитудных характеристик двух фильтров и разность фазовых характеристик

но есть пример расчета частотных характеристик вручную, с выводом разности фаз

w = 0:1e-4:.5; % цифровая нормированная частота
f = w*Fs; % частота (кГц)

% комплексные частотные харатеристики
h  = sum(b .'.*exp(-1i*2*pi*w.*(1:N+1).'));
h0 = sum(b0.'.*exp(-1i*2*pi*w.*(1:N+1).'));

% АЧХ (дБ)
h_magn = mag2db(abs(h));
h0_magn = mag2db(abs(h0));

% ФЧХ (°)
h_phas = rad2deg(unwrap(angle(h)));
h0_phas = rad2deg(unwrap(angle(h0)));

%
% plot(f,h0_magn,f,h_magn);
% plot(f,h0_phas,f,h_phas);

% разность ФЧХ
plot(f,h0_phas-h_phas);

 

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

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


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

6 hours ago, C2000 said:

Можно ли также построить АЧХ и ФЧХ двух фильтров каскадом или разницу между выходами двух фильтров.

ИХ двух фильтров каскадом - свертка ИХ отдельных фильтров. по рассчитанной ИХ можно построить АЧХ и ФЧХ

для КИХ фильтров в матлабе можно рассчитать например так

% b1, b2 - ИХ отдельных фильтров в каскаде

% общая ИХ
b = conv(b1,b2);

% вывод
fvtool(b1,1,b2,1,b,1);

 

для БИХ фильтров аналогично

% b1, b2 - коэфф числителя передаточной
% a1, a2 - коэфф знаменателя передаточной

% общая передаточная
b = conv(b1,b2);
a = conv(a1,a2);

% вывод
fvtool(b1,a1,b2,a2,b,a);

 

ИХ суммы/разности сигналов с двух фильтров - это сумма/разность ИХ отдельных фильтров. По рассчитанной ИХ можно построить АЧХ и ФЧХ

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


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

1 hour ago, stealthisname said:

ИХ двух фильтров каскадом - свертка ИХ отдельных фильтров. по рассчитанной ИХ можно построить АЧХ и ФЧХ

для КИХ фильтров в матлабе можно рассчитать например так.

Спасибо с фильтрами получилось.

 

Еще не подскажите как в Матлабе вот эти вильтры получить:

Все пропускающие фильтры (dsplib.ru)

 

В fdatool таких не нашёл

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


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

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

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

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

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

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

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

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

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

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