Информационная система

Автор работы: Пользователь скрыл имя, 12 Ноября 2009 в 16:39, Не определен

Описание работы

Лабораторная работа

Файлы: 1 файл

лабаИС.doc

— 253.00 Кб (Скачать файл)
  1. Последовательность  нулей и единиц – 32 штуки кодируем методами:
    1. AMI
    2. Манчестерский
    3. 2B1Q

    Написание файл-функции позволяющей построить данную последовательность. 

    s = [1 1 0 0 0 1 1 1 0 1 1 0 0 1 1 0 0 1 1 1 1 0 0 0 0 0 1 1 0 0 0 1];

    n = 0:32;

    subplot(411)

    stairs(n, [s 0]);

    axis([0 32 -0.2 1.2]);

    x1 = AmiCod(s);

    subplot(412);

    stairs(n, [x1 0]);

    axis([0 32 -1.4 1.4]);

    x2 = ManchesterCod(s);

    subplot(413);

    n = 0:0.5:33;

    stairs(n, [x2 0]);

    axis([0 33 -1.4 1.4]);

    x3 = B2Q1Cod(s);

    subplot(414);

    n = 0:16;

    stairs(n, [x3 0]);

    axis([0 16 -2.5 2.5]); 

    Вспомогательные функции: 
     

function x = ManchesterCod(v)

len = length(v);

x = zeros(1, 2*len+2);

k = 3;

if (v(1) == 0)

    x(1) = 0;

    x(2) = 1;

else

    x(1) = 0;

    x(2) = -1;

end

for i=2:len

    if (v(i-1) == 1)

        x(k) = 1;

        if (v(i) ~= 1)

            x(k+1) = 1;

        else

            x(k+1) = -1;

        end

    else

        x(k) = -1;

        if (v(i) ~= 0)

            x(k+1) = -1;

        else

            x(k+1) = 1;

        end

    end

    k = k + 2;

end

if (v(len) == 0)

    x(2*len+1) = -1;

    x(2*len+2) = 0;

else

    x(2*len+1) = 1;

    x(2*len+2) = 0;

end 
 
 
 

function x = AmiCod(v)

len = length(v);

x = zeros(1, len);

odd = 0;

for i = 1:len

    if (v(i) == 1)

        if (odd == 0)

            x(i) = 1;

            odd = 1;

        else

            x(i) = -1;

            odd = 0;

        end

    else

        x(i) = 0;

    end

end 

function x = B2Q1Cod(v)

len = length(v);

x = zeros(1, len/2);

i = 3;

k = 1;

while i <= len + 2

    if (v(i-2) == 0)

        if (v(i-1) == 0)

            x(k) = 2;

        else

            x(k) = 1;

        end

    else

        if (v(i-1) == 0)

            x(k) = -1;

        else

            x(k) = -2;

        end

    end

    i = i + 2;

    k = k + 1;

end 

     
     
     

  1. Нахождение  спектров каждой последовательности и восстановление с помощью 20, 40, 80 гармоник, погрешность восстановления:
 

    2.1. Нахождение спектра.

    Написание файл-функции  позволяющей найти коэффициенты Фурье для данного сигнала. При  написании алгоритма использовали то, что знаем коэффициенты Фурье для прямоугольного импульса, а также свойство временного сдвига. 

    function F = FourTrans(v)

    T0 = length(v);

    F = zeros(1, 100);

    k = 0:99;

    for i = 1:length(v)

        F = F + v(i)/T0*sinc(k/T0).*exp(-j*k*2*pi/T0*(i-0.5));

    end 
     

    Нахождение коэффициентов Фурье для данного сигнала:

     

    figure(2);

    n = -99:99;

    T0 = 32;

    F1 = FourTrans(s);

    subplot(411);

    Fs1 = FourShift(F1);

    stem(n/T0, abs(Fs1));

    axis([-2 2 0 0.6])

    F2 = FourTrans(x1);

    subplot(412);

    Fs2 = FourShift(F2);

    stem(n/T0, abs(Fs2));

    axis([-2 2 0 0.6])

    F3 = FourTrans(x2);

    subplot(413);

    Fs3 = FourShift(F3);

    stem(n/T0, abs(Fs3));

    axis([-2 2 0 0.6])

    F4 = FourTrans(x3);

    subplot(414);

    Fs4 = FourShift(F4);

    n = -198:2:198;

    T0 = 32;

    stem(n/T0, abs(Fs4));

    axis([-4 4 0 0.8]) 

    Построение амплитудного спектра:

     
     

    2.2 Исходный сигнал.

    Вызов функции  для восстановления сигнала 20, 40, 80 гармониками: 

    n = 0:32;

    subplot(411);

    stairs(n, [s 0]);

    axis([0 32 -0.2 1.2]);

    n = 0:0.01:32;

    y0 = CreateSignal(s, 100);

    E0 = trapz(y0.^2);

    y1 = vosst(F1, 20, n, 32);

    dE1 = trapz((y0 - y1).^2)/E0*100

    E1 = trapz(y1.^2);

    subplot(412);

    plot(n, y1);

    axis([0 32 -0.2 1.2]);

    y2 = vosst(F1, 40, n, 32);

    dE2 = trapz((y0 - y2).^2)/E0*100

    subplot(413);

    plot(n, y2);

    axis([0 32 -0.2 1.2]);

    y3 = vosst(F1, 80, n, 32);

    dE3 = trapz((y0 - y3).^2)/E0*100

    subplot(414);

    plot(n, y3);

    axis([0 32 -0.2 1.2]); 

     
     

    Нахождение  погрешности при восстановлении из спектра:

     Энергия  исходного сигнала:

          

    Погрешность

     

    dE1 =  6.3847  - погрешность от восстановления 20 гармониками, %.     

    dE2 =  3.1355  - погрешность от восстановления 40 гармониками, %.     

    dE3 =  1.5393  - погрешность от восстановления 80 гармониками, %.       

    2.3 AMI.

    Вызов функции  для восстановления сигнала 20, 40, 80 гармониками: 

      n = 0:32;

      subplot(411);

      stairs(n, [x1 0]);

      axis([0 32 -1.4 1.4]);

      n = 0:0.01:32;

      y0 = CreateSignal(x1, 100);

      E0 = trapz(y0.^2);

      y1 = vosst(F2, 20, n, 32);

      dE1 = trapz((y0 - y1).^2)/E0*100

      subplot(412);

      plot(n, y1);

      axis([0 32 -1.4 1.4]);

      y2 = vosst(F2, 40, n, 32);

      dE2 = trapz((y0 - y2).^2)/E0*100

      subplot(413);

      plot(n, y2);

      axis([0 32 -1.4 1.4]);

      y3 = vosst(F2, 80, n, 32);

      dE3 = trapz((y0 - y3).^2)/E0*100

      subplot(414);

      plot(n, y3);

      axis([0 32 -1.4 1.4]); 

     
     

    dE1 =  19.8299  - погрешность от восстановления 20 гармониками, %.     

    dE2 =  15.3788  - погрешность от восстановления 40 гармониками, %.     

    dE3 =  6.7840  - погрешность от восстановления 80 гармониками, %.       

    2.4. Манчестерский.

    Вызов функции  для восстановления сигнала 20, 40, 80 гармониками: 

      subplot(411);

      n = 0:0.5:33;

      stairs(n, [x2 0]);

      axis([0 33 -1.4 1.4]);

      n = 0:0.01:33;

      y0 = CreateSignal(x2, 50);

      E0 = trapz(y0.^2);

      y1 = vosst(F3, 20, n, 33);

      dE1 = trapz((y0 - y1).^2)/E0*100

      subplot(412);

      plot(n, y1);

      axis([0 33 -1.4 1.4]);

      y2 = vosst(F3, 40, n, 33);

      dE2 = trapz((y0 - y2).^2)/E0*100

      subplot(413);

      plot(n, y2);

      axis([0 33 -1.4 1.4]);

      y3 = vosst(F3, 80, n, 33);

      dE3 = trapz((y0 - y3).^2)/E0*100

      subplot(414);

      plot(n, y3);

      axis([0 33 -1.4 1.4]); 

     

    dE1 =  84.6814  - погрешность от восстановления 20 гармониками, %.     

    dE2 =  24.1085  - погрешность от восстановления 40 гармониками, %.     

    dE3 =  15.3489  - погрешность от восстановления 80 гармониками, %.       
     

    2.5. 2B1Q.

    Вызов функции  для восстановления сигнала 20, 40, 80 гармониками: 

    subplot(411);

    n = 0:16;

    stairs(n, [x3 0]);

    axis([0 16 -2.5 2.5]);

    n = 0:0.005:16;

    y0 = CreateSignal(x3, 200);

    E0 = trapz(y0.^2);

    y1 = vosst(F4, 20, n, 16);

    dE1 = trapz((y0 - y1).^2)/E0*100

    subplot(412);

    plot(n, y1);

    axis([0 16 -2.5 2.5]);

    y2 = vosst(F4, 40, n, 16);

    dE2 = trapz((y0 - y2).^2)/E0*100

    subplot(413);

    plot(n, y2);

    axis([0 16 -2.5 2.5]);

    y3 = vosst(F4, 80, n, 16);

    dE3 = trapz((y0 - y3).^2)/E0*100

    subplot(414);

    plot(n, y3);

    axis([0 16 -2.5 2.5]); 

     

    dE1 =  13.3203  - погрешность от восстановления 20 гармониками, %.     

    dE2 =  5.8931  - погрешность от восстановления 40 гармониками, %.     

    dE3 =  2.8416  - погрешность от восстановления 80 гармониками, %.       
     

    3. Скремблирование сигнала. 

%  Bi = Ai * Bi-n * Bi-m

x = [0 1 1 1 0 0 1 0 1 0 0 0 0 1 1 1 1 1 0 0 1 1 0 0 1 0 1 1 0 1 0 1 0 1 1 1 0 0 1 0 1 0 0 0 0 1 1 1 1 1 0 0 1 1 0 0 1 0 1 1 0 1 0 1];

n=10;

m=31;

 

subplot(311)

stairs(x), grid

axis([1 64 -0.5 1.5]);

Информация о работе Информационная система