Перейти к содержанию
    

Hankot3

Участник
  • Постов

    21
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Hankot3

  • Звание
    Участник
    Участник
  1. Есть информационная последовательность. Должна изменяться частота дискретизации , несущая и символьная скорость. Далее после модуляции сигнал пишется в файл . Где можно обработать в матлабе и отрисовать периодиограмму. periodogram(s,[],2^22,485) - Команда матлаба где 1 - мой сигнал в виде вектора строки , 2- прямоугольное окно, 3- количество точек, 4 - частота дискретизации. Код реализован в лоб. Так как в первую очередь нужно что бы тупо работало. Проблема в том что где то ошибка та как при увеличение символьной скорости спектр у меня сужается а не расширяется. На первой картинки у меня символьная скорость 1 . А на второй 60. А спектр на оборот сжат. #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; }
  2. Доброе время суток. :1111493779: . У меня есть модели DVBS2 и DVBS2X сигналов в Simulink. ПРОБЛЕМА: Как сместить на разные частоты. Модели ведь генерируют комплексную огибающую и у всех частоты несущей нулевые естественно. Как объединить эти модели в один спектр. Какие блоки за это отвечают ?
  3. Угу, я там писал, там сидят тупые менеджеры, которые отвечают что это аппаратная модификация. Я и без них знаю что это. НО конкретно на вопрос они не дали ответа. А потом забили вообще. Ибо сами не знают . http://forum.dlink.ru/viewtopic.php?f=8&t=171188
  4. D-LINK DGS-712/C1A D-LINK DGS-712/D1A в чем разница ??? Эти дополнения через косую черту значат аппаратную модификацию. Но не понятно что это за модификации , кто нибудь встречался с таким ? Аналогично и к SFP SFP D-LINK DEM-330T , SFP D-LINK DEM-330T/С1А , SFP D-LINK DEM-330T/B2A На Характеристики это не влияет. НО модификация есть, разница в цене есть - что тогда по факту было сделано?
  5. Почему пишут что в Москву доставить не могут Oo/ Поделитесь опытом . Как правильно заказать от туда.
  6. гугл и яндекс не как не помогают мне в поиски этой информации(( ровно как и справочник мой по verilog. есть ли у кого то ссылка на литературу ? (там описан 16 система и 2 система)
  7. Спасибо, вроде понял. Все соединилось. На RTL все соединено. Но выдается ошибка NgdBuild:604 - logical block 'uutu' with type 'sum' could not be resolved. A pin name misspelling can cause this, a missing edif or ngc file, case mismatch between the block name and the edif or ngc file name, or the misspelling of a type name. Symbol 'sum' is not supported in target 'spartan6'. И Translate входит в error module Filter1( input wire ce,clk, input wire [15:0] in1, output [15:0] f_out ); wire [1:0] connect; wire [15:0] interconnect_w; line utu ( .clk(clk), .ce(ce), .d_in(in1[15:0]), .d_out(interconnect_w [15:0] ) ); sum uutu ( .clk(clk), .in2(interconnect_w [15:0] ), .psp(connect [1:0]), .ce(ce), .sum_out(f_out[15:0] ) ); PSP ( .clk(clk), .ce(ce), .b(connect [1:0]) ); еще вопрос. можно ли из txt. файла считывать десятичные цифры. (двоичные уже получилась считать) ?
  8. Можно ли так соединять модули меж собой ?? если да то где меня ошибка. ( идея: в общий модуль соеденить линию задержки и суматор с умножением данных с линии задержки ) module Filter1( input ce1,clk1, input [15:0] in1, output [15:0] f_out ); line utu ( .clk(clk1), .ce(ce1), .d_in(in1), .d_out(in2) ); sum2 uutu ( .clk2(clk1), .in2(d_out), .ce2(ce1), .sum_out(f_out) );
  9. ОГРОМНОЕ СПАСИБО ВСЕ ЗАРАБОТАЛО!!!!!
  10. так я дергал или так не пойдет ? //блок формирования Reset initial begin forever begin //бесконечный цикл @ (reset_trigger); //ждем события reset_trigger @ (posedge clk); //ждем clk rst = 1; ce =0; d_in = 16'd00; //сброс @ (posedge clk); rst = 0; -> reset_done_trigger; //сигналим что reset выполнен end end //Ход симуляции initial begin: TEST_CASE #10 -> reset_trigger; //делаем ресет с задержкой 10 @ (reset_done_trigger); //ждем сигнал reset_done_trigger @ (posedge clk); ce = 1; //разрешаем счет d_in = 16'd9; repeat (10) begin //цикл на 5 повторений @ (posedge clk); //ждем clk end ce= 0; //запрещаем счет end endmodule https://psv4.vk.me/c609522/u18277687/docs/6...SNFZB9s9ZemGSc1 и вот результат же
  11. та блин, один фиг , все время вижу..такую картинку(((( https://pp.vk.me/c625623/v625623687/34067/tM48ChZRg5U.jpg timescale 1ns / 1ps module line(input clk, input ce, input rst, input [15:0] d_in, output [15:0] d_out ); integer j; parameter depth_select_bits = 10; parameter data_width = 16; wire [data_width-1:0] data_in, data_out; reg [data_width-1:0] shift_reg [depth_select_bits-1:0]; assign d_out = shift_reg[depth_select_bits-1]; //мне кажется вот тут собака зарыта. не вяжет он регистр с выходом always @(posedge clk or posedge rst) if(rst) bigin for (j=0 j < depth_select_bits-1; j=j+1) shift_reg[j] <= 0; end else if (ce) begin for (j=1; j < depth_select_bits-1; j=j+1) shift_reg[j] <= shift_reg[j-1]; shift_reg[0] <= d_in; end endmodule красное на рисунки это все d_out
  12. спасибо,сейчас буду реализовывать :smile3046:
  13. `timescale 1ns / 1ps module line(input clk, input ce, input rst, //input LD_psp, //input psp, input [15:0] d_in, output [15:0] d_out //output [15:0] filter_out // output reg psp_o ); parameter depth_select_bits = 10; parameter data_width = 16; wire [data_width-1:0] data_in, data_out; reg [data_width-1:0] shift_reg [depth_select_bits-1:0]; assign d_out = shift_reg[depth_select_bits-1]; //reg [data_width-1:0] sum = 0; always @(posedge clk) if(rst) shift_reg[i] <= 0; else if (ce) shift_reg[i] <= d_in; genvar i; generate for (i=1; i < depth_select_bits-1; i=i+1) begin: p1 always @(posedge clk) if (ce) shift_reg[i] <= shift_reg[i-1]; end endgenerate //always @(posedge clk) //begin // if (ce) // begin : summ // integer j1; // sum = 0; // for (j1 = 0; j1 < depth_select_bits; j1 = j1 + 1) // begin // sum = sum + shift_reg[j1]; // end // end //end //assign filter_out = sum; endmodule
  14. Исправил все скомпелировалось но похожу я опять что то не то сделал. (((( https://pp.vk.me/c625623/v625623687/33fb1/tXP6fOq62cM.jpg выпадает такая ошибка https://pp.vk.me/c625623/v625623687/33fc3/4zHYuljfmFE.jpg тест бенч module TEStbench; // Inputs reg clk; reg ce; reg rst; reg [15:0] d_in; genvar i; // Outputs wire [15:0] d_out; wire [15:0] filter_out; // Instantiate the Unit Under Test (UUT) line uut ( .clk(clk), .ce(ce), .rst(rst), .d_in(d_in), .d_out(d_out), .filter_out(filter_out) ); initial begin clk = 0; end always #50 clk = ~ clk; event reset_trigger; //объявление событий event reset_done_trigger; // //блок формирования Reset initial begin forever begin //бесконечный цикл @ (reset_trigger); //ждем события reset_trigger @ (posedge clk); //ждем clk rst = 1; ce =0 ; d_in = 16'd00 ; //сброс @ (posedge clk); rst = 0; -> reset_done_trigger; //сигналим что reset выполнен end end //Ход симуляции initial begin: TEST_CASE #10 -> reset_trigger; //делаем ресет с задержкой 10 @ (reset_done_trigger); //ждем сигнал reset_done_trigger @ (posedge clk); ce = 1; //разрешаем счет d_in = 16'd9 ; repeat (10) begin //цикл на 5 повторений @ (posedge clk); //ждем clk end ce= 0; //запрещаем счет end endmodule через always не получается.. щас пробую...ни не пойму я сделал бред. посмотрел RTL схему. но черт возьми насчет ресета и правдо не могу сообразить.
×
×
  • Создать...