Jump to content

    
Sign in to follow this  
C2000

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

Recommended Posts

Lmx2315

да

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

C2000

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

Share this post


Link to post
Share on other sites
3 минуты назад, petrov сказал:

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

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

Share this post


Link to post
Share on other sites
20 minutes ago, petrov said:

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

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

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

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

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

Share this post


Link to post
Share on other sites

C2000

hilbert_2.thumb.png.8c8800e60e75b64bde3bbdc1f3312c98.png

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

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

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

Share this post


Link to post
Share on other sites
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

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

 

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

 

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

Share this post


Link to post
Share on other sites
10 hours ago, stealthisname said:

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

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

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

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

Share this post


Link to post
Share on other sites
On 8/4/2021 at 8:29 AM, C2000 said:

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

 

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

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

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

 

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

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

Share this post


Link to post
Share on other sites
1 hour ago, Tpeck said:

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

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

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

 

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

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

Смешно)

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

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

Share this post


Link to post
Share on other sites
40 minutes ago, C2000 said:

Смешно)

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
On 8/4/2021 at 8:34 AM, stealthisname said:

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

посмотрим ИХ

 

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

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

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

Share this post


Link to post
Share on other sites
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);

 

Edited by stealthisname

Share this post


Link to post
Share on other sites
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);

 

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

Share this post


Link to post
Share on other sites
1 hour ago, stealthisname said:

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

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

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this