• Регистрация
Roman22Suai
Roman22Suai 0.00
н/д

Импульсно- кодовая модуляция в Дифференциальную импульсно- кодовую модуляцию

30.12.2022

Доброго времени суток! Получил задание на разработку алгоритма и программы, реализующих преобразование ИКМ в ДИКМ(первого порядка).

1) Разработать методичку оценки сжатия;

2) Провести оценку степени сжатия для ДИКМ первого порядка.

Может ли ктонибудь, пожалуйста, помочь с программой в MATLAB, ибо я в этом совсем не знаток? Заранее спасибо!

Теги

      30.12.2022

      Ответы

      • alextip
        alextip+46.13
        30.12.2022 17:46

        Начните с алгоритма.

        • Roman22Suai
          Roman22Suai0.00
          2.01.2023 10:47

          1) Берем сигнал

          2) Дискретизируем по теореме Котельникова

          3) Выводим отсчеты в массив(Ui)

          4) Делаем новый массив, где Yi=U(i+1)-Ui

          5) Строим график по новому массиву

        • alextip
          alextip+46.13
          2.01.2023 17:53

          Я имел в виду то, как вы собираетесь преобразовывать ИКМ в ДИКМ.

          Хотя я смотрю на задание и понимаю, что преобразовывать ничего не нужно, достаточно просто оценить потоки данных после ИКМ и ДИКМ по выбранному показателю, затем сравнить оценки. Тут бы еще понимать, что выступает в виде источника сигнала, его характеристики.

          В документации Matlab'а есть пример по DPCM:

          https://au.mathworks.com/help/comm/ug/differential-pulse-code-modulation.html

          • Roman22Suai
            Roman22Suai0.00
            8.01.2023 16:44

            Посмотрел материал, ссылку на который вы дали, и, как я понял, там именно модулирование сигнала с помощью ДИКМ. А у меня нужно сначала в ИКМ, а потом уже этот сигнал в ДИКМ. Может быть, конечно, я что не так понял на сайте...

            У меня есть программа, которая выполняет все до ИКМ, но как перевести уже этот ИКМ в ДИКМ я не знаю

            clc;
            clear all;
            t = 0:0.0005:10;


            % Сигнал
            x = sin(t);
            subplot(3,1,1);
            plot(t,x,'black');
            title('Сигнал');
            xlabel('Время')
            ylabel('Амлитуда')
            grid on
            % Квантование сигнала


            partition = -1:0.1:1;
            codebook = -1:0.1:(1+0.1);
            [index,quants] = quantiz(x,partition,codebook);
            subplot(3,1,2);
            plot(t,quants);
            title('Квантование сигнала');
            xlabel('Отсчёты')
            ylabel('Амплитуда')
            grid on
            % ИКМ сигнал


            y = uencode(quants,3);
            subplot(3,1,3);
            plot(t,y,'red');
            title('ИКМ сигнал');
            xlabel('Отсчёты');
            ylabel('Амплитуда')
            grid on

          • alextip
            alextip+46.13
            11.01.2023 17:07

            Если воспользоваться примером Матлаба, то можно продолжить ваш пример.

            %Дельта-модуляция с теми же параметрами, что и ИКМ
            predictor = [0 1];
            y2 = dpcmenco(x,codebook,partition,predictor);

            %Демодуляция
            y2dec = dpcmdeco(y2,codebook,predictor);

            %Построение графика (посмотреть визуально качество демодуляции)
            figure
            plot(t,x,t,y2dec)
            legend('Исходный сигнал','Сигнал после декодирования','Location','best');

            %Количество бит, требуемое для передачи одного символа ИКМ сигнала
            k1=ceil(log2(numel(unique(y))));
            %Количество бит, требуемое для передачи одного символа ДИКМ сигнала
            k2=ceil(log2(numel(unique(y2))));

            %Сжатие сигнала ДИКМ относительно ИКМ
            r=k1/k2;

            В итоге сжатие равно 1.5

            • alextip
              alextip+46.13
              11.01.2023 17:31

              Преобразовывать ИКМ в ДИКМ не нужно.

              • Roman22Suai
                Roman22Suai0.00
                11.01.2023 17:38

                Я понимаю, что в матлабе есть команды, чтоб и ИКМ, и ДИКМ получить, не преобразовывая одно в другое. Но по полученному мной заданию необходимо именно как-то преобразовать ИКМ в ДИКМ. Надеюсь, я вас правильно понял

              • alextip
                alextip+46.13
                11.01.2023 19:40

                Если приведете задание в оригинале, то можно подумать. Однако я все-таки сомневаюсь, что нужно преобразовывать ИКМ в ДИКМ.

                • Roman22Suai
                  Roman22Suai0.00
                  11.01.2023 20:01

                  Получил задание на разработку алгоритма и программы, реализующих преобразование ИКМ в ДИКМ(первого порядка).

                  1) Разработать методичку оценки сжатия;

                  2) Провести оценку степени сжатия для ДИКМ первого порядка.
                  То, что написано в самом начале, и есть оригинал.

                • alextip
                  alextip+46.13
                  11.01.2023 20:31

                  Возможно неточность в самом задании. Я думаю лучше уточнить, что именно требуется. На мой взгляд логичнее преобразовать один и тот же сигнал, затем сравнить модулированные сигналы. А тут получается нужно пребобразовать сигнал в ИКМ, затем ИКМ в ДИКМ и сравнить выход ИКМ и выход ИКМ+ДИКМ. Хотя вроде бы особых технических сложностей тут не должно быть, восьмиуровневый сигнал преобразовать в ДИКМ, скроее всего результат будет аналогичный. Может завтра посмотрю. Поздно уже.

                  • Roman22Suai
                    Roman22Suai0.00
                    11.01.2023 20:35

                    Согласен, что имеет место быть отсутствие логики, но такое задание. Буду очень благодарен, если сможете завтра.

                     

                  • alextip
                    alextip+46.13
                    12.01.2023 11:17

                    После вашего кода можно вставить этот

                    %ДИКМ-кодирование сигнала y, прошедшего ИКМ модуляцию
                    partition1 = 0.5:1:6.5;
                    codebook1 = -3:4;
                    predictor1 = [0 1];
                    y2 = dpcmenco(y,codebook1,partition1,predictor1);

                    %Демодуляция
                    y2dec = dpcmdeco(y2,codebook1,predictor1);

                    %Построение графика, для визуальной оценки демодуляции
                    figure
                    plot(t,y,t,y2dec+3,'x')
                    legend('ИКМ сигнал','Сигнал после декодирования ИКМ+ДИКМ','Location','best');

                    %Количество бит, требуемое для передачи одного символа ИКМ сигнала
                    k1=ceil(log2(numel(unique(y))));
                    %Количество бит, требуемое для передачи одного символа ИКМ сигнала, перекодированного в ДИКМ
                    k2=ceil(log2(numel(unique(y2))));

                    %Сжатие сигнала ДИКМ относительно ИКМ
                    r=k1/k2;

                    Словарь сделан на уровне догадок, почему именно так работает не скажу, потому что сам не знаю. Ну и в демодулированном сигнале есть постоянный сдвиг "-3". Собственно при построении графика он компенсирован. Скорее всего этот результат кривой, но формально работает. А как именно должно быть (может даже так и должно быть, как получилось) это надо разбираться с алгоритмом ДИКМ.

                    • Roman22Suai
                      Roman22Suai0.00
                      12.01.2023 12:35

                      Буду смотреть. Спасибо вам большое!

                      • Roman22Suai
                        Roman22Suai0.00
                        13.01.2023 07:41

                        К сожалению, результат неудовлетворил того, кто это задание дал. Сказал, что реализовать тоже самое, но не использовать встроенные функции матлаба, а реализовать всё поэтапно. Да и сделать ещё эти махинации не с заданным мной сигналом, а с фонограммой.
                        Не знает, как это реализуется поэтапно?

                      • alextip
                        alextip+46.13
                        13.01.2023 17:22

                        Нет такой задачи, которую нельзя было бы решить терпением. Так что разобраться придется. Удачи.