замена в Simulink стандартного блока функцией

Обсуждение вопросов, связанных с Simulink

Модератор: Admin

Рашид
Пользователь
Сообщения: 25
Зарегистрирован: Пн янв 21, 2013 6:47 pm

замена в Simulink стандартного блока функцией

Сообщение Рашид » Чт сен 21, 2017 9:50 am

Здравствуйте. Подскажите пожалуйста можно ли в модели Simulink - например в файле "doc_fmmoddemod.slx" заменить блок модулятора m-файлом? Где можно поподробнее почитать?

Рашид
Пользователь
Сообщения: 25
Зарегистрирован: Пн янв 21, 2013 6:47 pm

Re: замена в Simulink стандартного блока функцией

Сообщение Рашид » Сб сен 23, 2017 6:59 am

Написал скрипт:

function y = fcn(u)

coder.extrinsic('fmmod');
fs = 100;
fc = 4;
freqdev = 50;
fmmod(u,fc,fs,freqdev);
y = u;

Но графики модулированного и демодулированного сигналов совсем другие получаются. Помогите разобраться. Может чего в скрипте дописать нужно?

sandy
Эксперт
Сообщения: 5294
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: замена в Simulink стандартного блока функцией

Сообщение sandy » Сб сен 23, 2017 8:14 pm

fmmod(u,fc,fs,freqdev);
y = u;

Это что??? Наверное, имелось в виду вот это?
y = fmmod(u,fc,fs,freqdev);
С уважением

Александр Сергиенко

Рашид
Пользователь
Сообщения: 25
Зарегистрирован: Пн янв 21, 2013 6:47 pm

Re: замена в Simulink стандартного блока функцией

Сообщение Рашид » Сб сен 23, 2017 9:15 pm

[quote="sandy"][quote]fmmod(u,fc,fs,freqdev);
y = u;[/quote]
Это что??? Наверное, имелось в виду вот это?
[quote]y = fmmod(u,fc,fs,freqdev);[/quote][/quote]

Я пробовал так, но мне выдает ошибку "Function output 'y' cannot be an mxArray in this context. Consider preinitializing the output variable with a known type." Вот как быть ?

sandy
Эксперт
Сообщения: 5294
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: замена в Simulink стандартного блока функцией

Сообщение sandy » Ср сен 27, 2017 12:07 am

Вот как быть ?

Как написано, так и быть: "Consider preinitializing the output variable with a known type"
То есть что-то типа
y = zeros(size(u));
y = fmmod(u,fc,fs,freqdev);

Но, боюсь, что желаемого результата вы все равно не получите, так как модулятор - это блок, которому требуется внутренняя память. А зачем вообще все это?
С уважением



Александр Сергиенко

Рашид
Пользователь
Сообщения: 25
Зарегистрирован: Пн янв 21, 2013 6:47 pm

Re: замена в Simulink стандартного блока функцией

Сообщение Рашид » Ср сен 27, 2017 7:49 pm

[quote="sandy"][quote]Вот как быть ?[/quote]
Как написано, так и быть: "Consider preinitializing the output variable with a known type"
То есть что-то типа
[quote]y = zeros(size(u));
y = fmmod(u,fc,fs,freqdev);[/quote][/quote="sandy"]

Я в принципе так уже написал
[code]function y = fcn(u)

y=zeros(size(u));
coder.extrinsic('fmmod');
fs = 1000;
fc = 4;
freqdev = 50;
y = fmmod(u,fc,fs,freqdev);[/code]

Но на выходе демодулятора по сравнению с примером из пакета Matlab ("doc_fmmoddemod.slx") непонятно что выводится на блок Scope.

[quote="sandy"] Но, боюсь, что желаемого результата вы все равно не получите, так как модулятор - это блок, которому требуется внутренняя память. А зачем вообще все это?[/quote][/quote="sandy"]


Да есть небольшая задачка сделать что-то типа имитатора широкого радиочастотного спектра (например диапазон от 100 до 200 МГц). В случайном порядке некоторые участки заняты (например, на частотах 110, 145, 186 и т.п.) - кто-то там работает на этих частотах (я решил пусть с ФМ модуляцией). Покуда опыта мало в Matlab, решил с малого - заменить модулятор скриптом. Могу же я потом в скрипте несколько выходов сделать с разной несущей частотой?
Может я пошел не тем путем? Усложнил сам себе все?

sandy
Эксперт
Сообщения: 5294
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: замена в Simulink стандартного блока функцией

Сообщение sandy » Ср сен 27, 2017 8:24 pm

Так вам MATLAB-программа нужна или Simulink-модель? Если программа, то и пишите программу на матлабе. Не нужно без крайней необходимости смешивать матлаб с симулинком.
С уважением



Александр Сергиенко

Рашид
Пользователь
Сообщения: 25
Зарегистрирован: Пн янв 21, 2013 6:47 pm

Re: замена в Simulink стандартного блока функцией

Сообщение Рашид » Чт сен 28, 2017 5:46 am

[quote="sandy"]Так вам MATLAB-программа нужна или Simulink-модель? Если программа, то и пишите программу на матлабе. Не нужно без крайней необходимости смешивать матлаб с симулинком.[/quote]

Пока Simulink-модель нужна. Но если собирать сценарий из блоков, то модель получится громоздкой я так думаю. Это получается несколько модуляторов и демодуляторов надо. А если скрипт написать, то наверное проще?

sandy
Эксперт
Сообщения: 5294
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: замена в Simulink стандартного блока функцией

Сообщение sandy » Чт сен 28, 2017 10:44 am

Это получается несколько модуляторов и демодуляторов надо.

Ну и что?
А если скрипт написать, то наверное проще?

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



Александр Сергиенко

Рашид
Пользователь
Сообщения: 25
Зарегистрирован: Пн янв 21, 2013 6:47 pm

Re: замена в Simulink стандартного блока функцией

Сообщение Рашид » Пт сен 29, 2017 10:13 am

[quote="sandy"][quote]Это получается несколько модуляторов и демодуляторов надо.[/quote]
Ну и что?
[quote]А если скрипт написать, то наверное проще?[/quote]
Еще раз: любая матлабовская вставка - это чужеродный элемент в модели. Делать это есть смысл только в тех случаях, когда необходимые операции над сигналами не удается реализовать симулинковскими средствами.[/quote]

Спасибо большое. Учту на будущее.

Есть такой вопрос: В модели "doc_fmmoddemod.slx" если поставить блок Spectrum analyzer между Модулятором и демодулятором, но убрать галочку "Two-sided spectrum" в Trace options, то этот блок (Spectrum analyzer) выдает сообщение "Spectrum cannot be calculated as one sided for complex data". С чем это связано? Пробовал в источнике сигнала ставить комплексный сигнал, то же самое.

sandy
Эксперт
Сообщения: 5294
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: замена в Simulink стандартного блока функцией

Сообщение sandy » Пт сен 29, 2017 12:31 pm

С чем это связано?

Ну диагностика-то вполне внятная: "Spectrum cannot be calculated as one sided for complex data". Односторонний спектр можно рисовать только для вещественного сигнала, так как у него он все равно симметричный.
С уважением



Александр Сергиенко

Рашид
Пользователь
Сообщения: 25
Зарегистрирован: Пн янв 21, 2013 6:47 pm

Re: замена в Simulink стандартного блока функцией

Сообщение Рашид » Пт сен 29, 2017 12:39 pm

[quote="sandy"][quote]С чем это связано?[/quote]
Ну диагностика-то вполне внятная: "Spectrum cannot be calculated as one sided for complex data". Односторонний спектр можно рисовать только для вещественного сигнала, так как у него он все равно симметричный.[/quote]

А как тогда выйти из ситуации? Я же пробовал ставить в блоке Sine Wave режим комплексного сигнала, все равно выдает такое сообщение.

sandy
Эксперт
Сообщения: 5294
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: замена в Simulink стандартного блока функцией

Сообщение sandy » Пт сен 29, 2017 12:53 pm

А как тогда выйти из ситуации?

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



Александр Сергиенко

Рашид
Пользователь
Сообщения: 25
Зарегистрирован: Пн янв 21, 2013 6:47 pm

Re: замена в Simulink стандартного блока функцией

Сообщение Рашид » Сб сен 30, 2017 11:36 am

[quote="sandy"][quote]А как тогда выйти из ситуации? [/quote]
Не понимаю вопрос. В вашей модели модулятор генерирует комплексную огибающую, там нет несущего колебания. Почему вы для комплексного сигнала хотите получить односторонний спектр?[/quote]

Получается мне этот блок Модулятора не подходит, если я хочу получить односторонний спектр?

sandy
Эксперт
Сообщения: 5294
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: замена в Simulink стандартного блока функцией

Сообщение sandy » Сб сен 30, 2017 10:06 pm

В названии блоков модулятора/демодулятора в данной модели есть слово "baseband", это означает, что блоки работают с комплексной огибающей сигнала. Если вы хотите получить вещественный сигнал на несущей, вам нужны блоки, у которых в названии есть слово "passband".
С уважением



Александр Сергиенко