- •Часть 1. Синтез и фильтрация м-последовательностей
- •Построить взаимнокорреляционную функцию – вкф, т.Е. М2 – сигнал, а м1 – опорная функция. Изобразить полученную автокорреляционную функцию на общем поле графиков.
- •Из Mсум отфильтровать м1, т.Е. Mсум – сигнал, а м1 – опорная функция. Изобразить полученный результат на общем поле графиков.
- •Из Mсум отфильтровать м2, т.Е. Mсум – сигнал, а м2 – опорная функция. Изобразить полученный результат на общем поле графиков.
- •Из m3 отфильтровать м1, т.Е. M3 – сигнал, а м1 – опорная функция. Изобразить полученный результат на общем поле графиков.
- •Часть 2. Синтез и фильтрация кодов Уолша-Адамара
- •Синтезировать коды w1 и w2 с помощью функции Wfun. Значения data и r взять из таблицы 2 в соответствии с номером по списку.
- •Вычислить быстрое преобразование Уолша-Адамара для суммы кодов Wсум. Доказать, что полученный результат соответствует исходным закодированным числам.
- •Вычислить быстрое преобразование Уолша-Адамара для суммы кодов Wшум. Изобразить на графике полученный результат. Доказать, что полученный результат соответствует исходным закодированным числам.
Из 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
Изобразить результаты из пункта 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
Запрограммировать в 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
Синтезировать коды 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
Сформировать сумму кодов 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
Запрограммировать в 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