Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/78: Рейтинг темы: голосов - 78, средняя оценка - 4.99
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 11

Модель IQ модулятора/демодулятора

06.08.2013, 11:46. Показов 14756. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Случилась у меня такая проблема - пытаюсь смоделировать работу квадратурного модулятора, но сталкивают то ли с непониманием его работы то ли с неверно составленной программой.
Пример:
Требуется вести передачу сигналом на частоте 500 МГц, модуляция BPSK, обработка сигнала ведется квадратурными модулятором/демодулятором, входы/выходы в виде I и Q.

В примере дается тестовая комбинация из 4х кусков сигнала (0,π/2,π,3π/2);
Matlab M Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
clear;clc;close;
carrier = 500e6;
Fs = carrier*100;
Ts = 1/Fs;
t = 0:Ts:1/carrier;
 
signal1 = sin (2*pi*carrier*t + 0);
signal2 = sin (2*pi*carrier*t + pi/2);
signal3 = sin (2*pi*carrier*t + pi);
signal4 = sin (2*pi*carrier*t + 3*pi/2);
 
wholeSignal = cat(2,signal1,signal2,signal3,signal4);
 
analyticSignal = hilbert(wholeSignal,2^nextpow2(length(wholeSignal)));
plot (real(analyticSignal)); hold on; plot(imag(analyticSignal),'r'); ylim([-3 3]);
Однако, как видите I и Q примерно одинаковы по амплитуде, хотя согласно представлению I*cos + Q*sin их амплитуда должна меняться значительно (пример π/2 - I = 1, Q = 0 и т.д.).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.08.2013, 11:46
Ответы с готовыми решениями:

Оптимальный алгоритм амплитудного демодулятора
Доброго времени суток. Возникла задача - детектирование АМ сигнала с синусоидальной несущей в 4 кГц. Есть идея реализовать детектор...

Реализация демодулятора АМ-сигналов с использованием коррелятора
Здравствуйте. Кратко попытаюсь объяснить, что уже имеется. - Есть генератор чисел (0 или 1), он меняет своё состояние каждые 0.5 сек (0...

Усиление сигнала от FM-модулятора
в общем имеется вот такой простенький фм модулятор - удалено - . питаю я его от блока для sony ps 1 (7,5 v. 2 А). радиус...

14
Эксперт по электронике
 Аватар для R2D2
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
06.08.2013, 11:55
Цитата Сообщение от Genshiken Посмотреть сообщение
t = 0:Ts:1/carrier;
Может быть маловато одного периода?...
0
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 11
06.08.2013, 12:23  [ТС]
Да нет, пробовал подставлять 100 - все осталось как есть.

Добавлено через 23 минуты
(пример π/2 - I = 1, Q = 0 и т.д.)
Ошибся, π/2 - I = 0, Q = 1
0
 Аватар для Зосима
5243 / 3571 / 379
Регистрация: 02.04.2012
Сообщений: 6,475
Записей в блоге: 17
06.08.2013, 12:54
Вот мой вариант
Matlab M Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
clear;clc;close;
 
fc = 500e6;
Fs = fc*100;
Ts = 1/Fs;
t = 0:Ts:1/fc; % масив времени
 
d = [1 0]; % данные
fprintf('Отправленные данные: %d %d\n', d)
I = d(1); Q = d(2); % квадратуры
% сигнал
S = I*sin(2*pi*fc*t) + Q*cos(2*pi*fc*t);
 
% прием
ZI = S.*sin(2*pi*fc*t);
ZQ = S.*cos(2*pi*fc*t);
Ir = 2*abs( mean( ZI ) );
Qr = 2*abs( mean( ZQ ) );
% принятые данные
Dr = [Ir, Qr];
fprintf('Полученные данные: %f %f\n', Dr)
Er = abs(d-Dr);
fprintf('Ошибка: %e %e\n', Er)
Результат:
Matlab M Скопировано
1
2
3
Отправленные данные: 1 0
Полученные данные: 0.990099 0.000000
Ошибка: 9.900990e-003 4.186722e-017
Добавлено через 4 минуты
mean - это усреднение, которое тут вместо интегратора. А двоечка - это подгониан ^__^" Иначе квадратуры получаются 0.5 .
1
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 11
06.08.2013, 14:42  [ТС]
Так отрицательные компоненты передать не получается (π,3π/2). Еще непонятно - если сигнал изменяется - придется ставить интегратор или как-то по-другому можно обойтись? Потому что mean все срежет в одно значение.
0
 Аватар для Зосима
5243 / 3571 / 379
Регистрация: 02.04.2012
Сообщений: 6,475
Записей в блоге: 17
06.08.2013, 14:48
Genshiken, если допустить, что данные меняются в диапазоне [-1 1], то отрицательные компоненты будут появляться автоматом.
А вообще я квадратурную модуляцию перепутал с манипуляцией QPSK4
0
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 11
06.08.2013, 14:57  [ТС]
Genshiken, если допустить, что данные меняются в диапазоне [-1 1], то отрицательные компоненты будут появляться автоматом.
Да, но тогда расстояние между точками созвездия будет π/2, а не π, что серьезно скажется на помехоустойчивости.
Тем более, исходя из диапазона фаз сигнала 0-1, если передавать π , то Q = 0, т.к. вектор идет вдоль реальной оси и I = 0 (крайнее левое положение вектора из возможных) - получается отсутствие сигнала
0
 Аватар для Зосима
5243 / 3571 / 379
Регистрация: 02.04.2012
Сообщений: 6,475
Записей в блоге: 17
06.08.2013, 15:14
Какие созвездия, если ты собираешься передавать непрерывные данные?
Расстояние в пи будет только в случае двоичной фазовой манипуляции (BPSK) в случае 4х точечного созвездия расстояние будет:
sqrt( (п/2)^2 + (п/2)^2 ) = п/sqrt(2) ~ п/1.41

Цитата Сообщение от Genshiken Посмотреть сообщение
получается отсутствие сигнала
Разве отсутствие сигнала это не сигнал?
можно всю систему повернуть на п/4
0
 Аватар для Зосима
5243 / 3571 / 379
Регистрация: 02.04.2012
Сообщений: 6,475
Записей в блоге: 17
06.08.2013, 15:26
Вот, набросал
Matlab M Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
clear, clc
 
fc = 500e6;
Fs = fc*100;
Ts = 1/Fs;
t = 0:Ts:1/fc; % масив времени
 
I = t*fc-0.5; 
Q = sin(pi*fc*t); % квадратуры
% сигнал
S = I.*sin(2*pi*fc*t) + Q.*cos(2*pi*fc*t);
subplot(221)
plot(t,I)
title('Отправленная I')
subplot(222)
plot(t,Q)
title('Отправленная Q')
 
 
% прием
Ir = S.*sin(2*pi*fc*t);
Qr = S.*cos(2*pi*fc*t);
 
subplot(223)
plot(t,Ir)
title('Принятая I')
subplot(224)
plot(t,Qr)
title('Принятая Q')
В приемнике просто идет перемножения композитного сигнала с опорным колебанием?
Миниатюры
Модель IQ модулятора/демодулятора  
1
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 11
07.08.2013, 15:32  [ТС]
Какие созвездия, если ты собираешься передавать непрерывные данные?
Расстояние в пи будет только в случае двоичной фазовой манипуляции (BPSK)
Пример:
Требуется вести передачу сигналом на частоте 500 МГц, модуляция BPSK,

Разве отсутствие сигнала это не сигнал?
Ну вобщем нет, это его отсутствие) Иначе разделительные паузы в передаче тоже за сигнал сойдут)

Вот, набросал
Большое спасибо. Я вот подставил дискретные значения и собственно получил то же, с чего и начинал - на входе дискретные значения - на выходе гармонические колебания.
Matlab M Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
clear, clc
 
fc = 500e6;
Fs = fc*100;
Ts = 1/Fs;
t = 0:Ts:1/fc; % масив времени
 
I = zeros(1,length(t))-1; 
Q =  zeros(1,length(t))-1; % квадратуры
% сигнал
S = I.*sin(2*pi*fc*t) + Q.*cos(2*pi*fc*t);
subplot(221)
stem(t,I)
title('Отправленная I')
subplot(222)
stem(t,Q)
title('Отправленная Q')
 
 
% прием
Ir = S.*sin(2*pi*fc*t);
Qr = S.*cos(2*pi*fc*t);
 
subplot(223)
stem(t,Ir)
title('Принятая I')
subplot(224)
stem(t,Qr)
title('Принятая Q')
0
 Аватар для Зосима
5243 / 3571 / 379
Регистрация: 02.04.2012
Сообщений: 6,475
Записей в блоге: 17
07.08.2013, 16:40
я еще пробовал ввести сдвиг на п/4 в строках 11 и 21,22, но толкового ничего не вышло
Кстать, тебе не будет сложно привести блок-схему приемника? меня очень интересует, что идет после смесителей.
0
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 11
08.08.2013, 10:29  [ТС]
Вот, как пример, квадратурный демодулятор ADRF6850. Входы - дифференциальные RFI.
Миниатюры
Модель IQ модулятора/демодулятора  
Вложения
Тип файла: pdf ADRF6850 Квадратурный демодулятор.pdf (1.13 Мб, 78 просмотров)
0
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 11
08.08.2013, 11:07  [ТС]
Все, похоже разобрался . Твой метод здесь Модель IQ модулятора/демодулятора был почти полностью правильный, за исключением того, что ты взял mean по модулю, за счет чего отрицательные значения и не передавались. Большое спасибо за помощь, Зосима . Теперь все стало понятнее.
0
 Аватар для Зосима
5243 / 3571 / 379
Регистрация: 02.04.2012
Сообщений: 6,475
Записей в блоге: 17
08.08.2013, 15:53
Genshiken, я действовал по наитию - что-то мне стукнуло, что нужно смесь сигнала и опорного колебания нужно интегрировать
На здоровьечко! Самому было любопытно разобраться
0
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 11
08.08.2013, 17:20  [ТС]
С интеграцией как раз было все в порядке - модуль был лишним
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.08.2013, 17:20
Помогаю со студенческими работами здесь

Расчет амплитудного модулятора
Разработать схему амплитудного модулятора . Рассчитать режим транзистора в модулятор , с параметрами: частота 50МГц , выходная мощность в...

График АМ модулятора Chart
s(t)=A(t) cos〖2πft〗, где A(t)=∑_(k=-∞)〖d_k U_(T_s ) (t-kT_s)〗; (1.2) dk – случайные величины,...

Расчет балансного модулятора
Добрый вечер! помогите пожалуйста реализовать схему балансного модулятора в microcap! у меня эта схема не работает, так как я не знаю,...

Расчет схемы Амплитудного модулятора?
Есть схема Амплитудного модулятора на Micro Cap В ней Несущая имеет параметры A=0.1 и f=250K И Информационный сигнал A=0.15 и f=25K А...

Нужна схема фазо-импульсного модулятора на ОУ
Нужна схема ФАЗО-ИМПУЛЬСНОГО модулятора на операционном усилителе. (если уже есть схема дайте ссыль или скиньте) теоретические выкладки...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер