Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 4
1

QPSK модулятор С++

07.04.2017, 15:56. Показов 5020. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть последовательность информационная последовательность. Должна изменяться частота дискретизации , несущая и символьная скорость. Далее после модуляции сигнал пишется в файл . Где можно обработать в матлабе и отрисовать периодиограмму. periodogram(s,[],2^22,485) - Команда матлаба где 1 - мой сигнал в виде вектора строки , 2- прямоугольное окно, 3- количество точек, 4 - частота дискретизации.
Код реализован в лоб. Так как в первую очередь нужно что бы тупо работало. Проблема в том что где то ошибка та как при увеличение символьной скорости спектр у меня сужается а не расширяется. На прикрепленных графиках там где спектр узкий символьная скорость 60 а где широкий 1.

C++ (Qt)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#include <iostream>
 
 
#include <cstdlib>
 
#include <math.h>
#include <fstream>
 
#include <vector>
using namespace std;
 
int main(int argc, char *argv[])
{
    //-------------------------------------Информационная последовательность
    const    int    NN = 16;// Ее длина
 
 
    int  Binary[NN] = {1,1,0,0,1,0,1,1,0,1,1,0,0,0,0,1};
 
 
    int *b  = &Binary[0];//указательн на первый ее элемент
    int *b1 = &Binary[1];//указатель на второй элемент
 
// Нужно для того что бы считать через один так как в QPSK  последовательность разбивается на четный и нечетный
 
 
    //------------------------------------------------------------
    const double Sr = 1; // символьная скорость
 
    const double fs = 485// частота дискрет
 
    const double f0 = 20; // несущая
 
 
    const double Tsr = 1/Sr;// Длительность одного символа
 
 
    const double Ts1 = 1 / fs;//Период дискретизации
 
    const int fs_fo = floor( ( fs / f0 ) + 0.5 );// (fs / f0)  - количество отсчетов на полное колебание в ед времени. floor взял для округления
    cout <<fs_fo <<" ";
    double cosinus [fs_fo];// Количество отсчетов для косинуса
    double sinus [fs_fo];//Количество отсчетов для синуса
 
    const int NN_na_2 = NN / 2; // Длина нашей последовательности информации после разделения на четный и не четный
 
    const int T_array1 = floor( ( fs_fo / Tsr ) + 0.5 ); //количество отсчетов за длительность одного символа
 
    cout << T_array1;
 
 
 
    const int NNN = T_array1 * NN_na_2; // массив конечного сигнала
 
 
 
    const double PI = 3.141592653589793;
    const double PI_na_2 = PI / 2;
    const double  PI_na_4 = PI / 4 ;
 
 
 
 
    double Q_koder[NN_na_2]; //длина  закодированной последовательности
    double I_koder[NN_na_2];
 
 
    double Q[NNN];//Длина модулированных квадратур
    double I[NNN];
 
 
    long double S[NNN]; //Конечный сигнал
 
 
 
//...............КОДЕР.......................................
    const double koder0_cos =  0.7071 * cos( 5 * PI_na_4 );
    const double koder1_cos =  0.7071 * cos( 7 * PI_na_4 );
    const double koder2_cos =  0.7071 * cos( PI_na_4 );
    const double koder3_cos =  0.7071 * cos( 3 * PI_na_4 );
 
    const double koder0_sin =  0.7071 * sin( 5 * PI_na_4 );
    const double koder1_sin =  0.7071 * sin( 7 * PI_na_4 );
    const double koder2_sin =  0.7071 * sin( PI_na_4 );
    const double koder3_sin =  0.7071 * sin( 3 * PI_na_4 );
 
 
 
 
 
 
 
    for ( int  i = 0 ; i < NN_na_2; i++ ) {
 
 
        if ( (*b  == 0) && (*b1 == 0) ) {
            I_koder[i] = koder0_cos;
            Q_koder[i] = koder0_sin;
        }
 
        if ( (*b == 0) && (*b1 == 1) ) {
            I_koder[i] = koder1_cos;
            Q_koder[i] = koder1_sin;
        }
        if ( (*b == 1) && (*b1 == 1) ) {
            I_koder[i] = koder2_cos;
            Q_koder[i] = koder2_sin;
        }
        if ( (*b == 1) && (*b1 == 0) ) {
            I_koder[i] = koder3_cos;
            Q_koder[i] = koder3_sin;
        }
 
    b  += 2;
    b1 += 2;
 
    }
 
 
//......................Формирование косинуса и синуса несущих..........
 
    const double w0 = 2 * PI * f0;
    double p = 0;
 
    for ( int  i = 0 ; i < fs_fo ; i++ , p+=Ts1 /*Время появления отстчетов (Период) */ ) {
 
        cosinus[i] = 127 * cos( w0 * p );
 
        sinus[i]   = 127 * cos( w0 * p + PI_na_2 );
 
 
}
 
    ofstream sinsout("sinsout.txt");
    for ( int  i = 0 ; i < fs_fo; i++ ) {
 
    sinsout <<   sinus[i] << "  " ;
 
    }
    sinsout.close();
 
    ofstream cosout("cosout.txt");
    for ( int  i = 0 ; i < fs_fo; i++ ) {
 
    cosout <<   cosinus[i] << "  " ;
 
    }
    cosout.close();
 
 
    //////-------------------
    int j = 0;
    int z = 0;
 
//.................Модулятор...............
    for ( long int i = 0 ; i < NNN; ) {
 
        I[i] = I_koder[z] * cosinus[j];//Модуляция несущей символами
 
        Q[i] = Q_koder[z] * sinus[j];
 
     ++j;
 
     if ( j == fs_fo ) { //Отсчеты полного колебания синуса и косинуса повторяются каждый раз сначала как только заканчивается полное колебание
         j = 0;
     }
 
        if ( (i % T_array1 )== 0 ) {  // Каждый раз когда количество отсчетов в символе совпадает с количеством отсчетов в последовательности  символ меняется на следующий
            ++z;
            if ( z == NN_na_2 ) { //Если символы закончились сбросить счетчик
                z = 0 ;
            }
        }
 
 
     ++i;
 
    }
//-------------Конечная сумма.
    vector<double>data;
 
    for ( long int  i = 0 ; i < NNN; i++ ) {
 
        S[i] = Q[i] + I[i];
 
        data.push_back(S[i]);
 
 
    }
 
    ofstream Sout("Sout.txt");
    for ( long int  i = 0 ; i < NNN; i++ ) {
 
    Sout <<  S[i] << "  " ;
 
    }
    Sout.close();
 
 
 
 
    ofstream Iout("Iout.txt");
    for ( int  i = 0 ; i < NNN; i++ ) {
 
    Iout <<  I[i] << " ";
 
    }
    Iout.close();
 
    ofstream Qout("Qout.txt");
    for ( int  i = 0 ; i < NNN; i++ ) {
 
    Qout <<  Q[i] << " ";
 
    }
    Qout.close();
 
 
 
 
 
 
    return 0;
}
Миниатюры
QPSK модулятор С++   QPSK модулятор С++  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2017, 15:56
Ответы с готовыми решениями:

QPSK и QAM сигналы
Хочу обратиться за помощью. Я не особо разбираюсь в матлабе. Но хочу разобраться. Да и собственно...

Формирование сигнала QPSK
Здравствуйте, коллеги! У меня bpsk все получилось. Хотел переход на сигнал qpsk. Как Я понимал...

QPSK сигнал спутниковой связи
Привет. У меня есть парочка вопросов по теории обработки сигналов. Начала этим заниматься месяц...

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

0
07.04.2017, 15:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2017, 15:56
Помогаю со студенческими работами здесь

Модулятор DVB-S
Нужно сделать кодер , + чтоб соответствовал фармату DVB-S . Если кто видел чет подобное, дайте...

Фазовый модулятор
Здравствуйте. Очень нужна помощь в программировании в delphi. Мне нужна программа фазовой модуляции...

Модулятор GSM
Ребята, прикладываю схему GSM модулятора.Не могли бы Вы разъяснить мне каждый функциональный...

Вычисление максимума амплитудного спектра QPSK-сигнала
Подскажите как вычсилить максимум амплитудного спектра сигнала, после QPSK/BPSK модуляции?


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru