Форум программистов, компьютерный форум, киберфорум
Зосима
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Моделирование последовательностей в MATLAB

Запись от Зосима размещена 22.12.2016 в 12:53
Показов 5272 Комментарии 0

Привет, ребятки!

Часто при моделировании различных сигналов приходится иметь дело с различными последовательностями. Например кодами Баркера или потоками данных.
Задаются они обычно набором значений, например F = [1, -1, 1, 1, 1, -1]; Однако в жизни каждый символ представляет собой прямоугольный импульс, которые нам и нужно промоделировать.
Загвоздка в том, что в таком виде они представляют собой отдельные точки и приходится каждый символ "расширять", т.е. повторять нужное количество раз. И повезет, если на один символ будет приходится целое число отсчетов!

У меня появилось желание сделать какой-нибудь финт, чтобы можно было без особых усилий получать значения последовательностей в произвольный момент времени, без привязки к частоте дискретизации! Поэтому мое воспаленное сознание выдало такую конструкцию:

S = F( 1 + fix(t/T)*(t/T<length(F)) ) * (t/T<length(F))

где F - массив символов последовательности,
T - длительность одного символа последовательности
t - произвольный массив времени
S - значение сигнала данных в эти моменты времени

Пояснение:
Для t < T*length(F): логические множители (t/T<length(F)) равны 1 и выражение можно переписать в виде: S = F( 1 + fix(t/T) ), где fix(...) возвращает целую часть отношения t/T, а 1 прибавляется для того, что в матлабе индексация массивов начинается не с 0, а с 1.
Для t >= T*length(F), т.е. в моменты времени большие длительности всей последовательности, множитель (t/T<length(F)) равен нулю и вместе с ним значение сигнала S. При этом индекс символа равен: idx = 1 + fix(t/T).*(t/T<length(F)) = 1 + fix(t/T)*0 = 1, при этом не возникает ошибки индексации массива, т.е. в итоге получаем: S = F(1)*0 = 0;

Пример:
Matlab M
1
2
3
4
5
6
7
8
9
10
clear, clc
 
F = [1,-1,1,-1,1,1,-1,-1]; % некоторая последовательность
Ts = 0.1; % длительность символа
t = 0:0.001:1; % массив времени
S = F( 1 + fix(t/Ts).*(t/Ts<length(F)) ).*(t/Ts<length(F)); % вычисляем сигнал
% рисуем:
plot(t, S, 'linew',2)
grid on
ylim([-1.1, 1.1])
Нажмите на изображение для увеличения
Название: 02.png
Просмотров: 698
Размер:	5.1 Кб
ID:	4074


Думаю не нужно отдельно заострять внимание на том, что для ФМ сигнала нужно сигнал данных S умножить на приращение фазы несущего колебания: Spm = sin(w*t + pi*S); , а для ЧМ - на девиацию частоты: Sfm = sin( (w + df*S).*t );
Пример:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
clear, clc
 
F = [1,0,1,0,1,1,0,0]; % данные
Ts = 0.1; % длительность символа
t = 0:0.001:1; % массив времени
S = F( 1 + fix(t/Ts).*(t/Ts<length(F)) ).*(t/Ts<length(F));
 
Spm = sin( 2*pi*20*t + pi*S );
Sfm = sin( 2*pi*(20 + 20*S).*t );
% рисуем:
plot(t, S, 'b',...
    t, Spm - 2, 'r',...
    t, Sfm - 5, 'g', 'linew',2)
grid on
ylim([-6.5, 1.5])
legend('data','PM','FM')
Нажмите на изображение для увеличения
Название: 03.png
Просмотров: 1049
Размер:	8.0 Кб
ID:	4075
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru