Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР 1 вариант 4 (ЦОС) отчёт - Синтез и фильтрация ШПС-сигналов типа М-последовательностей, кодов Уолша-Адамара.docx
Скачиваний:
62
Добавлен:
13.02.2021
Размер:
680.34 Кб
Скачать
  1. Из m3 отфильтровать м1, т.Е. M3 – сигнал, а м1 – опорная функция. Изобразить полученный результат на общем поле графиков.

% Исследование М-последовательностей на шумоподавление

NoiseAmp = 0; % Номер варианта 4 поделить на 4

Noise = NoiseAmp - 2 * NoiseAmp * rand(1,length(M1)); % формирование шума

NoisedM = Noise + M1; % формирование последовательности М3

NoisedFiltered = my_sf(NoisedM,M1); % фильтрация М1 из М3

***

figure;

subplot(4,2,1); plot(Noise);grid on; title ('Шум');% график шума

subplot(4,2,2); plot(M1);grid on; title ('Последовательность М1'); % график последовательности М1 (повтор для наглядности)

subplot(4,2,3:4); plot(NoisedM);grid on; title ('Последовательность М3'); %график М3-последовательности

subplot(4,2,5:6); plot(NoisedFiltered);grid on; title ('Фильтрация М1 из М3'); %график фильтации М1 из М3

  1. Изобразить результаты из пункта 12 на графике в децибелах на общем поле графиков, воспользовавшись формулой: dB=20×log10(|A/Amax|);

% Исследование М-последовательностей на шумоподавление

NoiseAmp = 0; % Номер варианта 4 поделить на 4

Noise = NoiseAmp - 2 * NoiseAmp * rand(1,length(M1)); % формирование шума

NoisedM = Noise + M1; % формирование последовательности М3

NoisedFiltered = my_sf(NoisedM,M1); % фильтрация М1 из М3

NoisedFilteredDB = 20 * log10(abs(NoisedFiltered./max(NoisedFiltered))); %изображение графика в Децибелах

figure;

subplot(4,2,1); plot(Noise);grid on; title ('Шум');% график шума

subplot(4,2,2); plot(M1);grid on; title ('Последовательность М1'); % график последовательности М1 (повтор для наглядности)

subplot(4,2,3:4); plot(NoisedM);grid on; title ('Последовательность М3'); %график М3-последовательности

subplot(4,2,5:6); plot(NoisedFiltered);grid on; title ('Фильтрация М1 из М3'); %график фильтации М1 из М3

subplot(4,2,7:8); plot(NoisedFilteredDB);grid on; title ('Фильтрация М1 из М3 (в дБ)'); %график фильтации М1 из М3 в дБ

Часть 2. Синтез и фильтрация кодов Уолша-Адамара

Дано:

r = 10

data1 = 4

data2 = 354

  1. Запрограммировать в MATLAB функцию Wfun(data, r), реализующую цифровой автомат генерации кодов Уолша-Адамара, где data – число для которого генерируется код Уолша-Адамара, r – требуемая разрядность для числа data.

function f = WFun(data,r)

ldata = data;

bits = [];

W = [];

T = zeros(1,2^(r-1)/2);

while(ldata > 0)

bits = [mod(ldata,2) bits];

ldata = (ldata - mod(ldata,2))/2;

end

bits = [zeros(1,r-length(bits)) bits]

mux = bits(1);

W = [mux W];

T = [mux T(1:length(T)-1)];

for i = (1:r-1)

q = (2^(i-1));

for x = 2^(i-1):2^(i)-1

mux = mod(T(q) + bits(i+1),2);

W = [mux W];

T = [mux T(1:length(T)-1)];

end

end

f = [];

for i = 1:length(W)

f = [(-2*W(i)+1) f];

end

end

  1. Синтезировать коды w1 и w2 с помощью функции Wfun. Значения data и r взять из таблицы 2 в соответствии с номером по списку.

function f = Lab1_2()

close all;

clear all;

data1 = 4 % число, для которого генерируется код Уолша-Адамара

data2 = 354

R = 10 % разрядность для числа data

W1 = WFun(data1,R); % синтез кода W1

W2 = WFun(data2,R); % синтез кода W2

  1. Сформировать сумму кодов Wсум = W1 + W2.

function f = Lab1_2()

close all;

clear all;

data1 = 4 % число, для которого генерируется код Уолша-Адамара

data2 = 354

R = 10 % разрядность для числа data

W1 = WFun(data1,R); % синтез кода W1

W2 = WFun(data2,R); % синтез кода W2

  1. Запрограммировать в MATLAB функцию Bpfun(w, r), реализующую быстрое преобразование Уолша-Адамара, где w – код Уолша-Адамара, r – разрядность числа, представленного кодом Уолша-Адамара.

function f = Bpfun_2(InData)

A = InData; % входящие данные

LengthOfA=length(A); % определение количества элементов в массиве А

NewArray = zeros(1,LengthOfA); % массив из нулей длиной, равной длине А (то есть для правого столбца "Бабочки")

Divisor = LengthOfA/2; % делитель сокращает длину массива А на 2, равен половине длины А

CountFromOneToDivisor = 1; % счётчик, который считает от 1 до значения Divisor

AddOrSubtract = 1; % показатель суммы или разности

while Divisor >= 1 % самый минимальный размер массива равен 1 числу, как в последнем столбце "Бабочки". Таким образом повторяем цикл, пока не пройдём все столбцы

for i=1:LengthOfA % пока счётчик не превысит длину массива А

if (AddOrSubtract) % Если показатель суммы или разности - истинное значение

NewArray(i) = A(i) + A(i + Divisor); % в новый массив написывается сумма

else

NewArray(i) = A(i - Divisor) - A(i); % в новый массив записывается разность

end

if CountFromOneToDivisor == Divisor % когда счётчик доходит до предела массива, определяемого Divisor

AddOrSubtract = ~AddOrSubtract; % Инверсия AddOrSubtrac

CountFromOneToDivisor = 1;

else

CountFromOneToDivisor = CountFromOneToDivisor + 1;

end

end

A = NewArray; % в массив А записывается посчитанный новый массив для дальнейшей обработки

Divisor = Divisor/2;

end

f = NewArray; % вывод результата

end