Форум программистов, компьютерный форум, киберфорум
Simulink
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 23.04.2017
Сообщений: 24
1

Установка времени задержки сигнала

06.09.2018, 20:37. Просмотров 2816. Ответов 4

Доброго времени суток!
Столкнулся с задачей определения времени задержки сигнала в Симулинке.

Имеется синусоидальный сигнал (рис.1), ЗАКРЫТЫЙ блок в котором к нему добавляется шумовая составляющая и задержка(рис.2). Сигнал на выходе (рис.3). По нему можно сделать вывод, что время задержки приблизительно 744 нс.

Первое что пришло в голову для установления времени задержки сигнала, это построить свёртку сигнала.
По идее тогда всё заканчивалось бы поиском индекса максимума и умножение его на шаг дискретизации времени, тогда я бы получал время задержки сигнала.
Но при выполнении этого АКФ данных сигналов получилась в виде трапеции и явный максимум отсутствует (рис.4), при некоторых попытках может выскочить и верный результат, но это не является корректным, на мой взгляд.


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

Сохранить и скинуть .SLX файл не могу.
0
Миниатюры
Установка времени задержки сигнала   Установка времени задержки сигнала   Установка времени задержки сигнала  

Установка времени задержки сигнала  
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2018, 20:37
Ответы с готовыми решениями:

Функции задержки времени
Какие функции задержки времени вы используете? Мои потуги в использовании задержек какието...

Функция задержки времени
Здравствуйте! Пишу программу на Visual Studio C++, и возник вопрос. Как сделать допустим вывод...

Открыть файл формата WAV, воспроизвести его и отобразить график амплитуды и времени этого сигнала (файла), а также спектр сигнала
Здравствуйте ! Помогите пожалуйста с программой на Delphi 7. Не могу написать программу которая...

Установка задержки на рисование
В программе необходимо задать движение окружности; чтобы визуализировать движение, необходимо...

4
722 / 537 / 243
Регистрация: 21.10.2012
Сообщений: 1,747
07.09.2018, 13:28 2
Лучший ответ Сообщение было отмечено Constanti как решение

Решение

Цитата Сообщение от Constanti Посмотреть сообщение
Допустил ли я где-то ошибку при моделировании данного процесса
Вам нужно пересчитать значение индекса, плучаемое на выходе блока Maximum, с учетом размера буфера накопления. Модель прикрепил.
0
Вложения
Тип файла: zip ConstantiSim.zip (14.9 Кб, 2 просмотров)
0 / 0 / 0
Регистрация: 23.04.2017
Сообщений: 24
08.09.2018, 20:00  [ТС] 3
Цитата Сообщение от АлександрКом Посмотреть сообщение
Модель прикрепил.
Тогда я не совсем понимаю принцип работы Вашей схемы. А точнее блока определения максимума.
Если увеличить изображение "пиков" акф, то видно что они одинаковой амплитуды, каким образом определяется нужный?
Или он находит значение первого максимума и после добавления буфера накопления получается нужное время задержки?
Если так, то я сомневаюсь, что после добавления шума данная модель продолжит работать.
0
722 / 537 / 243
Регистрация: 21.10.2012
Сообщений: 1,747
10.09.2018, 11:04 4
Цитата Сообщение от Constanti Посмотреть сообщение
Если увеличить изображение "пиков" акф, то видно что они одинаковой амплитуды, каким образом определяется нужный?
Или он находит значение первого максимума
Вам как раз и нужен первый максимум из "серии максимумов ~одинаковой амплитуды".
Цитата Сообщение от Constanti Посмотреть сообщение
Если так, то я сомневаюсь, что после добавления шума данная модель продолжит работать.
Зависит, наверное, от величины шума. Если посмотреть на ваше изображение задержанного/зашумленного сигнала, то видно, что сигнал не очень-то и зашумился. В этом случае, скорее всего, всё определится правильно. И если у вас не доступа к закрытому блоку и вы, получается, работаете с неизменным уровнем шумов, то, может быть, всё и получится.
1
0 / 0 / 0
Регистрация: 23.04.2017
Сообщений: 24
10.09.2018, 18:07  [ТС] 5
Спасибо за помощь!

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

Для того чтобы определить время задержки сигнала на приёмнике были сделаны следующие манипуляции:
1)Обнуление первых временных отсчётов сигнала.
Необходимо для того чтобы не учитывать в модели переходный процесс АЦП. Это одна из особенностей блока Sine Wave. Делается следующим образом: создаётся вектор данных равный количеству отсчётов, первые несколько отсчетов приравниваются к 0, остальные 1. С помощью блока Constante, в значении которого написать [0 0 0 ones(1,1021)]. (если количество отсчётов 1024). Дальше необходимо домножить буфер на данный вектор и мы получаем наши "чистые" данные, для анализа. Рисунки 1, 2.

2) Вычисление среднего шума.
Так же создаётся вектор с помощью константы из 512 единиц и 512 нулей, [ones(1,512) zeros(1,512)], перемножается с сигналом и получается чистый шум, для вычисления среднего рисунок 3. И сигнал и шум я взял по модулю, чтобы упросить процесс сравнения, для моей модуляции это не критично.
Дальше с помощью блока Mean вычислил среднее значение. В данном случае можно сказать, что среднее значение получено некорректно, так как 512 отсчётов присвоено значение 0, но при расчёте среднего всё равно учитывается, согласен, но так как шум получился слишком мал по амплитуде, его всё равно приходится умножать на коэффициент, что компенсирует нулевые значения.

3) Сравнение и определение времени задержки сигнала.
С помощью блока Relational Operator получил вектор из логических нулей и единиц. Что поставило в тупик дальнейшие вычисления. Но выход был найден. Данный вектор имеет тип данных Boolean, симулинк дальше не позволяет получать из него каких-то других типов данных после использования функции, но если домножить этот вектор на вектор 1,2,3..1024, то он уже имеет тип double и мы можем получить минимум.
Добавив блок MATLAB Function и вписав в него следующее:

Matlab M
1
2
3
4
function indOut  = fcn(u1)
indOut = u1+1000;
[ind a] = find(u1>10);
indOut(1:numel(ind)) = ind;
После подачи всего этого на блок поиска минимума min, получаем заветный индекс порогового значения сигнала, умножим его на шаг дискретизации, который мы выставили в параметрах моделирования и получаем нужное нам время задержки сигнала.

Полная модель схемы для анализа изображена на рисунке 4. Блок Object of Location выполняет задержку сигнала, добавление шума и уменьшение амплитуды.

Немного увеличил схему, чтобы можно было разглядеть связи
0
Миниатюры
Установка времени задержки сигнала   Установка времени задержки сигнала   Установка времени задержки сигнала  

Установка времени задержки сигнала   Установка времени задержки сигнала  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2018, 18:07

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

Организация задержки операций по времени
Есть необходимость отправлять запросы с пятисекундным интервалом. Как организовать этот интервал?...

Программа с введением времени задержки с клавиатуры
Ребята,такая проблемка,задали курсовую работу по программе на языке ассемблера,на тему "программа...

5 СПОСОБОВ задержки времени: Что скажете?
В Linux работают 100%, в Windows не проверял, но тоже должны работать. 1. используя nanosleep: ...

Задание времени задержки в нормальных минутах
Не могу понять, как работает время задержки. Там указывается экспоненциальное распределение и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.