Лабораторная работа №8 / ЦОС8
.docМинистерство образования и науки
Санкт-Петербургский государственный электротехнический университет «ЛЭТИ»
Кафедра МО ЭВМ
Отчет
по лабораторной работе №8
по дисциплине «Цифровая обработка сигналов»
Выполнил: Рыжок М. гр. 3341
Проверил: Симончик К.
Лабораторная работа №8
Цель работы: Получить основные навыки работы в среде Matlab. Изучить возможности пакета Signal Processing Toolbox по генерации сигналов. Изучить свойства свертки
Постановка задания:
1)Выполнить генерацию сигналов
-
Гармонический сигнал с заданной частотой с нормально распределенным шумом
-
Гармонический сигнал, частота которого зависит от времени, как полином 3-й степени
-
Синусоида с меняющейся частотой от А до В по заданному закону (линейный, квадратичный, показательный)
-
Синусоида с частотой, меняющейся скачкообразно: сначала А, потом В, потом С и D.
2)Написать программу, вычисляющую свертку 2-х сигналов, оформить ее в виде функции z = myconv(a, b). Сравнить результаты работы программы с функцией conv(a, b).
3)Для сигналов A-G, приведенных ниже, найти свертки A*A, B*C, C*B, (D*E)*B, D*(E*B), D*(E+B), D*E+D*B, F*A, F*G.
Здесь A = {0, 1, 1, 1, 1, 0}, B = {0, 1, 2, 3, 0}, C = {0, 2, 1, 0, 5, 0}, D = {0, 1, 2, 3, 4, 5}, E = {0, 5, 4, 5, 3, 1, 0}, F = sin(2*pi*t)+0.1*randn(1, length(t)), G = {0, 2, 1, 2, 0}, где t = {0, 1/125, 2/125 …1}.
Генерация сигнала с заданной частотой A и нормально распределенным шумом амплитудой alpha.
function s = randnsignal(A, h, alpha)
if nargin < 3
alpha = 0.1;
end
T = 2*pi;
t = 0:T*h:T;
s = length(t);
plot(t, sin(A.*t)+alpha.*randn(1, s))
Здесь A = 2, alpha = 0.1.
Гармонический сигнал, частота которого изменяется по кубическому закону f = At3+Bt2+Ct+D
function s = cubesignal(A, B, C, D, h)
if nargin < 5
h = 1/1024;
end
T = 2*pi;
t = 0:T*h:T;
f = A.*t.^3+B.*t.^2+C.*t+D;
z = sin(f.*t);
plot(t, z);
s = 1;
Здесь f = t3-t2-0.5t-0.5, z = sin(ft);
Гармонический сигнал, частота которого меняется по линейному закону от А до В.
function s = linearw(A, B, h)
if nargin < 3
h = 1/1024;
end
T = 2*pi;
t = 0:T*h:T;
f = A + ((B-A)/T).*t;
s = sin(f.*t);
plot(t, s)
Здесь A = 1, B = 3;
Гармонический сигнал, частота которого меняется по квадратичному закону от A до B.
function s = quadrw(A, B, h)
if nargin < 3
h = 1/1024;
end
T = 2*pi;
t = 0:T*h:T;
f = A + ((B-A)/T^2).*t.*t;
s = sin(f.*t);
plot(t, s)
Как и в предыдущем случае A = 1, B = 3.
Гармонический сигнал, частота которого меняется по показательному закону от А до В.
function s = expw(A, B, h)
if nargin < 3
h = 1/1024;
end
T = 2*pi;
t = 0:T*h:T;
f = A.*exp((log(B/A)/T).*t);
s = sin(f.*t);
plot(t, s)
Как и в предыдущих случаях А = 1, B = 3.
Гармонический сигнал, частота которого постоянна в каждой четверти периода: сначала A, потом B, затем C и, наконец, D.
function s = jumpsignal(A, B, C, D, h)
if nargin < 5
h = 1/1024;
end
T = 2*pi;
t = 0:h:T;
for i = 1:length(t)
if le(t(i), T/4)
s(i) = sin(A*t(i));
end
if and(t(i)>T/4, le(t(i), T/2))
s(i) = sin(B*t(i));
end
if and(t(i)>T/2, le(t(i), 3*T/4))
s(i) = sin(C*t(i));
end
if and(t(i)>3*T/4, le(t(i), T))
s(i) = sin(D*t(i));
end
end
plot(t, s)
Здесь А = С = 1, В = 10, D = 20.
Функция свертки
%Функция реализует свертку двух массивов в 1
%или умножение двух полиномов, представленных в виде массивов коэффициентов
function f = myconv(t1, t2)
n = length(t1); %длина 1-го массива
m = length(t2); %длина 2-го массива
A = zeros(m, n+m-1); %составлям матрицу произведений
for i = 1:m %строка матрицы - коэффициенты умножения 1-го массива
%на i-ый элемент второго массива, сдвинутые
%соответствующим образом (на i позиций вправо)
for j = 1:n %cтолбцы матрицы таким образом представляют
%коэффициенты при одинаковых степенях
%многочлена-свертки
A(i, j+i-1) = t1(j)*t2(i);
end
end
for k = 1:n+m-1
f(k) = sum(A(1:m, k)); %суммируя А по столбцам, мы получим элементы свертки
end
Проведем испытания функции myconv для двух массивов случайных чисел.
a = {0.9501, 0.2311, 0.6068}
b = {0.3155, 1.5532, 0.7079, 1.9574, 0.5045 }
Матрица А будет выглядеть как
0.2998 0.0729 0.1915 0 0 0 0
0 1.4758 0.3590 0.9426 0 0 0
0 0 0.6726 0.1636 0.4296 0 0
0 0 0 1.8598 0.4524 1.1878 0
0 0 0 0 0.4794 0.1166 0.3062
Свертка двух массивов по результатам функций conv и myconv:
0.2998 1.5487 1.2231 2.9660 1.3614 1.3044 0.3062
Выполняя свертку массивов, описанных в задании, получаем:
A*A = {0 0 1 2 3 4 5 4 3 2 1 0 0}
B*C = C*B = {0 0 2 5 8 8 10 15 0 0}
(D*E)*B = D*(E*B) = {0 0 0 5 24 71 143 237 312 331 252 163 67 15 0 0 0}
D*(E+B) = D*E+D*B = {0 0 6 18 38 61 85 73 55 19 5 0 0}
Сигнал F
Сигнал F*A
Сигнал F*G
Выводы: В ходе лабораторной работы были получены теоретические и практические навыки о представлении сигналов в среде Matlab. Также были исследованы свойства свертки сигналов и, в частности, выяснено, что:
-
Операция свертки коммутативна А*В = В*А
-
Операция свертки ассоциативна: А*(В*С) = (А*В)*С
-
Операция свертки дистрибутивна: А*(B+C) = A*B+A*C
-
Операция свертки может служить для фильтрации зашумленных сигналов.