

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