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

Nik_Su

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

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Участник
    Участник

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  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. По предположениям данная вещь вещает с использованием амплитудной модуляции, но это не точно.
×
×
  • Создать...