Uploaded by Geleos Geleos

Отчёт

advertisement
САНКТ-ПЕТЕРБУРГСКИЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ
ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ, МЕХАНИКИ И ОПТИКИ
Кафедра речевых информационных систем
ЦИФРОВАЯ ОБРАБОТКА СИГНАЛА
ЛАБОРАТОРНАЯ РАБОТА №1
«Работа в среде Matlab. Структура Signal Processing Toolbox.
Генерация сигналов. Свертка»
Выполнил:
Магистр группы № 5599 Корявцев В.П.
Проверил:
к.т.н. доцент Симончик К. К.
_________________________
Санкт-Петербург
2012
Цель работы: Получить основные навыки работы в среде Matlab.
Изучить возможности пакета Signal Processing Toolbox по генерации
сигналов. Изучить свойства свертки
Задание№1
Выполнить генерацию следующих сигналов:
Пункт1: Гармонический
распределенным шумом (randn)
сигнал
с
частотой
10 Гц
1/128
20 Гц
1/128
30 Гц
1/128
A
с
Код программы:
function HarmonicSignal
f1 = 10; % частота сигнала 1
f2 = 20; % частота сигнала 2
f3 = 30; % частота сигнала 3
T = 128; % T – длина сигнала
t=0:1/T:1; % вектор времени t, изменяющийся с шагом 1/T
A = 3; % амплитуда
% зададим нормально распредел?нный шум v(t)
y1=A*sin(f1*t)+randn(1,length(t));
y2=A*sin(f2*t)+randn(1,length(t));
y3=A*sin(f3*t)+randn(1,length(t));
plot(t,y1,t,y2,t,y3)
grid on
нормально
xlabel('Time');
ylabel('Amplitude');
title('SIGNAL');
Пункт2: Гармонический сигнал, частота которого меняется по закону
At^3+Bt^2+Ct+D
10
5
Код программы:
function HarmonicSignalFormula
T = 1024; % T – длина сигнала
3
1
1/1024
t=[0:1/T:1]; % вектор времени t, изменяющийся с шагом 1/T
A = 10 * (t.^3);
B = 5 * (t.^2);
C = 3 * t;
D = 1 * t;
f1 = [(A+B+C+D)]; % частота сигнала 1
Amp = 3; % амплитуда
y1=Amp*sin(f1.*t);
plot(t,y1, '.')
grid on
xlabel('Time');
ylabel('Amplitude');
title('SIGNAL');
Пункт 3: Синусоида с меняющейся частотой от A до B по законам С и
D.
5
100
линейный
квадр.
Код программы:
function HarmonicSignalSqrFormula
A = 5;
B = 100;
t1 = 0:1/1024:1.5;
t2 = 1.5:1/1024:3;
f1 = A:(B-A)/(length(t1)-1):B;
y1 = sin(f1.*t1);
f2 = sqrt(B):(sqrt(A)-sqrt(B))/(length(t2)-1):sqrt(A);
y2 = sin(f2.^2.*(t2-1.5));
plot(t1,y1, t2,y2)
grid on
1/1024
xlabel('Time');
ylabel('Amplitude');
title('SIGNAL');
Пункт 4: Синусоида с частотой меняющейся скачкообразно: первая
частота А, далее B, C и D.
10
20
Код программы:
function SinSignalJump
t = 0:1/1024:4;
A = [10 20 30 40];
y = sin(A(1)*t).*( (0<=t)&(t<1) ) +...
sin(A(2)*t).*( (1<=t)&(t<2) ) +...
sin(A(3)*t).*( (2<=t)&(t<3) ) +...
sin(A(4)*t).*( (3<=t)&(t<=4) );
plot(t,y)
grid on
xlabel('Time');
ylabel('Amplitude');
title('SIGNAL');
30
40
1/1024
Задание№2
Написать программу, вычисляющую свертку двух сигналов, оформить ее
в виде функции Z=myCONV(A,B). Сравнить результаты работы программы с
функцией conv(A,B).
Код функции:
function Z = myCONV(a, b)
if ~(isvector(a)||isvector(b))
disp('Входные параметры должны быть векторами!')
end
n = length(a); % длинна полинома a
m = length(b); % длинна полинома b
M = zeros(m,m+n-1); % пустая матрица, куда будем собирать частичные
произведения
for i = 1:m % получаем частичные произведения
M(i, i:i+n-1 ) = a*b(i);
end
% находим суммы частичных произведений
% и получаем результат
Z = sum(M);
End
Пример сравнения:
function Y = conv_check()
A= [0,1,1,1,1,1,0];
Z_check = myCONV(A,A);
Z_check_1 = conv(A,A);
figure; plot(Z_check); title('A*A_myConv');
grid on
figure; plot(Z_check_1); title('A*A_MTALAB_conv');
grid on
Y = ('done');
Задание№3
Для сигналов найти свертки (используя свою программу) в соответствии
с заданием. Объяснить полученные результаты аналитически.
A={…0,1,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,0,…}
E={…,0,5,4,5,3,1,0,…}
F=sin(2*pi*t)+0.1*randn(1,length(t)); t=0:1/125:10;
G={…,0,2,1,2,0,…}
1.
2.
3.
4.
5.
6.
A*A.
B*C; C*B.
(D*E)*B; D*(E*B).
D*(E+B); D*E+D*B.
F*A.
F*G
Код функции:
function X = svertka_zna4eniya()
A = [0,1,1,1,1,1,0];
B = [0,1,2,3,0,0,0];
C = [0,2,1,0.5,0,0,0];
D = [0,1,2,3,4,5,0];
E = [0,5,4,5,3,1,0];
t = 0:1/125:10;
F = sin(2*pi*t) + 0.1*randn(1,length(t));
G = [0,2,1,2,0,0,0];
Z1 = myCONV(A,A);
Z2_1 = myCONV(B,C);
Z2_2 = myCONV(C,B);
Z3_1 = myCONV(myCONV(D,E),B);
Z3_2 = myCONV(D,myCONV(E,B));
Z4_1 = myCONV(D,E+B);
Z4_2 = myCONV(D,E)+myCONV(D,B);
Z5 = myCONV(F,A);
Z6 = myCONV(F,G);
figure; plot(Z1); title('A*A');
grid on
figure; plot(Z2_1); title('B*C');
grid on
figure; plot(Z2_2); title('C*B');
grid on
figure; plot(Z3_1); title('(D*E)*B');
grid on
figure; plot(Z3_2); title('D*(E*B)');
grid on
figure; plot(Z4_1); title('D*(E+B)');
grid on
figure; plot(Z4_2); title('D*E+D*B');
grid on
figure; plot(Z5); title('F*A');
grid on
figure; plot(Z6); title('F*G');
grid on
X = ('done');
Контрольные вопросы
1. Какие свойства свертки использовались в лабораторной работе?
1) Дистрибутивность: h(t) * [a(t)+b(t)] = h(t) * a(t)+h(t) * b(t)
2) Коммутативность: a(t) * b(t) = a(t) * b(t)
3) Ассоциативность: [a(t) * b(t)] * h(t) = a(t) * [b(t)* h(t)]
2. Роль свертки в ЦОС.
Свертка – это математический способ комбинирования двух сигналов для формирования
третьего сигнала. Это один из самых важных методов ЦОС. Пользуясь стратегией
импульсного разложения, системы описываются сигналом, называемым импульсной
характеристикой. Свертка важна, так как она связывает три сигнала: входной сигнал,
выходной сигнал и импульсную характеристику.
Преобразование свертки однозначно определяет выходной сигнал y(t) для установленного
значения входного сигнала x(t) при известном значении функции импульсного отклика
системы h(t).
3. В чем отличие дискретной свертки от непрерывной?
Формула для непрерывной свертки: y(t) = x() h(t-) d
Формула для дискретной свертки: y(kt) =h(nt) x(kt-nt)
Отличия:
- вид формулы
- нижние пределы суммирования и интегрирования
4. Как представить дискретный сигнал с использованием свертки и дельтафункции?
Представление дискретного сигнала с помощью дельта-функции (цифрового единичного
импульса):
x(n) =
- цифровой единичный импульс
Представление дискретного сигнала с помощью свертки:
y(n) =x(m) h(n-m)
h(n) – реакця на u0(n) – импульсная характериска.
Download