
Добавил:
debilX2
t.me
Фулл всегда есть, ФОЭ ТОЭ ТЭЦ Электроника, КЭТ ИиКГ и тд https://t.me/whitedevil752
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
clc
clear
close all
%%%%%% Исходные данные %%%%%%
Nbr =input("Вставьте номер бригады: "); %% Номер бригады
N = 64 %% Период (длина) последовательности
Fs = 2000*(mod(Nbr,5)+1) %% Частота дискретизации
A1 = 1+0.01*Nbr %% Амплитуды дискретных гармоник
A2 = 2*A1 %% Амплитуды дискретных гармоник
f1 = Fs/4 %% Частоты дискретных гармоник
f2 = 1.5*f1 %% Частоты дискретных гармоник
M = 71 %% Период последовательности
f11 =1.1*f1 %% Частоты дискретных гармоник
f21 =1.07*f2 %% Частоты дискретных гармоник
f12 =1.05*f1 %% Частоты дискретных гармоник
df = Fs/N %% Частоты дискретных гармоник
f22 = f12+df
x3 = Nbr*[0.1, 0.2, 0.3, 0.4, 0.5] %% Периодическая последовательность
x4 = Nbr*[0.5, 0.4, 0.3, 0.2, 0.1] %% Периодическая последовательность
x5 = Nbr*[0.1, 0.2, 0.3] %% Периодическая последовательность
x6 = Nbr*[0.3, 0.2, 0.1, 0.2, 0.3] %% Периодическая последовательность
b0 = 0.5+0.02*Nbr %% Коэффициенты числителя передаточной функции
b1 = b0*(-1)^(Nbr+1)*(0.982+0.0178)*Nbr %% Коэффициенты числителя передаточной функции
b2 = b0*(0.8+0.2*(mod(Nbr,5))) %% Коэффициенты числителя передаточной функции
b = [b0, b1, b2]
a0 = 1 %% Коэффициенты знаменателя передаточной функции
a1 = (-1)^(Nbr)*(0.778+0.025)*Nbr %% Коэффициенты знаменателя передаточной функции
a2 = 0.64+0.006*Nbr %% Коэффициенты знаменателя передаточной функции
a = [a0, a1, a2]
N1 = mod(Nbr,10)+20 %% Длина ИХ
N2 = mod(Nbr,10)+30 %% Длина воздействия
N3 = mod(Nbr,10)+200 %% Длина воздействия
%% 1. Исследование эффекта растекания спектра %%
N= N+input("введите значение для изменения периода(длинны) (оставьте 0 если изменение не требуется): ");
T= 1/Fs;
f = 1/T + input("введите значение для изменения частоты (оставьте 0 если изменение не требуется): ");
n = 0:(N-1); % ДИСКРЕТНОЕ НОРМИРОВАННОЕ ВРЕМЯ
x = A1*cos(2*pi*f*n*T);
w1 = 2*pi*f1/Fs; w2 = 2*pi*f2/Fs; % НОРМИРОВАННЫЕ ЧАСТОТЫ ДИСКРЕТНЫХ ГАРМОНИК (РАД)
k = 0:(N-1); % ДИСКРЕТНАЯ НОРМИРОВАННАЯ ЧАСТОТА
X = fft(x); % ДПФ ПЕРИОДИЧЕСКОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MOD = (2/N)*abs(X); % АМПЛИТУДНЫЙ СПЕКТР ПЕРИОДИЧЕСКОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MOD(1) = (1/N)*abs(X(1));
%% график последовательности
figure('Name','Periodic Sequence','NumberTitle','off')
stem(n,x, 'MarkerSize',3,'Linewidth',2)
grid, xlabel('n')
ylabel('x(n)'), title(strcat(['Periodic Sequence x(n) N = ',num2str(N)]))
%% график амплитудного спектра
figure('Name','Amplitude Spectrum','NumberTitle', 'off')
stem(k,MOD,'MarkerSize',3,'Linewidth',2), grid
xlabel('k'), ylabel('1/N|X(k)|')
title(strcat(['Amplitude Spectrum of the Periodic Sequence N = ',num2str(N)]))
%% НЕОБХОДИМ ПОРОГ, БЕЗ НЕГО ПРИМЕНЕНИЕ ОКНА МОЖЕТ ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ СОСТАВЛЯЮЩИЕ
P=N*f/Fs
PP= floor(P);
%% НЕОБХОДИМ ПОРОГ, БЕЗ НЕГО ПРИМЕНЕНИЕ ОКНА МОЖЕТ ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ СОСТАВЛЯЮЩИЕ
%% УСЛОВИЕ РАБОТАЕТ ПУТЕМ ВЫЧИТАНИЯ ИЗ ИСХОДНОГО P ОКРУГЛЕННОГО P (PP). ЕСЛИ P НЕ ЦЕЛОЕ, ЕСТЬ РАСТЕКАНИЕ
if P-PP == 0
disp('Растекания нет');
else
disp('Растекание есть');
M=N;
n1 = 0:(M-1); % ДИСКРЕТНОЕ НОРМИРОВАННОЕ ВРЕМЯ (ПЕРИОД M)
k1 = 0:(M-1); % ДИСКРЕТНАЯ НОРМИРОВАННАЯ ЧАСТОТА (ПЕРИОД M)
x_M = A1*cos(w1*n1); % ПОСЛЕДОВАТЕЛЬНОСТЬ (ПЕРИОД M)
X_M = fft(x_M); % ДПФ ПОСЛЕДОВАТЕЛЬНОСТИ (ПЕРИОД M)
MOD_M = (2/M)*abs(X_M); % АМПЛИТУДНЫЙ СПЕКТР ПОСЛЕДОВАТЕЛЬНОСТИ (ПЕРИОД M)
MOD_M(1) = (1/M)*abs(X_M(1));
P_N = N*f1/Fs; % ЧИСЛО ПЕРИОДОВ ДИСКРЕТНОЙ ГАРМОНИКИ С ЧАСТОТОЙ f1 НА ПЕРИОДЕ ПОСЛЕДОВАТЕЛЬНОСТИ N
P_M = M*f1/Fs; % ЧИСЛО ПЕРИОДОВ ДИСКРЕТНОЙ ГАРМОНИКИ С ЧАСТОТОЙ f1 НА ПЕРИОДЕ ПОСЛЕДОВАТЕЛЬНОСТИ M
%%WIN(:,1) = hann(N);
%%WIN(:,2) = blackman(N);
%%WIN(:,3) = nuttallwin(N),
%%WIN(:,4) = flattopwin(N);
%% Окно хэннинга
win_hann = hann(M)'; % ОКНО хэннинга — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_hann = x_M.*win_hann; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_hann = fft(xw_hann); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_hann =(2/M)*abs(XW_hann); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_hann(1) =(1/M)*abs(XW_hann(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions Хэннинг','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_hann,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
%% Окно блэкмена
win_black = blackman(M)'; % ОКНО блэкмена — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_black = x_M.*win_black; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_black = fft(xw_black); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_black =(2/M)*abs(XW_black); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_black(1) =(1/M)*abs(XW_black(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions черный мужик','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_black,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
%% Окно нуттелла вкусняшка
win_nutt = nuttallwin(M)'; % ОКНО нуттелла — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_nutt = x_M.*win_nutt; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_nutt = fft(xw_nutt); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_nutt =(2/M)*abs(XW_nutt); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_nutt(1) =(1/M)*abs(XW_nutt(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions этим можно брать и обмазываться (нуттелла)','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_nutt,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
%% Окно флэттоп
win_flat = flattopwin(M)'; % ОКНО флэттоп — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_flat = x_M.*win_flat; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_flat = fft(xw_flat); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_flat =(2/M)*abs(XW_flat); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_flat(1) =(1/M)*abs(XW_flat(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions флэттоп','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_flat,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
end
disp('% Для вывода второго пункта задания нажми enter')
pause
%% 2. Улучшение различения дискретных гармоник с близко расположенными частотами
N_2=2*N;
T = 1/Fs;
f1 = 0.275*Fs;
f2 = 0.2875*Fs;
n = 0:(N_2-1); % ДИСКРЕТНОЕ НОРМИРОВАННОЕ ВРЕМЯ
x = A1*cos(2*pi*f1*n*T)+A2*cos(2*pi*f2*n*T);
w1 = 2*pi*f1/Fs; w2 = 2*pi*f2/Fs; % НОРМИРОВАННЫЕ ЧАСТОТЫ ДИСКРЕТНЫХ ГАРМОНИК (РАД)
k = 0:(N_2-1); % ДИСКРЕТНАЯ НОРМИРОВАННАЯ ЧАСТОТА
X = fft(x); % ДПФ ПЕРИОДИЧЕСКОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MOD = (2/N_2)*abs(X); % АМПЛИТУДНЫЙ СПЕКТР ПЕРИОДИЧЕСКОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MOD(1) = (1/N_2)*abs(X(1));
%% график последовательности
figure('Name','Periodic Sequence','NumberTitle','off')
stem(n,x, 'MarkerSize',3,'Linewidth',2)
grid, xlabel('n')
ylabel('x(n)'), title(strcat(['Periodic Sequence x(n) N = ',num2str(N2)]))
%% график амплитудного спектра
figure('Name','Amplitude Spectrum','NumberTitle', 'off')
stem(k,MOD,'MarkerSize',3,'Linewidth',2), grid
xlabel('k'), ylabel('1/N|X(k)|')
title(strcat(['Amplitude Spectrum of the Periodic Sequence N = ',num2str(N2)]))
%% НЕОБХОДИМ ПОРОГ, БЕЗ НЕГО ПРИМЕНЕНИЕ ОКНА МОЖЕТ ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ СОСТАВЛЯЮЩИЕ
P=N_2*f1/Fs
P2=N_2*f2/Fs
PP= floor(P);
%% НЕОБХОДИМ ПОРОГ, БЕЗ НЕГО ПРИМЕНЕНИЕ ОКНА МОЖЕТ ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ СОСТАВЛЯЮЩИЕ
%% УСЛОВИЕ РАБОТАЕТ ПУТЕМ ВЫЧИТАНИЯ ИЗ ИСХОДНОГО P ОКРУГЛЕННОГО P (PP). ЕСЛИ P НЕ ЦЕЛОЕ, ЕСТЬ РАСТЕКАНИЕ
if P-PP == 0
disp('Растекания нет');
else
disp('Растекание есть');
M=N_2;
n1 = 0:(M-1); % ДИСКРЕТНОЕ НОРМИРОВАННОЕ ВРЕМЯ (ПЕРИОД M)
k1 = 0:(M-1); % ДИСКРЕТНАЯ НОРМИРОВАННАЯ ЧАСТОТА (ПЕРИОД M)
x_M = A1*cos(w1*n1)+A2*cos(w2*n1); % ПОСЛЕДОВАТЕЛЬНОСТЬ (ПЕРИОД M)
X_M = fft(x_M); % ДПФ ПОСЛЕДОВАТЕЛЬНОСТИ (ПЕРИОД M)
MOD_M = (2/M)*abs(X_M); % АМПЛИТУДНЫЙ СПЕКТР ПОСЛЕДОВАТЕЛЬНОСТИ (ПЕРИОД M)
MOD_M(1) = (1/M)*abs(X_M(1));
P_N = N_2*f1/Fs; % ЧИСЛО ПЕРИОДОВ ДИСКРЕТНОЙ ГАРМОНИКИ С ЧАСТОТОЙ f1 НА ПЕРИОДЕ ПОСЛЕДОВАТЕЛЬНОСТИ N
P_M = M*f1/Fs; % ЧИСЛО ПЕРИОДОВ ДИСКРЕТНОЙ ГАРМОНИКИ С ЧАСТОТОЙ f1 НА ПЕРИОДЕ ПОСЛЕДОВАТЕЛЬНОСТИ M
%%WIN(:,1) = hann(N);
%%WIN(:,2) = blackman(N);
%%WIN(:,3) = nuttallwin(N),
%%WIN(:,4) = flattopwin(N);
%% Окно хэннинга
win_hann = hann(M)'; % ОКНО хэннинга — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_hann = x_M.*win_hann; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_hann = fft(xw_hann); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_hann =(2/M)*abs(XW_hann); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_hann(1) =(1/M)*abs(XW_hann(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions Хэннинг','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_hann,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
%% Окно блэкмена
win_black = blackman(M)'; % ОКНО блэкмена — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_black = x_M.*win_black; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_black = fft(xw_black); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_black =(2/M)*abs(XW_black); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_black(1) =(1/M)*abs(XW_black(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions черный мужик','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_black,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
%% Окно нуттелла вкусняшка
win_nutt = nuttallwin(M)'; % ОКНО нуттелла — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_nutt = x_M.*win_nutt; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_nutt = fft(xw_nutt); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_nutt =(2/M)*abs(XW_nutt); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_nutt(1) =(1/M)*abs(XW_nutt(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions этим можно брать и обмазываться (нуттелла)','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_nutt,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
%% Окно флэттоп
win_flat = flattopwin(M)'; % ОКНО флэттоп — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_flat = x_M.*win_flat; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_flat = fft(xw_flat); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_flat =(2/M)*abs(XW_flat); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_flat(1) =(1/M)*abs(XW_flat(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions флэттоп','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_flat,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
end
disp('% Для вывода третьего пункта задания нажми enter')
pause
%% 3. Вычисление круговой свёртки %%
x1 = [0, 0.25, 0.5, 0.75 ,1]; % ПЕРВАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ
x2 = [0, 0.5, 1, 0.5, 0]; % ВТОРАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ
y12 = ifft(fft(x1).*fft(x2));% КРУГОВАЯ СВЕРТКА ПОСЛЕДОВАТЕЛЬНОСТЕЙ
L12 = length(y12); % ПЕРИОД КРУГОВОЙ СВЕРТКИ
disp('Для вывода графиков ПОСЛЕДОВАТЕЛЬНОСТЕЙ и КРУГОВОЙ свертки (3 периода) нажмите ENTER: ')
pause
figure('Name','Sequences x1, x2, y12','NumberTitle', 'off')
subplot(3,1,1), stem((0:3*L12-1),...
repmat(x1,1,3),'fill','Linewidth',2,'MarkerSize',3), grid
xlabel('n'), title('Periodic Sequence x1(n)')
subplot(3,1,2), stem((0:3*L12-1), repmat(x2,1,3),'fill', 'Linewidth',2,'MarkerSize',3), grid
xlabel('n'), title('Periodic Sequence x2(n)')
subplot(3,1,3), stem((0:3*L12-1), repmat(y12,1,3),'fill', 'Linewidth',2,'MarkerSize',3), grid, xlabel('n')
title('Periodic Sequence y12(n) — Convolution with FFT and IFFT')
disp('% Для вывода четвертого пункта задания нажми enter')
pause
%% 4. Вычисление реакции ЛДС по формуле свертки с помощью ДПФ. %%
disp('% ВЫЧИСЛЕНИЕ РЕАКЦИИ ЛДС ПО ФОРМУЛЕ СВЕРТКИ')
disp('%')
disp('%')
h = impz(b,a,N1)'; % ИМПУЛЬСНАЯ ХАРАКТЕРИСТИКА
C=1;
OM=pi/8;
FF=0;
om=pi/2;
m=0.5;
ff=0;
x7 = C.*(1+m.*cos(OM.*n+FF)).*cos(om.*n+ff); % ВОЗДЕЙСТВИЕ
y7_1 = conv(x7,h); % РЕАКЦИЯ, ВЫЧИСЛЕННАЯ С ПОМОЩЬЮ ФУНКЦИИ conv
y7_2 = fftfilt(h,x7); % РЕАКЦИЯ, ВЫЧИСЛЕННАЯ С ПОМОЩЬЮ ФУНКЦИИ fftfilt
L=N1+N2-1; % ДЛИНА СВЕРТКИ, ВЫЧИСЛЕННОЙ С ПОМОЩЬЮ ФУНКЦИИ conv
disp('%')
disp('%')
disp('% Для вывода графиков ИХ, ВОЗДЕЙСТВИЯ и РЕАКЦИИ нажмите <ENTER>')
pause
figure('Name','Impulse Response, Input and Output Signals','NumberTitle', 'off')
subplot(4,1,1)
stem(0:length(h)-1,h,'Linewidth',2,'MarkerSize',3), grid,
xlabel('n'), title('Impulse Response h(n)'), xlim([0 L-1])
subplot(4,1,2)
stem(0:length(x7)-1,x7,'Linewidth',2,'MarkerSize',3), grid
xlabel('n'), title('Input Signal x7(n)'), xlim([0 L-1])
subplot(4,1,3)
stem(0:length(y7_1)-1,y7_1,'Linewidth',2,'MarkerSize',3),
grid
xlabel('n'), title('Output Signal y7(n) — Convolution'), xlim([0 L-1])
subplot(4,1,4)
stem(0:length(y7_2)-1,y7_2,'Linewidth',2,'MarkerSize',3), grid
xlabel('n'), title('Output Signal y7(n) — Convolution with FFT and IFFT'),
xlim([0 L-1])
disp('%')
disp('%')
disp('% Для вывода пятого пункта задания нажми enter ')
pause
disp('%')
disp('%')
%% 5. Вычисление реакции ЛДС методом перекрытия с накоплением.%%
disp('%ВЫЧИСЛЕНИЕ РЕАКЦИИ ЛДС МЕТОДОМ ПЕРЕКРЫТИЯ С НАКОПЛЕНИЕМ')
disp('%')
disp('%')
n = 0:(4*N-1)
x8 = C.*(1+m.*cos(OM.*n+FF)).*cos(om.*n+ff); % ВОЗДЕЙСТВИЕ
y8_1 = fftfilt(h,x8); % РЕАКЦИЯ, ВЫЧИСЛЕННАЯ С ПОМОЩЬЮ ФУНКЦИИ fftfilt
y8_2 = fftfilt(h,x8,N1); % РЕАКЦИЯ, ВЫЧИСЛЕННАЯ С ПОМОЩЬЮ ФУНКЦИИ fftfilt МЕТОДОМ НАКОПЛЕНИЯ С ПЕРЕКРЫТИЕМ
disp('%')
disp('%')
disp('% Для вывода ГРАФИКОВ ВОЗДЕЙСТВИЯ и РЕАКЦИИ нажмите <ENTER>')
pause
figure('Name','Impulse Response, Input and Output Signals — Overlap-add method','NumberTitle', 'off')
subplot(4,1,1)
stem(0:length(h)-1,h,'MarkerSize',3), grid
xlabel('n'), title('Impulse Response h(n)'), xlim([0 N3-1])
subplot(4,1,2), stem(0:length(x8)-1,x8,'MarkerSize',3), grid
xlabel('n'), title('Input Signal x8(n)')
subplot(4,1,3),stem(0:length(y8_1)-1,y8_1,'MarkerSize',3), grid
xlabel('n')
title('Output Signal y8(n) — Convolution with FFT and IFFT')
subplot(4,1,4), stem(0:length(y8_2)-1,y8_2,'MarkerSize',3), grid
xlabel('n')
title('Output Signal y8(n) — Convolution with Overlap-add method')
disp('%')
disp('%')
disp('% РАБОТА ЗАВЕРШЕНА')
clear
close all
%%%%%% Исходные данные %%%%%%
Nbr =input("Вставьте номер бригады: "); %% Номер бригады
N = 64 %% Период (длина) последовательности
Fs = 2000*(mod(Nbr,5)+1) %% Частота дискретизации
A1 = 1+0.01*Nbr %% Амплитуды дискретных гармоник
A2 = 2*A1 %% Амплитуды дискретных гармоник
f1 = Fs/4 %% Частоты дискретных гармоник
f2 = 1.5*f1 %% Частоты дискретных гармоник
M = 71 %% Период последовательности
f11 =1.1*f1 %% Частоты дискретных гармоник
f21 =1.07*f2 %% Частоты дискретных гармоник
f12 =1.05*f1 %% Частоты дискретных гармоник
df = Fs/N %% Частоты дискретных гармоник
f22 = f12+df
x3 = Nbr*[0.1, 0.2, 0.3, 0.4, 0.5] %% Периодическая последовательность
x4 = Nbr*[0.5, 0.4, 0.3, 0.2, 0.1] %% Периодическая последовательность
x5 = Nbr*[0.1, 0.2, 0.3] %% Периодическая последовательность
x6 = Nbr*[0.3, 0.2, 0.1, 0.2, 0.3] %% Периодическая последовательность
b0 = 0.5+0.02*Nbr %% Коэффициенты числителя передаточной функции
b1 = b0*(-1)^(Nbr+1)*(0.982+0.0178)*Nbr %% Коэффициенты числителя передаточной функции
b2 = b0*(0.8+0.2*(mod(Nbr,5))) %% Коэффициенты числителя передаточной функции
b = [b0, b1, b2]
a0 = 1 %% Коэффициенты знаменателя передаточной функции
a1 = (-1)^(Nbr)*(0.778+0.025)*Nbr %% Коэффициенты знаменателя передаточной функции
a2 = 0.64+0.006*Nbr %% Коэффициенты знаменателя передаточной функции
a = [a0, a1, a2]
N1 = mod(Nbr,10)+20 %% Длина ИХ
N2 = mod(Nbr,10)+30 %% Длина воздействия
N3 = mod(Nbr,10)+200 %% Длина воздействия
%% 1. Исследование эффекта растекания спектра %%
N= N+input("введите значение для изменения периода(длинны) (оставьте 0 если изменение не требуется): ");
T= 1/Fs;
f = 1/T + input("введите значение для изменения частоты (оставьте 0 если изменение не требуется): ");
n = 0:(N-1); % ДИСКРЕТНОЕ НОРМИРОВАННОЕ ВРЕМЯ
x = A1*cos(2*pi*f*n*T);
w1 = 2*pi*f1/Fs; w2 = 2*pi*f2/Fs; % НОРМИРОВАННЫЕ ЧАСТОТЫ ДИСКРЕТНЫХ ГАРМОНИК (РАД)
k = 0:(N-1); % ДИСКРЕТНАЯ НОРМИРОВАННАЯ ЧАСТОТА
X = fft(x); % ДПФ ПЕРИОДИЧЕСКОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MOD = (2/N)*abs(X); % АМПЛИТУДНЫЙ СПЕКТР ПЕРИОДИЧЕСКОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MOD(1) = (1/N)*abs(X(1));
%% график последовательности
figure('Name','Periodic Sequence','NumberTitle','off')
stem(n,x, 'MarkerSize',3,'Linewidth',2)
grid, xlabel('n')
ylabel('x(n)'), title(strcat(['Periodic Sequence x(n) N = ',num2str(N)]))
%% график амплитудного спектра
figure('Name','Amplitude Spectrum','NumberTitle', 'off')
stem(k,MOD,'MarkerSize',3,'Linewidth',2), grid
xlabel('k'), ylabel('1/N|X(k)|')
title(strcat(['Amplitude Spectrum of the Periodic Sequence N = ',num2str(N)]))
%% НЕОБХОДИМ ПОРОГ, БЕЗ НЕГО ПРИМЕНЕНИЕ ОКНА МОЖЕТ ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ СОСТАВЛЯЮЩИЕ
P=N*f/Fs
PP= floor(P);
%% НЕОБХОДИМ ПОРОГ, БЕЗ НЕГО ПРИМЕНЕНИЕ ОКНА МОЖЕТ ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ СОСТАВЛЯЮЩИЕ
%% УСЛОВИЕ РАБОТАЕТ ПУТЕМ ВЫЧИТАНИЯ ИЗ ИСХОДНОГО P ОКРУГЛЕННОГО P (PP). ЕСЛИ P НЕ ЦЕЛОЕ, ЕСТЬ РАСТЕКАНИЕ
if P-PP == 0
disp('Растекания нет');
else
disp('Растекание есть');
M=N;
n1 = 0:(M-1); % ДИСКРЕТНОЕ НОРМИРОВАННОЕ ВРЕМЯ (ПЕРИОД M)
k1 = 0:(M-1); % ДИСКРЕТНАЯ НОРМИРОВАННАЯ ЧАСТОТА (ПЕРИОД M)
x_M = A1*cos(w1*n1); % ПОСЛЕДОВАТЕЛЬНОСТЬ (ПЕРИОД M)
X_M = fft(x_M); % ДПФ ПОСЛЕДОВАТЕЛЬНОСТИ (ПЕРИОД M)
MOD_M = (2/M)*abs(X_M); % АМПЛИТУДНЫЙ СПЕКТР ПОСЛЕДОВАТЕЛЬНОСТИ (ПЕРИОД M)
MOD_M(1) = (1/M)*abs(X_M(1));
P_N = N*f1/Fs; % ЧИСЛО ПЕРИОДОВ ДИСКРЕТНОЙ ГАРМОНИКИ С ЧАСТОТОЙ f1 НА ПЕРИОДЕ ПОСЛЕДОВАТЕЛЬНОСТИ N
P_M = M*f1/Fs; % ЧИСЛО ПЕРИОДОВ ДИСКРЕТНОЙ ГАРМОНИКИ С ЧАСТОТОЙ f1 НА ПЕРИОДЕ ПОСЛЕДОВАТЕЛЬНОСТИ M
%%WIN(:,1) = hann(N);
%%WIN(:,2) = blackman(N);
%%WIN(:,3) = nuttallwin(N),
%%WIN(:,4) = flattopwin(N);
%% Окно хэннинга
win_hann = hann(M)'; % ОКНО хэннинга — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_hann = x_M.*win_hann; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_hann = fft(xw_hann); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_hann =(2/M)*abs(XW_hann); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_hann(1) =(1/M)*abs(XW_hann(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions Хэннинг','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_hann,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
%% Окно блэкмена
win_black = blackman(M)'; % ОКНО блэкмена — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_black = x_M.*win_black; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_black = fft(xw_black); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_black =(2/M)*abs(XW_black); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_black(1) =(1/M)*abs(XW_black(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions черный мужик','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_black,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
%% Окно нуттелла вкусняшка
win_nutt = nuttallwin(M)'; % ОКНО нуттелла — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_nutt = x_M.*win_nutt; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_nutt = fft(xw_nutt); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_nutt =(2/M)*abs(XW_nutt); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_nutt(1) =(1/M)*abs(XW_nutt(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions этим можно брать и обмазываться (нуттелла)','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_nutt,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
%% Окно флэттоп
win_flat = flattopwin(M)'; % ОКНО флэттоп — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_flat = x_M.*win_flat; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_flat = fft(xw_flat); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_flat =(2/M)*abs(XW_flat); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_flat(1) =(1/M)*abs(XW_flat(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions флэттоп','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_flat,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
end
disp('% Для вывода второго пункта задания нажми enter')
pause
%% 2. Улучшение различения дискретных гармоник с близко расположенными частотами
N_2=2*N;
T = 1/Fs;
f1 = 0.275*Fs;
f2 = 0.2875*Fs;
n = 0:(N_2-1); % ДИСКРЕТНОЕ НОРМИРОВАННОЕ ВРЕМЯ
x = A1*cos(2*pi*f1*n*T)+A2*cos(2*pi*f2*n*T);
w1 = 2*pi*f1/Fs; w2 = 2*pi*f2/Fs; % НОРМИРОВАННЫЕ ЧАСТОТЫ ДИСКРЕТНЫХ ГАРМОНИК (РАД)
k = 0:(N_2-1); % ДИСКРЕТНАЯ НОРМИРОВАННАЯ ЧАСТОТА
X = fft(x); % ДПФ ПЕРИОДИЧЕСКОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MOD = (2/N_2)*abs(X); % АМПЛИТУДНЫЙ СПЕКТР ПЕРИОДИЧЕСКОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MOD(1) = (1/N_2)*abs(X(1));
%% график последовательности
figure('Name','Periodic Sequence','NumberTitle','off')
stem(n,x, 'MarkerSize',3,'Linewidth',2)
grid, xlabel('n')
ylabel('x(n)'), title(strcat(['Periodic Sequence x(n) N = ',num2str(N2)]))
%% график амплитудного спектра
figure('Name','Amplitude Spectrum','NumberTitle', 'off')
stem(k,MOD,'MarkerSize',3,'Linewidth',2), grid
xlabel('k'), ylabel('1/N|X(k)|')
title(strcat(['Amplitude Spectrum of the Periodic Sequence N = ',num2str(N2)]))
%% НЕОБХОДИМ ПОРОГ, БЕЗ НЕГО ПРИМЕНЕНИЕ ОКНА МОЖЕТ ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ СОСТАВЛЯЮЩИЕ
P=N_2*f1/Fs
P2=N_2*f2/Fs
PP= floor(P);
%% НЕОБХОДИМ ПОРОГ, БЕЗ НЕГО ПРИМЕНЕНИЕ ОКНА МОЖЕТ ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ СОСТАВЛЯЮЩИЕ
%% УСЛОВИЕ РАБОТАЕТ ПУТЕМ ВЫЧИТАНИЯ ИЗ ИСХОДНОГО P ОКРУГЛЕННОГО P (PP). ЕСЛИ P НЕ ЦЕЛОЕ, ЕСТЬ РАСТЕКАНИЕ
if P-PP == 0
disp('Растекания нет');
else
disp('Растекание есть');
M=N_2;
n1 = 0:(M-1); % ДИСКРЕТНОЕ НОРМИРОВАННОЕ ВРЕМЯ (ПЕРИОД M)
k1 = 0:(M-1); % ДИСКРЕТНАЯ НОРМИРОВАННАЯ ЧАСТОТА (ПЕРИОД M)
x_M = A1*cos(w1*n1)+A2*cos(w2*n1); % ПОСЛЕДОВАТЕЛЬНОСТЬ (ПЕРИОД M)
X_M = fft(x_M); % ДПФ ПОСЛЕДОВАТЕЛЬНОСТИ (ПЕРИОД M)
MOD_M = (2/M)*abs(X_M); % АМПЛИТУДНЫЙ СПЕКТР ПОСЛЕДОВАТЕЛЬНОСТИ (ПЕРИОД M)
MOD_M(1) = (1/M)*abs(X_M(1));
P_N = N_2*f1/Fs; % ЧИСЛО ПЕРИОДОВ ДИСКРЕТНОЙ ГАРМОНИКИ С ЧАСТОТОЙ f1 НА ПЕРИОДЕ ПОСЛЕДОВАТЕЛЬНОСТИ N
P_M = M*f1/Fs; % ЧИСЛО ПЕРИОДОВ ДИСКРЕТНОЙ ГАРМОНИКИ С ЧАСТОТОЙ f1 НА ПЕРИОДЕ ПОСЛЕДОВАТЕЛЬНОСТИ M
%%WIN(:,1) = hann(N);
%%WIN(:,2) = blackman(N);
%%WIN(:,3) = nuttallwin(N),
%%WIN(:,4) = flattopwin(N);
%% Окно хэннинга
win_hann = hann(M)'; % ОКНО хэннинга — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_hann = x_M.*win_hann; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_hann = fft(xw_hann); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_hann =(2/M)*abs(XW_hann); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_hann(1) =(1/M)*abs(XW_hann(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions Хэннинг','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_hann,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
%% Окно блэкмена
win_black = blackman(M)'; % ОКНО блэкмена — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_black = x_M.*win_black; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_black = fft(xw_black); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_black =(2/M)*abs(XW_black); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_black(1) =(1/M)*abs(XW_black(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions черный мужик','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_black,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
%% Окно нуттелла вкусняшка
win_nutt = nuttallwin(M)'; % ОКНО нуттелла — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_nutt = x_M.*win_nutt; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_nutt = fft(xw_nutt); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_nutt =(2/M)*abs(XW_nutt); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_nutt(1) =(1/M)*abs(XW_nutt(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions этим можно брать и обмазываться (нуттелла)','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_nutt,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
%% Окно флэттоп
win_flat = flattopwin(M)'; % ОКНО флэттоп — ВЕКТОР-СТОЛБЕЦ ДЛИНЫ M
xw_flat = x_M.*win_flat; % ПОСЛЕДОВАТЕЛЬНОСТЬ, ВЗВЕШЕННАЯ ОКНОМ
XW_flat = fft(xw_flat); % ДПФ ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_flat =(2/M)*abs(XW_flat); % АМПЛИТУДНЫЙ СПЕКТР ВЗВЕШЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
MODW_flat(1) =(1/M)*abs(XW_flat(1));
figure('Name','Reducing Spectrum Leakage with the help of Window Functions флэттоп','NumberTitle', 'off')
subplot(2,1,1), stem(k1,MOD_M,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum without windowing M = ',num2str(M)]))
subplot(2,1,2), stem(k1,MODW_flat,'MarkerSize',3), grid, xlabel('k')
title(strcat(['Amplitude spectrum with Window M = ',num2str(M)]))
end
disp('% Для вывода третьего пункта задания нажми enter')
pause
%% 3. Вычисление круговой свёртки %%
x1 = [0, 0.25, 0.5, 0.75 ,1]; % ПЕРВАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ
x2 = [0, 0.5, 1, 0.5, 0]; % ВТОРАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ
y12 = ifft(fft(x1).*fft(x2));% КРУГОВАЯ СВЕРТКА ПОСЛЕДОВАТЕЛЬНОСТЕЙ
L12 = length(y12); % ПЕРИОД КРУГОВОЙ СВЕРТКИ
disp('Для вывода графиков ПОСЛЕДОВАТЕЛЬНОСТЕЙ и КРУГОВОЙ свертки (3 периода) нажмите ENTER: ')
pause
figure('Name','Sequences x1, x2, y12','NumberTitle', 'off')
subplot(3,1,1), stem((0:3*L12-1),...
repmat(x1,1,3),'fill','Linewidth',2,'MarkerSize',3), grid
xlabel('n'), title('Periodic Sequence x1(n)')
subplot(3,1,2), stem((0:3*L12-1), repmat(x2,1,3),'fill', 'Linewidth',2,'MarkerSize',3), grid
xlabel('n'), title('Periodic Sequence x2(n)')
subplot(3,1,3), stem((0:3*L12-1), repmat(y12,1,3),'fill', 'Linewidth',2,'MarkerSize',3), grid, xlabel('n')
title('Periodic Sequence y12(n) — Convolution with FFT and IFFT')
disp('% Для вывода четвертого пункта задания нажми enter')
pause
%% 4. Вычисление реакции ЛДС по формуле свертки с помощью ДПФ. %%
disp('% ВЫЧИСЛЕНИЕ РЕАКЦИИ ЛДС ПО ФОРМУЛЕ СВЕРТКИ')
disp('%')
disp('%')
h = impz(b,a,N1)'; % ИМПУЛЬСНАЯ ХАРАКТЕРИСТИКА
C=1;
OM=pi/8;
FF=0;
om=pi/2;
m=0.5;
ff=0;
x7 = C.*(1+m.*cos(OM.*n+FF)).*cos(om.*n+ff); % ВОЗДЕЙСТВИЕ
y7_1 = conv(x7,h); % РЕАКЦИЯ, ВЫЧИСЛЕННАЯ С ПОМОЩЬЮ ФУНКЦИИ conv
y7_2 = fftfilt(h,x7); % РЕАКЦИЯ, ВЫЧИСЛЕННАЯ С ПОМОЩЬЮ ФУНКЦИИ fftfilt
L=N1+N2-1; % ДЛИНА СВЕРТКИ, ВЫЧИСЛЕННОЙ С ПОМОЩЬЮ ФУНКЦИИ conv
disp('%')
disp('%')
disp('% Для вывода графиков ИХ, ВОЗДЕЙСТВИЯ и РЕАКЦИИ нажмите <ENTER>')
pause
figure('Name','Impulse Response, Input and Output Signals','NumberTitle', 'off')
subplot(4,1,1)
stem(0:length(h)-1,h,'Linewidth',2,'MarkerSize',3), grid,
xlabel('n'), title('Impulse Response h(n)'), xlim([0 L-1])
subplot(4,1,2)
stem(0:length(x7)-1,x7,'Linewidth',2,'MarkerSize',3), grid
xlabel('n'), title('Input Signal x7(n)'), xlim([0 L-1])
subplot(4,1,3)
stem(0:length(y7_1)-1,y7_1,'Linewidth',2,'MarkerSize',3),
grid
xlabel('n'), title('Output Signal y7(n) — Convolution'), xlim([0 L-1])
subplot(4,1,4)
stem(0:length(y7_2)-1,y7_2,'Linewidth',2,'MarkerSize',3), grid
xlabel('n'), title('Output Signal y7(n) — Convolution with FFT and IFFT'),
xlim([0 L-1])
disp('%')
disp('%')
disp('% Для вывода пятого пункта задания нажми enter ')
pause
disp('%')
disp('%')
%% 5. Вычисление реакции ЛДС методом перекрытия с накоплением.%%
disp('%ВЫЧИСЛЕНИЕ РЕАКЦИИ ЛДС МЕТОДОМ ПЕРЕКРЫТИЯ С НАКОПЛЕНИЕМ')
disp('%')
disp('%')
n = 0:(4*N-1)
x8 = C.*(1+m.*cos(OM.*n+FF)).*cos(om.*n+ff); % ВОЗДЕЙСТВИЕ
y8_1 = fftfilt(h,x8); % РЕАКЦИЯ, ВЫЧИСЛЕННАЯ С ПОМОЩЬЮ ФУНКЦИИ fftfilt
y8_2 = fftfilt(h,x8,N1); % РЕАКЦИЯ, ВЫЧИСЛЕННАЯ С ПОМОЩЬЮ ФУНКЦИИ fftfilt МЕТОДОМ НАКОПЛЕНИЯ С ПЕРЕКРЫТИЕМ
disp('%')
disp('%')
disp('% Для вывода ГРАФИКОВ ВОЗДЕЙСТВИЯ и РЕАКЦИИ нажмите <ENTER>')
pause
figure('Name','Impulse Response, Input and Output Signals — Overlap-add method','NumberTitle', 'off')
subplot(4,1,1)
stem(0:length(h)-1,h,'MarkerSize',3), grid
xlabel('n'), title('Impulse Response h(n)'), xlim([0 N3-1])
subplot(4,1,2), stem(0:length(x8)-1,x8,'MarkerSize',3), grid
xlabel('n'), title('Input Signal x8(n)')
subplot(4,1,3),stem(0:length(y8_1)-1,y8_1,'MarkerSize',3), grid
xlabel('n')
title('Output Signal y8(n) — Convolution with FFT and IFFT')
subplot(4,1,4), stem(0:length(y8_2)-1,y8_2,'MarkerSize',3), grid
xlabel('n')
title('Output Signal y8(n) — Convolution with Overlap-add method')
disp('%')
disp('%')
disp('% РАБОТА ЗАВЕРШЕНА')
Соседние файлы в папке dz