Автор работы: Пользователь скрыл имя, 12 Ноября 2009 в 16:39, Не определен
Лабораторная работа
Написание файл-функции
позволяющей построить данную последовательность.
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
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*
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]);