Jump to content

    

Nik_Su

Участник
  • Content Count

    25
  • Joined

  • Last visited

Community 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. Мне казалось их в районе 10 видов, но коэффициенты разные. Что именно можно подобрать? С кодаками я ни когда не работал. Сделал работу по выделению сигнала, а вот с расшифровкой возникли проблемы и не знаю с чего начать. Можете пожалуйста подсказать литературу по данным кодакам и где описываются вышеупомянутые таблицы. Заранее спасибо !!
  3. Здравствуйте. Имеется полученный поток бит отделенный от преамбул и стоп битов. Я знаю, что там имеется речевая информация закодированная неизвестным кодаком. Я знаю поток который отправляется, который составляет 8 kbyte/s. Возможно ли методами цифровой обработки сигналов подобрать коэффициенты кодака либо его тип или как можно декодировать данный поток данных? Хотя бы с чего начать мне изучение и разработку. Заранее большое спасибо за ответы!!!!
  4. Наверно нужно было начать объяснение с данных констант. %Данный скрипт выполняет фильтрацию используя эксподенцианальную срднюю %После чего переводит из формата +/-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
  5. Если вам интересно, я реализовал такой алгоритм для выделения из представленного потока нулей и единиц. 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, а именно сигнал был пропущен через фильтр экспоненциального скользящего среднего. Также был получен однополярный сигнал, обрезана отрицательная часть и получены ровные импульсы. С зашумленным сигналом мой алгоритм не работает.
  6. Как раз мне необходим битовый поток. Как то в универе были лабы и там передавался сигнал через канал с белым шумом, демодулировался на приемной стороне и получался битовый поток такой же. После чего переводился в формат 1 либо ноль, а вот как это делалось я уже не помню.
  7. Я почитал литературу по поводу FSK, а именно Low-SNR Operation of FSK Demodulators и на сайте dsplib. Как раз в книге которую я написал первую там представлен спектр сигнала один в один как мой и там как раз сказано об обработке данного сигнала, выделения его. Использовал схему по выделения FM. И получилось у меня выделить поток бит. Вы можете подсказать как преобразовать данный поток именно в вид чисел.
  8. Я не стал центровать сигнал вокруг нулевой частоты. Использовал данный метод [pxx,f] = pwelch(tee,512,256,2048,Fs,'power'); plot(f,10*log10(pxx)); Для децимации сигнала я применяю функцию decimate. В ней уже имеется fir фильтр который нужен для удаления эффекта алиасинга.
  9. Я бегло посмотрел запись и не разобрался в ней. Сейчас понял суть. Я не много не так делаю. t = 0:1/Fs:x; y = sin(2*pi*f.*t); Я просто не подписал оси ох и оу. По оси ох у меня частота ненормированная а по оу модуль |H(jw)|. В спектре нет зеркальной составляющей если я правильно понял вас которая образуется в после Fs/2 частоты Найквиста. Этот реальная часть преобразования abs(fft). Даже при выделении сигнала в программе SDR# были видны два пика и несущая. Чуть чуть позже скину спектр построенный с использованием pwelch. Возможно там используется АМ с подавлением несущей. Но это пока догадки на основе прочитанной литературы. Большое спасибо за ответы и помощь!!
  10. По предположениям данная вещь вещает с использованием амплитудной модуляции, но это не точно.
  11. Тогда такой вопрос. В приложении SDR# при записи RAW говорится о том, что запись производится в IQ. Так как тогда мы получаем две компоненты не смещенные на нулевую частоту? Для меня просто это как разрыв шаблона. В теории изучал одно, а получается другое. Т.е. необходимо и эту полосу сместить на 0? Я так понимаю f/fs вы нормируете сигнал и полоса получается от 0 до pi/2? Только тут же сигнал не нормирован и необходимо f/fs сделать центральной частотой? Для того чтобы избавиться от шумов?
  12. Здравствуйте. Вопрос наверно будет звучать глупо, но найти на него ответ я не могу. Так вот, имеется запись сырого (RAW IQ) сигнала длиной 10 с. Запись производилась с использованием обычного китайского dvb-t-dab+fm приемника и программы SDRSharp (Airspy, SDR#). Частота дискретизации составляет 3.2 МГц, запись 16 бит. Произведя запись данного сигнала я задался вопросом о попытки его демодуляции. Для начала хотелось бы узнать о том как можно определить например какая модуляция применяется в данном сигнале по I и Q компонентам. К вопросу прикладывают спектр I и Q компонент полученных из эфира. И возможно ли определить метод модуляции сигнала по его спектру? Используя матлаб смог демодулировать FM сигнал с радиостанции. Сразу хочу попросить прощения, но запись сигнала отправить не смогу!! Заранее хочу поблагодарить за ответы, комментарии и критику!!!
  13. Большое спасибо за развернутый ответ, некоторые моменты вы прояснили мне!!
  14. Я об этом не подумал кстати. Просто нужно иметь образ сигнала s(t) = I(t) + Q(t); И на основе него сравнивать. Большое спасибо за помощь. я делал qam модуляцию м последовательности. Создавал большой массив из нулей добавлял в рандомное место кусок данного сигнала, добавлял шум и производил корреляцию.
  15. Большое спасибо за объяснение. Сегодня попробую сделать. Вопрос наверно глупый, но не знаю как на него тогда ответить, если мы принимает сигнал, умножаем его на cos и sin фильтруем получаем I и Q компоненты, из них мы можем получить огибающую и фазу сигнала через diff(арктангенс(Q/I)), а вот например для корреляции и поиска сигнала данный метод менее эффективен получается потому что необходимо восстанавливать сигнал опять?