Добавил:
debilX2
t.me
Фулл всегда есть! А если нет, то Вы плохо его ищите! ИиКГ, СКДИКТ, ОКИТПЭС и тд https://t.me/whitedevil752rnТак же веду разработку КД (конструкторской документации) согласно ГОСТ. Имеется опыт работы при производстве на одном из ведущих в области радиэлектроники предприятии. Пишите)
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:вроде лр2, а может это и практика, абракадабра крч / rts_lr2_example
.m %%% ЛР №2. Исследование импульсно-кодовых модуляций %%
clear all
close all
clc
disp('% ЛР №2. Исследование импульсно-кодовых модуляций')
%%% Входные данные %%
load('abracadabra.mat')
Fs = 48e3; % частота дискретизации (для MP3)
fc_LPH_TX = 4e3; % частота среза ФНЧ передающего тракта
x_input = abracadabra;
N = length(x_input);
n = 0:N-1;
t = n/Fs;
%%% ---------------------------------------------------------------------------- %%
disp('% ♪ Исходный сигнал ♪')
sound(x_input,Fs) % воспроизведение сигнала
disp('% Для остановки воспроизведения нажмите <ENTER>')
pause
clear sound
[S_x,f] = periodogram(x_input,[],N,Fs,'twosided'); % рассчёт периодограммы
figure
subplot(2,1,1)
plot(t,x_input)
xlabel('t, s')
ylabel('x(t)')
ylim([-1.05 1.05])
grid on
subplot(2,1,2)
semilogx(f,mag2db(S_x))
xlabel('f, Hz')
ylabel('S_x(f)')
xlim([0 Fs/2])
ylim([-150 0])
grid on
sgtitle('Входной сигнал и его периодограмма')
disp('% Для продолжения нажмите <ENTER>')
pause
%%% П1. ДИКМ: квантование разности между 2 отсчётами %%
disp('% П1. ДИКМ: квантование разности между 2 отсчётами')
% Кодирование:
[b,a] = butter(10,fc_LPH_TX/(Fs/2),'low'); % рассчёт коэффициентов фильтра Баттерворта
x_filtered = filter(b,a,x_input); % фильтрация до квантования
x_delayed = [0;x_filtered(1:end-1)]; % задержка сигнала
delta = x_filtered - x_delayed; % разница между 2 отсчётами
max_delta = max(delta); % макс. значение
delta_normalized = delta/max_delta; % нормировка на макс. значение
m = 8; % число бит квантования
d = 1/(2^(m-1));
partition = [-1:d:1-d];
codebook = [-1:d:1];
[~,delta_quantiz_1,distortion] = quantiz(delta_normalized,partition,codebook); % квантование дельты
% Декодирование:
delta_output = delta_quantiz_1 * max_delta; % деквантование дельты
y = cumsum(delta_output);
[S_y,f] = periodogram(y,[],N,Fs,'twosided');
figure
plot(t,delta); hold on
plot(t,delta_quantiz_1*max_delta)
plot(t,delta_output)
grid on
legend('input','quantiz','output')
xlabel('t')
ylabel('Δ(t)')
title('дельта ДИКМ')
disp('% Добится max значения Δ ≤ 0.25')
disp('% Для продолжения нажмите <ENTER>')
pause
figure
subplot(2,1,1)
plot(t,y)
xlabel('t, s')
ylabel('y(t)')
ylim([-1.2 10])
xlim([0 N/Fs])
grid on
subplot(2,1,2)
semilogx(f,mag2db(S_y))
xlabel('f, Hz')
ylabel('S_y(f)')
xlim([0 Fs/2])
ylim([-150 max(mag2db(S_y))])
grid on
sgtitle('восстановленный сигнал и его периодограмма')
% Фильтрация сигнала:
disp('% Фильтрация сигнала:')
disp('% синтезируйте АЧХ фильтра и экспортируйте коэффициенты')
disp('% сохраните коэффициенты SOS и G под именем filt_coef_1.mat')
clear b a
load('filt_coef_1.mat')
[b,a] = sos2tf(SOS,G);
y_output = filter(b,a,y);
[S_y,f] = periodogram(y_output,[],N,Fs,'twosided');
figure
subplot(3,1,1)
plot(t,x_input); hold on
plot(t,y_output)
grid on
xlabel('t')
ylabel('x(t)')
legend('input','output')
title('входной и выходной сигналы')
ylim([-1.05 1.05])
subplot(3,1,2)
semilogx(f,mag2db(S_x)); hold on
semilogx(f,mag2db(S_y))
grid on
xlabel('f, Hz')
ylabel('S(f)')
legend('input','output')
title('их периодограммы')
xlim([0 Fs/1e3])
ylim([-150 0])
subplot(3,1,3)
plot(t,delta)
grid on
xlabel('t')
ylabel('Δ(t)')
title('дельта при ДИКМ')
sgtitle('ДИКМ: квантование разности между 2 отсчётами')
disp('% Сделайте вывод об изменении качества звука и его причины')
disp('% ♪ Выходной сигнал ♪')
sound(y_output,Fs)
disp('% Для остановки воспроизведения нажмите <ENTER>')
pause
clear sound
disp('% Посчитайте мощность шумов квантования для ДИКМ (случай №1)')
disp('% Для продолжения нажмите <ENTER>')
pause
%%% П2. ДИКМ: квантование разности между текщим и прошлым квантованнным отсчётом %%
disp('% П2. ДИКМ: квантование разности между текщим и прошлым квантованнным отсчётом')
disp('% 1) Написать код для реализации ДИКМ с декодером в кодере')
disp('% 2) Выбрать частоту среза для фильтра на передающей стороне, чтобы обеспечить Δ ≤ 0.25')
disp('% 3) Выбрать фильтр на приёмной стороне, чтобы убрать постоянную составляющую')
disp('% 4) Построить графики входного и выходного сигналов и Δ')
disp('% 5) Сделать вывод об изменении качества звука и его причины')
disp('% 6) Посчитать мощность шумов квантования для ДИКМ (случай №2)')
%%% П3. Дельта модуляция %%
disp('% П3. Дельта модуляция')
disp('% 1) Написать код для реализации дельта модуляции')
disp('% 2) Выбрать частоту среза для фильтра на передающей стороне, чтобы обеспечить Δ ≤ 0.125')
disp('% Если звучание выходного сигнала будет плохим, достичь Δ ≤ 0.0625')
disp('% 3) Выбрать фильтр на приёмной стороне, чтобы убрать постоянную составляющую')
disp('% 4) Построить графики входного и выходного сигналов и Δ')
disp('% 5) Сделать вывод об изменении качества звука и его причины')
disp('% 6) Посчитать мощность шумов квантования для дельта модуляции')
clear all
close all
clc
disp('% ЛР №2. Исследование импульсно-кодовых модуляций')
%%% Входные данные %%
load('abracadabra.mat')
Fs = 48e3; % частота дискретизации (для MP3)
fc_LPH_TX = 4e3; % частота среза ФНЧ передающего тракта
x_input = abracadabra;
N = length(x_input);
n = 0:N-1;
t = n/Fs;
%%% ---------------------------------------------------------------------------- %%
disp('% ♪ Исходный сигнал ♪')
sound(x_input,Fs) % воспроизведение сигнала
disp('% Для остановки воспроизведения нажмите <ENTER>')
pause
clear sound
[S_x,f] = periodogram(x_input,[],N,Fs,'twosided'); % рассчёт периодограммы
figure
subplot(2,1,1)
plot(t,x_input)
xlabel('t, s')
ylabel('x(t)')
ylim([-1.05 1.05])
grid on
subplot(2,1,2)
semilogx(f,mag2db(S_x))
xlabel('f, Hz')
ylabel('S_x(f)')
xlim([0 Fs/2])
ylim([-150 0])
grid on
sgtitle('Входной сигнал и его периодограмма')
disp('% Для продолжения нажмите <ENTER>')
pause
%%% П1. ДИКМ: квантование разности между 2 отсчётами %%
disp('% П1. ДИКМ: квантование разности между 2 отсчётами')
% Кодирование:
[b,a] = butter(10,fc_LPH_TX/(Fs/2),'low'); % рассчёт коэффициентов фильтра Баттерворта
x_filtered = filter(b,a,x_input); % фильтрация до квантования
x_delayed = [0;x_filtered(1:end-1)]; % задержка сигнала
delta = x_filtered - x_delayed; % разница между 2 отсчётами
max_delta = max(delta); % макс. значение
delta_normalized = delta/max_delta; % нормировка на макс. значение
m = 8; % число бит квантования
d = 1/(2^(m-1));
partition = [-1:d:1-d];
codebook = [-1:d:1];
[~,delta_quantiz_1,distortion] = quantiz(delta_normalized,partition,codebook); % квантование дельты
% Декодирование:
delta_output = delta_quantiz_1 * max_delta; % деквантование дельты
y = cumsum(delta_output);
[S_y,f] = periodogram(y,[],N,Fs,'twosided');
figure
plot(t,delta); hold on
plot(t,delta_quantiz_1*max_delta)
plot(t,delta_output)
grid on
legend('input','quantiz','output')
xlabel('t')
ylabel('Δ(t)')
title('дельта ДИКМ')
disp('% Добится max значения Δ ≤ 0.25')
disp('% Для продолжения нажмите <ENTER>')
pause
figure
subplot(2,1,1)
plot(t,y)
xlabel('t, s')
ylabel('y(t)')
ylim([-1.2 10])
xlim([0 N/Fs])
grid on
subplot(2,1,2)
semilogx(f,mag2db(S_y))
xlabel('f, Hz')
ylabel('S_y(f)')
xlim([0 Fs/2])
ylim([-150 max(mag2db(S_y))])
grid on
sgtitle('восстановленный сигнал и его периодограмма')
% Фильтрация сигнала:
disp('% Фильтрация сигнала:')
disp('% синтезируйте АЧХ фильтра и экспортируйте коэффициенты')
disp('% сохраните коэффициенты SOS и G под именем filt_coef_1.mat')
clear b a
load('filt_coef_1.mat')
[b,a] = sos2tf(SOS,G);
y_output = filter(b,a,y);
[S_y,f] = periodogram(y_output,[],N,Fs,'twosided');
figure
subplot(3,1,1)
plot(t,x_input); hold on
plot(t,y_output)
grid on
xlabel('t')
ylabel('x(t)')
legend('input','output')
title('входной и выходной сигналы')
ylim([-1.05 1.05])
subplot(3,1,2)
semilogx(f,mag2db(S_x)); hold on
semilogx(f,mag2db(S_y))
grid on
xlabel('f, Hz')
ylabel('S(f)')
legend('input','output')
title('их периодограммы')
xlim([0 Fs/1e3])
ylim([-150 0])
subplot(3,1,3)
plot(t,delta)
grid on
xlabel('t')
ylabel('Δ(t)')
title('дельта при ДИКМ')
sgtitle('ДИКМ: квантование разности между 2 отсчётами')
disp('% Сделайте вывод об изменении качества звука и его причины')
disp('% ♪ Выходной сигнал ♪')
sound(y_output,Fs)
disp('% Для остановки воспроизведения нажмите <ENTER>')
pause
clear sound
disp('% Посчитайте мощность шумов квантования для ДИКМ (случай №1)')
disp('% Для продолжения нажмите <ENTER>')
pause
%%% П2. ДИКМ: квантование разности между текщим и прошлым квантованнным отсчётом %%
disp('% П2. ДИКМ: квантование разности между текщим и прошлым квантованнным отсчётом')
disp('% 1) Написать код для реализации ДИКМ с декодером в кодере')
disp('% 2) Выбрать частоту среза для фильтра на передающей стороне, чтобы обеспечить Δ ≤ 0.25')
disp('% 3) Выбрать фильтр на приёмной стороне, чтобы убрать постоянную составляющую')
disp('% 4) Построить графики входного и выходного сигналов и Δ')
disp('% 5) Сделать вывод об изменении качества звука и его причины')
disp('% 6) Посчитать мощность шумов квантования для ДИКМ (случай №2)')
%%% П3. Дельта модуляция %%
disp('% П3. Дельта модуляция')
disp('% 1) Написать код для реализации дельта модуляции')
disp('% 2) Выбрать частоту среза для фильтра на передающей стороне, чтобы обеспечить Δ ≤ 0.125')
disp('% Если звучание выходного сигнала будет плохим, достичь Δ ≤ 0.0625')
disp('% 3) Выбрать фильтр на приёмной стороне, чтобы убрать постоянную составляющую')
disp('% 4) Построить графики входного и выходного сигналов и Δ')
disp('% 5) Сделать вывод об изменении качества звука и его причины')
disp('% 6) Посчитать мощность шумов квантования для дельта модуляции')
Соседние файлы в папке вроде лр2, а может это и практика, абракадабра крч
