201 (2013-09-23 17:09:15 отредактировано Lesha)

Re: Моделирование в РЗА

E.A.BUCHINSKIY пишет:

Добрый день, уважаемые коллеги!...

Посмотрите в симулинке "Phasor Solution Method".  Если использовать этот способ, модель должна выдать синхронизированные векторы и не нужно будет городить АЦП, БПФ и пр.
Ну а если Continuous или Discrete тогда нужна хотя бы простенькая модель измерительного тракта (непрерывный сигнал->дискретизатор->БПФ).
На первой картинке subsystem, судя по входам-выходам, выполняет преобразование Фурье. Затем разложение комплексов на амплитуду, угол,
преобразование угла в градусы и объединение всех полученных значений в один вектор (массив).
Погрешность прибора, шум и синхронизацию в первом приближении, на мой взгляд, можно не делать, а внести в модель позже.
Погрешность можно смоделировать ограничением точности расчетов - заданием типа сигнала, например int16 или fixdt(1,16).
Шум - добавлением в полезный сигнал случайного шума.
Несинхронность можно смоделировать блоками задержки (transport delay). Тогда надо будет еще моделировать схемы синхронизации или компенсации несинхронности.
как-то так, если я правильно понял вопрос...

202

Re: Моделирование в РЗА

Коллеги,
в данный момент изучаю основы цифровой обработки сигналов, в т.ч. и средствами Simulink. Некоторые моменты прояснились, а кое-что дается тяжело.
Буду благодарен если кто-то поделится моделью-примером в симулинк оконного преобразования Фурье синусоидального сигнала. Функция окна не имеет значения - любая. Пример необходим просто для понимания. Выполнил его сам блоком Short-Time FFT, но пока не могу понять детально что к чему. Заранее благодарен за помощь.

203

Re: Моделирование в РЗА

E.A.BUCHINSKIY, именно в Симулинке?

204

Re: Моделирование в РЗА

можно и в самом Matlab - не так важно.

205

Re: Моделирование в РЗА

Небольшой вопрос из любопытства: а для чего именно вы хотите использовать оконное преобразование Фурье?
Его результатом будет спектр... а зачем вам спектр? Я так понял по вашим постам в этой теме, что вы занимаетесь синхронизированными векторными измерениями... Для этого достаточно выделить частоту 50 Гц и все... (Или вы хотите сделать особую, уличную магию?)
Я это к тому, что выделить частоту 50 Гц - это гораздо проще, чем получить спектр.

Присоединяйтесь!!! Мы в социальных сетях и на Ютуб.

206

Re: Моделирование в РЗА

retriever пишет:

Небольшой вопрос из любопытства: а для чего именно вы хотите использовать оконное преобразование Фурье?

также из любопытства. изучаю программу, ее возможности. нашел прекрасную статью, где все проиллюстрировано и все понятно. Решил попробовать получить Рисунок 1 (нижний график). Пока не особо получилось. Поэтому интересно было бы посмотреть как это выполняется - особенно в симулинк. Как выбираются координаты для графика.

retriever пишет:

(Или вы хотите сделать особую, уличную магию?)

программу только начал осваивать поэтому получение магии не исключено

retriever пишет:

Я это к тому, что выделить частоту 50 Гц - это гораздо проще, чем получить спектр.

был бы признателен если бы Вы проиллюстрировали на синусоидальном сигнале.

207 (2013-11-07 10:34:44 отредактировано retriever)

Re: Моделирование в РЗА

E.A.BUCHINSKIY пишет:

нашел прекрасную статью, где все проиллюстрировано и все понятно

ммм... какую именно?

E.A.BUCHINSKIY пишет:

был бы признателен если бы Вы проиллюстрировали на синусоидальном сигнале.

Используйте блок Fourier (на вход - Sine Wave, на выходах - два блока Display). Делает ДПФ, при этом для первого периода он замещает недостающие выборки какими-то числами (вроде нулями). Поэтому в течение первого периода -какая-то ерунда, далее нормально.

Можно также использовать Discrete Fourier, я так понимаю, что он вместо "ерунды" подставляет цифры, прописанные в поле Initial input. Поэтому у него такой ступенчатый график на выходе..

В матлабе для получения ДПФ можно воспользоваться формулами:
N=10;
w=2*pi*50;
t=0:0.02/N:(0.02-0.02/N);%Это массив времени исходного сигнала
u=sin(w*t);%Это исходный сигнал

T=t;%Это "окно". Выделил его здесь потому, что для получения изменяющегося во времени значения его нужно будет двигать. Число выборок в окне всегда равно N. Для первого периода можно либо не делать вообще, либо довтыкать нули вместо недостающих выборок.
U=(2i/N)*sum(u.*exp(-1i*w*T))
Итого будет комплекс. Вроде бы можно оптимизировать скрипт (ибо exp(-1i*w*t) повторяются, если периодов сигнала несколько).

208

Re: Моделирование в РЗА

retriever пишет:

ммм... какую именно?

открыл и забыл ссылку вставить - http://www.dsplib.ru/content/win/win.html

209

Re: Моделирование в РЗА

E.A.BUCHINSKIY, Симулинк считаю вещь канешн замечательна, но когда примерно представляешь, что внутри блока и как он работает...

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

пример:

t=0:0.001:0.019;%период - для ДПФ ширина окна нужна минимум в период, ну или кратно
f=50;%что выделяем
F=4*sin(2*pi*f+pi/3)+1*sin(2*2*pi*f-pi/6);%исх. сигнал - добавил 2ую гармонику для демонстр
Res=fft(F);%могем сразу воспользоваться встроенной функцией, на выходе получаем массив компл чисел для гармоник, кртаных основной (50 Гц). 1ый отсчет - нул гармоника, поэтому берем второй оттсчет...
A=2*abs(Res(2))*f/(t(2)-t(1));
Phase=angle(Res(2))+pi/2

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

for k=1:end-N
F=Y(k:(k+19))
.....
end

Добавлено: 2013-11-06 22:52:21

Для интереса можно добавить к сигналу шум или экспоненту и поисследовать что будет ICQ/ab:)

210

Re: Моделирование в РЗА

Спасибо)) есть некоторые вопросы:

Диоген пишет:

Res=fft(F)

Это ведь быстрое преобразование Фурье (Fast Fourier transform)? хотя разницы нет, т.к. это быстрое вычисление ДПФ.

Диоген пишет:

F=4*sin(2*pi*f+pi/3)+1*sin(2*2*pi*f-pi/6)

Сейчас это у Вас не сигнал, а константа, видимо опечатка. Необходимо добавить t чтобы выражение стало функцией времени.
Я добавил t в функцию и посчитал в Matlab Ваш код, получил следующие результаты:

А=4000000
Phase =1.0472

Вот давайте теперь их расшифруем: т.е. модуль первой гармоники равен 4000000 что ли? по графику амплитудное значение нашего сигнала равно 4 с копейками. Т.е. применить функцию легко, но надо понять что мы получили.

По коду коллеги retriever я также пока не пойму что получили - очень маленький вектор.
Давайте проанализируем результаты?

211

Re: Моделирование в РЗА

E.A.BUCHINSKIY пишет:

Это ведь быстрое преобразование Фурье (Fast Fourier transform)? хотя разницы нет, т.к. это быстрое вычисление ДПФ.

вбейте
help fft
это просто дискр. преобразование Фурье. Разница с БПФ есть.

У меня выдает ампл=4, фаза=3.14 для
этого примера

E.A.BUCHINSKIY пишет:

Сейчас это у Вас не сигнал, а константа, видимо опечатка. Необходимо добавить t чтобы выражение стало функцией времени. Я добавил t в функцию и посчитал в Matlab Ваш код, получил следующие результаты:

Да, канешн, опечатка...

212 (2013-11-07 07:50:24 отредактировано E.A.BUCHINSKIY)

Re: Моделирование в РЗА

Диоген пишет:

У меня выдает ампл=4, фаза=3.14

интересно, что я не так делаю? прикладываю скриншот.
http://rzia.ru/extensions/hcs_image_uploader/uploads/50000/8000/58303/thumb/p188oh79nv1auj1hn7fek10l21dpv1.JPG http://rzia.ru/extensions/hcs_image_uploader/uploads/50000/8000/58303/thumb/p188oh79nv1auj1hn7fek10l21dpv1.JPG

213

Re: Моделирование в РЗА

В строке расчета амплитуды поменяйте / на х

214

Re: Моделирование в РЗА

sin(w*pi*t) надо заменить на sin(w*t) (писал по памяти). Получится вектор 1+0i (синусоида, амплитуда 0, фаза 1).
Для fft можете посмотреть этот код

N=8;%Число отсчетов на период
f=50;%Частота, в Гц.
w=2*pi*50;
Fd=f*N;%Частота дискретизации
dT=1/Fd;% Период дискретизации
t=0:dT:(0.02-dT);%период - для ДПФ ширина окна нужна минимум в период, ну или кратно

F=10+5*sin(w*t+pi/6)+1*sin(2*w*t)+3*sin(3*w*t);
Res=(2/N)*fft(F,N)*exp(1i*pi/2);%Получаем комплексы
Res(1)=Res(1)/2;% Нормировка постоянной составляющей в спектре
Num=(length(Res))/2;%Число нужных результатов
Res=Res(1:Num);%Отбрасываем дублирующиеся результаты

x=(0:Num-1)*Fd/N;%Частоты
disp(Res)
disp(x)

plot(x,abs(Res),'*r')
title('Амплитуды')
grid on

figure
plot(x,angle(Res)*180/pi,'*b')
title('Фазы')
grid on

Вообще, имхо, городить огород с fft (т.е. многократно брать интеграл) ради одной-единственной гармоники (для которой можно 1 раз взять интеграл) - странно... И если будете циклы какие-то делать, то можно нарваться (хотя, конечно, в простых программах вряд ли) на падение производительности.

215 (2013-11-07 11:45:09 отредактировано E.A.BUCHINSKIY)

Re: Моделирование в РЗА

retriever пишет:

sin(w*pi*t) надо заменить на sin(w*t) (писал по памяти)

этот результат мне больше нравится Default/big_smile=D

retriever пишет:

(синусоида, амплитуда 0, фаза 1)

наоборот

спасибо с этим разобрался.

Может быть кто-то подскажет как в симулинк(именно в симулинк) реализовать вот это:

http://rzia.ru/extensions/hcs_image_uploader/uploads/50000/8000/58324/thumb/p188oubssrifu1dhshau1k461ns31.JPG http://rzia.ru/extensions/hcs_image_uploader/uploads/50000/8000/58324/thumb/p188oubssrifu1dhshau1k461ns31.JPG

X - входной сигнал
g - оконная функция

пока голову ломаю:

- оконную функцию легко реализовать блоком window
- входной сигнал тоже не проблема получить sine wave
- преобразовать в цифровой вид тоже понятно как

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

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

216

Re: Моделирование в РЗА

retriever пишет:

Вообще, имхо, городить огород с fft (т.е. многократно брать интеграл) ради одной-единственной гармоники (для которой можно 1 раз взять интеграл) - странно

есессно, можно. сейчас нужна основная гармоника, потом надо и 2ую с 3ей гармоникой поглядеть - все это, думаю, придет... а за производительностью ТС явно не гонится, на данном этапе ICQ/ab:)

retriever пишет:

И если будете циклы какие-то делать, то можно нарваться (хотя, конечно, в простых программах вряд ли) на падение производительности.

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

Добавлено: 2013-11-07 13:06:24

E.A.BUCHINSKIY пишет:

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

для функции там есть блок function. Для интегрирования тоже есть блок - названия не понмю...

217 (2013-11-07 12:10:24 отредактировано retriever)

Re: Моделирование в РЗА

http://matlab.exponenta.ru/simulink/book1/16.php
Я учил S-функции по этому хелпу. Для понимания основ лучше всего скачать пример с функцией timestwo (вход умножается на 2 и подается на выход). Этот пример можно использовать как "болванку" для всего остального.

Основной принцип работы с ними: берется эта болванка, и меняется содержимое последней функции на свое:

function sys = mdlOutputs(t,x,u)

sys = u * 2; % Выходной сигнал блока есть входной сигнал, умноженный на коэффициент 2.

Если надо, можно будет потом поменять кое-какие опции в файле (там написано). Ничего сложного.

218

Re: Моделирование в РЗА

Диоген пишет:

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

в Matlab скорость матричных преобразование действительно высокая. Раньше пользовался для них Mathcad, но при размерности матрицы всего (14х14) операции (например триангуляция матрицы) выполняются очень долго. В Matlab - практически мгновенно. Единственное почему-то Matlab 2013 у меня работает с некоторой задержкой при запуске программы. Над другом компьютере у меня Matlab 2012 там данной задержки нет.

219

Re: Моделирование в РЗА

E.A.BUCHINSKIY пишет:

выполнить данное интегрирование

ВСпомнил - для интегрирования можно воспользоваться блоком 1/s

220

Re: Моделирование в РЗА

Диоген пишет:

Для интегрирования тоже есть блок - названия не понмю...

точнее там целая куча блоков интегрирования и ни один из них пока не дает следующего результата:
http://rzia.ru/extensions/hcs_image_uploader/uploads/50000/8000/58336/thumb/p188p0oo9oomv115ig849krll31.JPG http://rzia.ru/extensions/hcs_image_uploader/uploads/50000/8000/58336/thumb/p188p0oo9oomv115ig849krll31.JPG

Результатом должна быть огибающая (красная).
В симулинк никак пока не получается реализовать.

retriever пишет:

Я учил S-функции по этому хелпу. Для понимания основ лучше всего скачать пример с функцией timestwo

спасибо, то что нужно.