САНКТ-ПЕТЕРБУРГСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ, МЕХАНИКИ И ОПТИКИ Кафедра речевых информационных систем ЦИФРОВАЯ ОБРАБОТКА СИГНАЛА ЛАБОРАТОРНАЯ РАБОТА №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) – импульсная характериска.