Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
lordimid
3 / 3 / 0
Регистрация: 02.10.2011
Сообщений: 104
1

Фазовая манипуляция

08.02.2012, 19:44. Просмотров 4130. Ответов 4
Метки нет (Все метки)

Помогите пожалуйста разобраться с реализацией фазовой манипуляции в матлаб.
sm(t) = g(t)cos[2πfct + φm(t)].
Мне нужно, чтобы φm(t) принимала значения pi или 0 . Каким способом нужно задать эту функцию? Я так понимаю нужно это делать через цикл и условие, но как именно не пойму. Помогите пожалуйста. Сразу оговорюсь мне интересна реализация фм именно таким способом, варианты с готовыми функциями я уже видел. Заранее благодарен.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2012, 19:44
Ответы с готовыми решениями:

Амплитудная и фазовая манипуляция
Уважаемые форумчане! Помогите пожалуйста разобраться, как написать программу...

Фазовая траектория
Всем привет. Народ помогите пожалуйста срочно, имею два уравнения по ним надо...

Фазовая траектория физического маятника
Всем привет, я новичок в matlab, а мне дали задание, которое мне не по плечу. ...

Квадратурная фазовая манипуляция (QPSK)
При отладке смоделированной схемы возникает ошибка в блоке Receiver. Что можно...

Амплитудная, частотная и фазовая модуляция
День добрый форум. Получил следующее задание: Генерирование различных классов...

4
vital792
1999 / 1271 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
09.02.2012, 11:50 2
Лучший ответ Сообщение было отмечено как решение

Решение

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
30
31
32
33
34
35
36
37
38
39
clear all;
close all;
 
seq = [0 1 0 1 1 0 0 1 0 0 0 1 1 1 1]; % некая кодовая последовательность(в данном случае М)
numberOfPeriods = 2; % длина элементарного импульса в периодах несущей
phaseSteps = seq * pi;
 
Ampl = 1; % ам не используется
 
Fs = 48000; % частота дискретизации
fc = 1000; % несущая
 
chipDuration = numberOfPeriods / fc; % длительность элементарного импульса
 
fullLength = ceil(length(seq) * chipDuration * Fs); % длина сигнала в отсчетах
phase = zeros(1, fullLength);
currPhase = phaseSteps(1);
FlipIdxReal = chipDuration * Fs;
 
ChipIdx = 1;
PrevChipIdx = 1;
 
for i=1:fullLength
    phase(i) = currPhase;
    currPhase = currPhase + 2*pi*fc/Fs;
    if i>FlipIdxReal
        PrevChipIdx = ChipIdx;
        ChipIdx = ChipIdx + 1;
        if ChipIdx >= length(seq)
            ChipIdx = 1;
        end
        currPhase = currPhase + phaseSteps(ChipIdx) - phaseSteps(PrevChipIdx);
        FlipIdxReal = FlipIdxReal + chipDuration * Fs;
    end
end
 
signal = Ampl * sin(phase);
 
plot(signal);
немного заморочено получилось, наверно можно проще, но работает
3
lordimid
3 / 3 / 0
Регистрация: 02.10.2011
Сообщений: 104
09.02.2012, 17:34  [ТС] 3
Спасибо большое. Щас сяду разбираться.
0
lordimid
3 / 3 / 0
Регистрация: 02.10.2011
Сообщений: 104
11.02.2012, 10:48  [ТС] 4
Вот кое какие труды по данному вопросу. Оцените пожалуйста, кому интересно. Может направите в нужное русло, буду рад
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Fd=500;       % Частота дискретизации
t=0:(1/Fd):10; %Задаем время
Fs=5;       % Несущая частота
j=0;
for t=0:(1/Fd):10;   %Создаем вектор такой же длины, как и t
    j=j+1;
    V(j)=1;            %Запоняем его единицами
end;
lengthofV=length(V);  %Длина вектора V
sum=100;   % Временная переменная
for j=1:lengthofV; 
    if j==sum
        V(j)=-1; %Заполняем вектор V отрицательными числами, чтобы инвертировать фазу
        sum=sum+100;
    end;
end;
s=cos(V.*(2*pi*Fs*t)); % В этом месте я бы хотел чтобы фаза сигнала инвертировалась на     
% противоположную, но матлаб выдает ошибку. Скажите пожалуйста возможно ли
% подобным методом организовать инверсию фазы (может я допустил 
% синтаксическую ошибку), или это в принцыпе не возможно?
0
vital792
1999 / 1271 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
11.02.2012, 11:28 5
Matlab M
1
2
3
4
for t=0:(1/Fd):10; %Создаем вектор такой же длины, как и t
 j=j+1; 
 V(j)=1; %Запоняем его единицами 
end;
можно проще
Matlab M
1
V = ones(1, length(t));
но матлаб выдает ошибку.
да вроде не должно быть никакой ошибки. Но этот код не поворачивает фазу как положено, а только рвет ее в точках кратных 100.

lordimid, твой код - реализация psk(попытка), где длина элементарного импульса фиксирована(100), а в моем коде длина задается числом периодов несущей частоты, такой способ обычно используется в системах связи
0
11.02.2012, 11:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2012, 11:28

Одноканальная одно-фазовая модель
здравствуйте!!!вот аткое задание дали в универе: определить, при каком законе...

Амплитудно - фазовая частотная характеристика
Необходимо построить амплитудно-фазовую частотную характеристику (АФЧХ) даны...

Амплитудно-фазовая модуляция. График
возникли проблемы. почему у меня график неправильный? судя по графику он...


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

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

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