Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

cos-lab4-vorontsov / ЦОС лаба 4 Воронцов

.odt
Скачиваний:
13
Добавлен:
11.05.2015
Размер:
39.95 Кб
Скачать

Белорусский Государственный Университет

Информатики и Радиоэлектроники

Кафедра РТС

Отчет по лабораторной работе №4

«Длинная свёртка сигналов»

Выполнил

ст. гр. 942802

Воронцов М.А.

Проверил

Ходыко Д.Л.

Минск 2012

1. Цель работы

1. Изучить алгоритмы вычисления свёрток сигналов.

2. Изучить алгоритмы вычисления длинных непрерывных свёрток сигналов.

3. Получить навыки моделирования алгоритмов цифровой обработки сигналов.

2. Моделирование длинной свёртки

Код

% исходные данные для Воронцов, гр.942802

M=65; % количество отсчётов входного сигнала

N=18; % длина кадра

L=7; % количество отсчётов импульсной характеристики (ИХ)

delta = L - 1; % перекрытие

x = floor((rand(1,M)-0.5)*100) % формируем сигнал x

h = floor((rand(1,L)-0.5)*100) % формируем ИХ h

% разбиваем на кадры

vsegoKadrov = floor(M/(N-delta)) % сколько всего кадров

polnKadrov = floor(M/(N-delta)-1) % сколько полноценных кадров

otschPosl = M - (N-delta)*polnKadrov % количество существующих отсчётов последнего кадра

clear makax;

makax = x(1,1:N) % матрица с кадрами

strt = 1; % позиции чтения кадров

fnsh = N;

for ct = 1:polnKadrov-1 % считываем кадры

strt = strt + N - delta;

fnsh = fnsh + N - delta;

makax(ct+1, 1:N) = x( strt:fnsh );

end

makax(vsegoKadrov, :) = 0; % последний кадр пишем отдельно

makax(vsegoKadrov, 1:otschPosl) = x(1, M-otschPosl+1:end);

makax

h(1, L+1:N) = 0; % дополним ИХ нулями

H = fft(h); % ДПФ ИХ

clear svrt; % свёртка

Makax(1, 1:N) = fft( makax(1,:) ); % первый кадр без отбрасывания

plex(1,:) = Makax(1, :) .* H(1, :);

svrt = ifft( plex(1,:) );

% остальные кадры в цикле

for ct = 2:vsegoKadrov;

Makax(ct, 1:N) = fft( makax(ct,:) ); % ДПФ кадра

plex(ct,:) = Makax(ct, :) .* H(1, :); % Перемножение спектров ИХ и кадра

svrtNekorr(ct,:) = ifft( plex(ct,:) ); % Циклическая свёртка без коррекции

svrt = [svrt svrtNekorr(ct, delta+1:end)]; % отбрасываем перекрытия

end

% выводим графически

subplot(2,1,1)

plot( real(svrt(:)) ) % наша свёртка

subplot(2,1,2)

plot( real(conv(x,h)), 'r' ) % встроенная функция свёртки

Результат

Вывод: алгоритмическая сложность вычислений составляетумно­жений, где— количество кадров. Если ДПФ считать по алгоритму БПФ, то ещё меньше из-за меньшего количества умножений на матрицы ДЭФ.

3. Предварительное задание

1. Линейная свёртка через циклическую

Код

x = [1 2 3 4];

h = [6 7 8 9];

mtrx = [h(1), h(2), h(3), h(4), 0, 0, 0];

for str=2:7

for col=1:7

mtrx(str,col) = mtrx( str-1, mod(col,7)+1 );

end

end

( mtrx*[x(1), 0, 0, 0, x(4), x(3), x(2)]' )'

conv(x,h)

Результат

ans = 6 19 40 70 70 59 36

ans = 6 19 40 70 70 59 36

2. Длинная свёртка через короткие ДПФ

M=65; % количество отсчётов входного сигнала

N=18; % длина кадра

L=7; % количество отсчётов импульсной характеристики (ИХ)

delta = L - 1; % перекрытие

x = floor((rand(1,M)-0.5)*100) % формируем сигнал x

h = floor((rand(1,L)-0.5)*100) % формируем ИХ h

% разбиваем на кадры

vsegoKadrov = floor(M/(N-delta)) % сколько всего кадров

polnKadrov = floor(M/(N-delta)-1) % сколько полноценных кадров

otschPosl = M - (N-delta)*polnKadrov % количество существующих отсчётов последнего кадра

clear makax;

makax = x(1,1:N) % матрица с кадрами

strt = 1; % позиции чтения кадров

fnsh = N;

for ct = 1:polnKadrov-1 % считываем кадры

strt = strt + N - delta;

fnsh = fnsh + N - delta;

makax(ct+1, 1:N) = x( strt:fnsh );

end

makax(vsegoKadrov, :) = 0; % последний кадр пишем отдельно

makax(vsegoKadrov, 1:otschPosl) = x(1, M-otschPosl+1:end);

makax

h(1, L+1:N) = 0; % дополним ИХ нулями

H = fft(h); % ДПФ ИХ

clear svrt; % свёртка

Makax(1, 1:N) = fft( makax(1,:) ); % первый кадр без отбрасывания

plex(1,:) = Makax(1, :) .* H(1, :);

svrt = ifft( plex(1,:) );

% остальные кадры в цикле

for ct = 2:vsegoKadrov;

Makax(ct, 1:N) = fft( makax(ct,:) ); % ДПФ кадра

plex(ct,:) = Makax(ct, :) .* H(1, :); % Перемножение спектров ИХ и кадра

svrtNekorr(ct,:) = ifft( plex(ct,:) ); % Циклическая свёртка без коррекции

svrt = [svrt svrtNekorr(ct, delta+1:end)]; % отбрасываем перекрытия

end

% выводим графически

plot( real(svrt(:)) )

3. Построили физическую модель вычисления линейной свертки с помощью цифрового фильтра с конечной импульсной характеристикой.

Код

rez'

h = [2 3 4 5];

x = [ a(1:4) ]';

conv(x,h)

Результат

ans = 2.3299 4.7485 6.6905 9.2606 4.4893 1.7818 1.7580

ans = 2.3299 4.7485 6.6905 9.2606 4.4893 1.7818 1.7580

4. Выводы

Изучили алгоритмы вычисления линейной свёртки через циклическую, длинной свёртки через ДПФ, построили физическую модель вычисления ли­нейной свёртки с помощью цифрового фильтра с КИХ, убедились в справедли­вости алгоритмов, получили навыки моделирования алгоритмов цифровой об­работки сигналов.

Соседние файлы в папке cos-lab4-vorontsov