Jump to content
    

Nik_Su

Участник
  • Posts

    30
  • Joined

  • Last visited

Reputation

0 Обычный

About Nik_Su

  • Rank
    Участник
    Участник

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Т.е. мне необходимо сделать преобразование Гильберта над реальным сигналом для получения аналитического сигнала и после чего я должен подать на вход "черного ящика" данный сигнал?
  2. Если к примеру я создаю сигнал "реальный" и добавляю к нему еще i*0 у меня получается массив комплексных чисел и я с ним получается моделирую либо мне необходимо конкретно создать I и Q компоненты из которых я могу получить свой "реальный" сигнал и с ним проводить моделирование?
  3. С реализацией Доплера и канала с AWGN (распределенного по всей полосе частот), либо шума узкополосного, который воздействует непосредственно на полосу сигнала у меня проблем нет, все отлично работает. НО, есть большое НО, реализация именно многолучевого распространения, вот при нем уже неизвестно как поведет себя алгоритм, поэтому стоит задача именно реализации многолучевого распространения + эффект Доплера и еще узкополосной помехи. А за наводку большое спасибо, буду копать дальше. Вы имеете ввиду моделирование (создание сигнала) комплексного именно две компоненты i и q, после чего выделение из двух компонент Re части и проведение над ней моделирования? Либо просто делать синусоиду к примеру [0 + j0, 0.5+j0,.....,0+j0] и уже над таким сигналом делать моделирование?
  4. Хорошо, т.е. вы предлагаете использовать низкочастотный сигнал для моделирования? Либо чего то я не могу понять, а может быть я не внятно описал задачу. У нас имеется передатчик, который отправляет пачки импульсов определенной длинны, необходимо произвести моделирование именно во временной области, для того, чтобы можно было отладить алгоритмы приема. На рисунке представлен один импульс. Если к примеру мы моделируем канал Райса в matlab по примеру: rayleighchan = comm.RayleighChannel( ... 'SampleRate',10e9, ... 'PathDelays',[0 1.5e-4], ... 'AveragePathGains',[2 3], ... 'NormalizePathGains',false, ... 'MaximumDopplerShift',500, ... 'DopplerSpectrum',{doppler('Gaussian',0.6),doppler('Flat')}, ... 'RandomStream','mt19937ar with seed', ... 'Seed',22, ... 'PathGainsOutputPort',true); И пытаемся пропустить мой сигнал через данную модель, мы получаем результат Большое спасибо, ознакомлюсь с данной документацией!
  5. Здравствуйте! Имеется задача реализовать канал с многолучевым распространением и Доплеровским эффектом в matlab, для возможности проверки работы системы. Главное, чтобы данный канал работа не с комплексным потоком данных как например RayleighChannel в matlab, а необходимо моделирование аналогового сигнала (передатчик отправляет, приемник принимает на выход данные) в пространстве с многолучевым распространением. Если кто занимался данной работой, не могли бы дать наводку в какую сторону необходимо копать, хотелось бы в matlab. Заранее спасибо!!!
  6. Я для примера написал о коэффициентах фильтров в системах кодирования с линейным предсказанием. Если взять ваш пример, а именно блок-схему представленную вами, то можно увидеть адаптивный предсказатель, который является цифровым фильтром + дополнительные функции. Я имел ввиду то, что взять например блок-схемы кодаков и уже играться с их коэффициентами.
  7. Мне казалось их в районе 10 видов, но коэффициенты разные. Что именно можно подобрать? С кодаками я ни когда не работал. Сделал работу по выделению сигнала, а вот с расшифровкой возникли проблемы и не знаю с чего начать. Можете пожалуйста подсказать литературу по данным кодакам и где описываются вышеупомянутые таблицы. Заранее спасибо !!
  8. Здравствуйте. Имеется полученный поток бит отделенный от преамбул и стоп битов. Я знаю, что там имеется речевая информация закодированная неизвестным кодаком. Я знаю поток который отправляется, который составляет 8 kbyte/s. Возможно ли методами цифровой обработки сигналов подобрать коэффициенты кодака либо его тип или как можно декодировать данный поток данных? Хотя бы с чего начать мне изучение и разработку. Заранее большое спасибо за ответы!!!!
  9. Наверно нужно было начать объяснение с данных констант. %Данный скрипт выполняет фильтрацию используя эксподенцианальную срднюю %После чего переводит из формата +/-1 в формат 1/0 %Размер окна усреденения windowSize = 10; %Отфильтрованный сигнал after_exponential_awer = movavg(data,'exponential',windowSize); %after_exponential_awer = data; for i = 1:length(after_exponential_awer) if(after_exponential_awer(i)>=0) norm_(i) = after_exponential_awer(i);end if(after_exponential_awer(i)>=0.06) norm_(i) = 0.06;end if(after_exponential_awer(i)<0) norm_(i) = 0; end end figure(); subplot(2,1,1); plot(after_exponential_awer(1:Fs/50)) subplot(2,1,2); plot(norm_(1:Fs/50)) Используя фильтр экспоненциального среднего мы фильтруем сигнал от ВЧ шумов, после чего просто отсекаем нижнюю часть по нулю, а верхнюю отсекаем по значению 0.06. Алгоритм выделения действует так: Получает отсчет x(t) и сравнивает его с x(t-1). Если x(t) != x(t-1), тогда мы проверяем какое было предыдущее число 1 либо ноль. У нас есть два счетчика one_ и zero_, если последовательность состоит из 0.06 тогда в one_ прибавляется единица и когда в x(t) приходит 0, тогда мы one_ делим на количество записанных туда единица и проверяем полученное число Y>0.7 || Y>1.7 .... Y>15.7
  10. Если вам интересно, я реализовал такой алгоритм для выделения из представленного потока нулей и единиц. static void Main(string[] args) { //Читаем из файла данные List<string> vs = new List<string>(); string readPath = @"путь к файлу с данными.txt"; string line_; try { using (StreamReader streamReader = new StreamReader(readPath)) { while ((line_ = streamReader.ReadLine()) != null) { vs.Add(line_); } } } catch (Exception e) { Console.WriteLine($"ИСключение: {e.Message}"); } //Основная программа // Количество единиц в потоке int one_ = 0; // Кол - о нулей в потоке int zero_ = 0; // Средняя длина символа int average_lengh_simb = 35; // Счетчик символов //int count = 1; // Выходной массив данных List<int> out_arr = new List<int>(); // Предыдущее значение пишедшее из потока // может иметь значение либо 0 либо 0.06 double previus_num_from_stream = 0; //Обычный склад мусора для постоянного удаления double Y = 0; // double tresh = 0; int count = 0; foreach (string i in vs) { if (previus_num_from_stream != Convert.ToDouble(Double.Parse((i.Substring(0, i.Length - 4)).Replace('.', ',')))) { if (previus_num_from_stream == 0.06) { Y = one_ / average_lengh_simb; if (Y > 0.7 || Y > 1.7 || Y > 2.7 || Y > 3.7 || Y > 4.7 || Y > 5.7 || Y > 6.7 || Y > 7.7 || Y > 8.7 || Y > 9.7 || Y > 10.7 || Y > 11.7 || Y > 12.7 || Y > 13.7 || Y > 14.7 || Y > 15.7) { for (int j = 0; j < Math.Ceiling(Y); j++) { out_arr.Add(1); } } Y = 0; one_ = 0; } if (previus_num_from_stream == 0) { Y = zero_ / average_lengh_simb; if (Y > 0.7 || Y > 1.7 || Y > 2.7 || Y > 3.7 || Y > 4.7 || Y > 5.7 || Y > 6.7 || Y > 7.7 || Y > 8.7 || Y > 9.7 || Y > 10.7 || Y > 11.7 || Y > 12.7 || Y > 13.7 || Y > 14.7 || Y > 15.7) { for (int j = 0; j < Math.Ceiling(Y); j++) { out_arr.Add(0); } } Y = 0; zero_ = 0; } } if (Double.Parse((i.Substring(0, i.Length - 4)).Replace('.', ',')) == 0.06) { one_++; } if (Double.Parse((i.Substring(0, i.Length - 4)).Replace('.', ',')) == 0) { zero_++; } previus_num_from_stream = Double.Parse((i.Substring(0, i.Length - 4)).Replace('.', ',')); } string writerPath = @"Путь к файлу для сохранения.txt"; using (StreamWriter streamWriter = new StreamWriter(writerPath,false, System.Text.Encoding.Default)) { foreach(double i in out_arr) { streamWriter.WriteLine(i); } } Console.WriteLine("Все отработало нормально!!"); } } К слову отрабатывает в 95% у меня. Средняя длина символа была вычислена путем поиска самых коротких импульсов и нахождения среднего из суммы их длины. Конкретно была взята длина 10 символов. Также импульсы были сглажены путем применения функции smooth в matlab, а именно сигнал был пропущен через фильтр экспоненциального скользящего среднего. Также был получен однополярный сигнал, обрезана отрицательная часть и получены ровные импульсы. С зашумленным сигналом мой алгоритм не работает.
  11. Как раз мне необходим битовый поток. Как то в универе были лабы и там передавался сигнал через канал с белым шумом, демодулировался на приемной стороне и получался битовый поток такой же. После чего переводился в формат 1 либо ноль, а вот как это делалось я уже не помню.
  12. Я почитал литературу по поводу FSK, а именно Low-SNR Operation of FSK Demodulators и на сайте dsplib. Как раз в книге которую я написал первую там представлен спектр сигнала один в один как мой и там как раз сказано об обработке данного сигнала, выделения его. Использовал схему по выделения FM. И получилось у меня выделить поток бит. Вы можете подсказать как преобразовать данный поток именно в вид чисел.
  13. Я не стал центровать сигнал вокруг нулевой частоты. Использовал данный метод [pxx,f] = pwelch(tee,512,256,2048,Fs,'power'); plot(f,10*log10(pxx)); Для децимации сигнала я применяю функцию decimate. В ней уже имеется fir фильтр который нужен для удаления эффекта алиасинга.
  14. Я бегло посмотрел запись и не разобрался в ней. Сейчас понял суть. Я не много не так делаю. t = 0:1/Fs:x; y = sin(2*pi*f.*t); Я просто не подписал оси ох и оу. По оси ох у меня частота ненормированная а по оу модуль |H(jw)|. В спектре нет зеркальной составляющей если я правильно понял вас которая образуется в после Fs/2 частоты Найквиста. Этот реальная часть преобразования abs(fft). Даже при выделении сигнала в программе SDR# были видны два пика и несущая. Чуть чуть позже скину спектр построенный с использованием pwelch. Возможно там используется АМ с подавлением несущей. Но это пока догадки на основе прочитанной литературы. Большое спасибо за ответы и помощь!!
  15. По предположениям данная вещь вещает с использованием амплитудной модуляции, но это не точно.
×
×
  • Create New...