
Цифровая обработка сигналов ЦОС / ЦОС-подгон / ЦОС / Matlab / 7 / Zadania_SR7
.docxЛР7
Выполнил студент группы РТ-31, Савельев Максим
Задача 1.
С помощью Matlab выполните, пожалуйста, денормализацию мантиссы двумя методами: денормализуя только ноль и денормализуя числа, близкие к нулю. Необходимо вычислить денормализованные значения для всех бит от 0 до 63. Для получения строки чисел с нормализованной плавающей запятой рекомендуется использовать команды bitget и bi2de.
Полученные денормализованные значения необходимо вывести на график. Сравните, пожалуйста, результаты денормализации.
Код:
% первый вариант денормализация только для нуля
for k = 0:63 % перебор всех возможных представлений
s = 1 - 2 * bitget(k, 6); % знаковый множитель
e = bi2de(bitget(k, 4:5))-1; % порядок
m = 1 + bitand(k, 7) / 8; % мантисса
if 0==bitand(k, 31) % нуль - особый случай
f(k+1)=0;
else
f(k+1)=s*m*(2^e);
end
end
subplot(2, 1, 1)
title('денормализация только для нуля');
plot(f, f*0, '.')
% второй вариант - денормализация для малых по модулю чисел for k = 0:63
for k=0:63 % перебор всех возможных представлений
s = 1 - 2 * bitget(k, 6); % знаковый множитель
e = bi2de(bitget(k, 4:5)); % смещенный порядок
if e == e-1 % истинный порядок
m = 1 + bitand(k, 7) / 8; % нормализованная мантисса
else % нули в поле порядка - не нормализуем ман-тиссу
m = bitand (k, 7) / 8; % денормализованная мантисса
end
f(k+1)=s*m*(2^e);
end
subplot(2, 1, 2)
title('денормализация для малых по модулю чисел');
plot(f, f*0, '.')
График:
Вывод: если использовать денормализованную мантиссу только для представления нуля, малые по модулю числа, представимые в данном формате, оказываются расположены неравномерно — вокруг нуля появляется «мертвая зона», размер которой существенно превышает расстояние между ближайшими к нулю представимыми числами
Задача 2.
С помощью Matlab реализуйте, пожалуйста, алгоритм квантования дискретного сигнала. Сигнал – синусоида N*sin(pi*N*t+phi), где N – номер варианта. Изучите результаты квантования в режимах насыщения и переноса. Изучите результаты квантования в режимах насыщения и переноса при вдвое меньшем количестве уровней квантования. Объясните полученный результат. Обратите внимание на величину ошибки в каждом из случаев.
Постройте спектры сигналов, квантованных в режиме переноса и в режиме насыщения. Сделайте вывод о форме спектра.
Код:
t = 0:0.1:20;
s = 19 * cos(pi*19*t);
y = uencode(s, 5, 1, 'signed');
x1 = udecode(y, 4, 1, 'saturate');
x2 = udecode(y1, 4, 1, 'wrap');
subplot(2, 2, 1)
plot(t, x1)
subplot(2, 2, 2)
plot(t, x2)
subplot(2, 2, 3)
F=abs(fft(x1));
plot(F)
subplot(2, 2, 4)
F=abs(fft(x2));
plot(F)
График:
Вывод: в данном случае по внешнему виду сигнал отличается не сильно, однако при использовании переноса видно большее растекание спектра, по сравнению с насыщением
Задача 3.
Спроектируйте, пожалуйста, КИХ фильтр нижних частот. Фильтр должен обеспечивать пропускание на нормированных частотах от 0 до 0.1*N и запирание на нормированных частотах от 0.11*N до N (частота нормирована к частоте Найквиста). N – номер варианта. Для нахождения коэффициентов фильтра рекомендуется использовать функцию firpm. Выполните округление коэффициентов фильтра до 256 фиксированных значений. Сравните АЧХ исходного фильтра и фильтра с округлёнными коэффициентами. Найдите разницу между этими АЧХ.
Код:
b = remez(256, [0 0.19 0.209 1], [1 1 0 0]);
bq = round(b*256)/256;
[h, f] = freqz(b);
hq = freqz(bq);
subplot(1, 2, 1)
plot(f/pi, abs(h))
subplot (1, 2, 2)
plot(f/pi, abs(hq))
График:
Вывод: после округления коэфициентов фильтра, ачх стала не такой гладкой, а спектр не сильно изменился. Округление используется до более простого хранения и обработки коэфициентов фильтра.
Задача 4.
Спроектируйте, пожалуйста, БИХ фильтр нижних частот, используя аппроксимацию Кауэра. Фильтр должен обеспечивать пульсации в полосе пропускания не более 1 дБ и не менее 40 дБ запирания. Нормированная граничная частота полосы пропускания – 0.1*N (частота нормирована к частоте Найквиста). N- номер варианта. Выполните округление как коэффициентов b, так и коэффициентов a до 256 фиксированных значений. Постройте, пожалуйста, АЧХ исходного фильтра и фильтра с округлёнными коэффициентами. Найдите разницу между этими АЧХ.
Представьте фильтр с округлёнными коэффициентами в каскадной форме в виде трёх последовательно включённых секций второго порядка. Для этого рекомендуется использовать функции tf2sos и sos2tf. Постройте АЧХ получившегося фильтра и АЧХ исходного фильтра. Найдите разницу между ними.
Сделайте вывод о величине ошибки в обоих случаях.
Код:
[b, a] = ellip(6, 1, 40, 0.1); % исходный фильтр
bq = round(b*256)/256; % округление
aq = round(a*256)/256; % округление знаменателя
[h f] = freqz(b, a); % ЧХ исходного фильтра
hq = freqz(bq, aq); % ЧХ округленного фильтра
plot(f/pi, abs(h), f/pi, abs(hq), '--')
figure
sos = tf2sos(b, a); % секции 2-го порядка
sos_q = round(sos*256)/256; % округление коэффициентов
[b_sos_q, a_sos_q] = sos2tf(sos);
[h f] = freqz(b, a);
h_sos_q = freqz(b_sos_q, a_sos_q);
plot(f/pi, abs(h)-abs(h_sos_q));
Графики:
Вывод: Ачх изменилась очень сильно, увеличилась амплитуда пульсаций и скат стал более пологим. Если представить исходный фильтр в виде трех последовательных секций второго порядка, то разница будет на столько мала, что её не будет видно, будет лишь шум квантования, который является крайне незначительным
Задача 5.
Сформируйте, пожалуйста, дискретный сигнал с высокой частотой дискретизации (например, в 1024 раза больше несущей). К сигналу должен быть добавлен шум (ОСШ = 4). Выполните квантование получившегося сигнала по восьми уровням. Постройте график квантованного зашумлённого сигнала. Выполните передискретизацию сигнала, усредняя каждые 64 отсчёта. Сравните сигналы до и после передискретизации. Несущая частота – N кГц, где N – номер варианта.
Код:
У меня не было сил его делать
Вывод: при передескретизации, усредняя каждые 64 отсчтеа, шума будут меньше чем у изначального сигнала, а форма может незначительно поменяться.