ЛР 2 вариант 4 (ЦОС) отчёт - Дискретное преобразование Фурье. Амплитудный и фазовый спектры сигналов
.docxОТЧЁТ К ЛАБОРАТОРНОЙ РАБОТЕ №2
по дисциплине «Цифровая обработка сигналов»
Дискретное преобразование Фурье. Амплитудный и фазовый спектры сигналов
2020
Выполнение работы: (номер по списку - 4)
Дано:
fs = 64 Гц – частота дискретизации;
Ти = 1 с – длительность сигналов;
f1 = 4 Гц - частота первого сигнала
f2 – (4 + 4) = 8Гц - частота второго сигнала
φ01 = 3π/4 – начальная фаза первого сигнала;
φ02 = 2π/4 – начальная фаза второго сигнала;
u1 = 1 – амплитуда первого сигнала;
u2 = 0,8 – амплитуда второго сигнала
Сформировать сумму двух косинусоидальных сигналов с частотами f1 и f2 и начальными фазами φ01 и φ02. Изобразить полученную сумму сигналов на графике. Для построения в MATLAB графиков следует использовать функции figure, plot, subplot. График следует изобразить первым в общем поле с помощью функции subplot с параметрами 5, 1, 1
Функция для рисования графиков (решили сделать отдельную функцию, чтобы потом каждый раз её не расписывать).
function f = my_plot(Name_1, A, B, Name_2, C, D, Name_3, E, Name_4, F, Name_5, G)
name_1 = Name_1
a = A;
b = B;
name_2 = Name_2
c = C;
d = D;
name_3 = Name_3
e = E;
name_4 = Name_4
f = F;
name_5 = Name_5
g = G;
figure
subplot(5,1,1); plot(a,b); title (name_1); hold on; grid on;
subplot(5,1,2); plot(c,d); title (name_2); hold on; grid on;
subplot(5,1,3); plot(c,e); title (name_3); hold on; grid on;
subplot(5,1,4); plot(c,f); title (name_4); hold on; grid on;
subplot(5,1,5); plot(c,g); title (name_5); hold on; grid on;
end
Далее сам код, откуда потом вызываем нашу функцию:
fs=64; %частота дискретизации
T_imp=1; %длительность сигналов
f_1=4; %частота первого сигнала - номер по списку
f_2=8; %частота второго сигнала номер по списку, плюс остаток от деления на 9 номера по списку
phi_01=3*pi/4; % начальная фаза первого сигнала
phi_02=2*pi/4; %начальная фаза второго сигнала
u_1=1; % амплитуда первого сигнала
u_2=0.8; % амплитуда второго сигнала
T=1/fs;
n=0:fs-1; % массив значений по частоте (координата х)
S1=u_1*cos(2*pi*f_1*n*T+phi_01); %первый сигнал
S2=u_2*cos(2*pi*f_2*n*T+phi_02); % второй сигнал
S_sum=S1+S2; % суммарный сигнал
n_S_sum = 0:T:1-T; % промежуток для суммарного сигнала
my_plot ('Суммарный график', n_S_sum,S_sum, 'Амплитудный спектр для суммарного сигнала', n,DPF_abs, 'Действительный спектр для суммарного сигнала', Re, 'Мнимый спектр для суммарного сигнала', Im, 'Фазовый спектр для суммарного сигнала', phase_spec)
Рисунок 1. Суммарный график
Для суммы сигналов из п.1 вычислить дискретное преобразование Фурье и построить амплитудный, фазовый, действительный и мнимый спектры. Изобразить полученные спектры сигналов на графике. Графики следует изобразить на позициях 2, 3, 4, 5 в общем поле с помощью функции subplot с параметрами 5, 1, 2-5. Убедиться, что полученные амплитуды и положения пиков амплитудного спектра соответствуют заданной сумме сигналов, свойствам амплитудного спектра действительного сигнала. Обосновать. Убедиться, что полученные амплитуды и положения пиков фазового спектра соответствуют заданной сумме сигналов, свойствам фазового спектра действительного сигнала. Обосновать.
Добавляем расчёты амплитудного, фазового, мнимого и действительного спектров и рисуем графики.
dpf=fft(S_sum,fs); %вычисление ДПФ
DPF_abs=abs(dpf); %вычисление амплитудного спектра
Re=real(dpf); % вычисление действительной части
Im=imag(dpf); % вычисление мнимой части
phase_spec=atan2(Im+0.00001, Re+0.0001); % вычисление фазового спектра
my_plot ('Суммарный график', n_S_sum,S_sum, 'Амплитудный спектр для суммарного сигнала', n,DPF_abs, 'Действительный спектр для суммарного сигнала', Re, 'Мнимый спектр для суммарного сигнала', Im, 'Фазовый спектр для суммарного сигнала', phase_spec)
Рисунок 2. Все графики в одном окне
Доказательство
f1 = 4;
f2 = 8;
u1 = 1;
u2 = 0.8;
T = 1/fs = 1/64;
N = 64;
phi1 = 3*pi / 4;
phi2 = 2*pi / 4
Расчёт координат х, где будут пики в амплитудном спектре:
x1 = f1 * T * N = (4 * 64) / 64 = 4
x2 = f1 * T * N = (8 * 64) / 64 = 8
По свойству симметричности амплитудного спектра относительно его середины (т.е. N / 2), то остальные пики будут в x3 = 56 и x4 = 60
Расчёт высоты пиков амплитудного спектра:
A1 = u1 * N / 2 = 1 * 64 / 2 = 32 = A4 (по свойству симметричности)
A2 = u2 * N / 2 = 0.8 * 64 / 2 = 25.6 = А3 (по свойству симметричности)
Т.к. пики в фазовом спектре возникают в тех же координатах, что и пики в амплитудном спектре, то повторный расчёт приводить не будем (см. выше).
Расчёт пиков фазового спектра:
phi1 = 3 * pi / 4 = 2.356 = - phi 4 (по свойствам симметричности)
phi2 = 2 * pi / 4 = 1.571 = - phi 3 (по свойствам симметричности)
К сумме сигналов из п.1 добавить шум. (Амплитуда Aшум = 2). Шум сформировать с помощью функции rand(1, N). Изобразить полученную сумму сигналов на графике. График следует изобразить первым в общем поле (отдельном от уже построенного в п.п. 1,2) с помощью функции subplot с параметрами 5, 1, 1.
Добавляем к сумме сигналов рассчитанный шум.
NoiseAmp=2; % амплитуда шума
noise=NoiseAmp-NoiseAmp*2*rand (1,fs); % расчёт шума
Noisy_S_sum = noise+S_sum; % сумма сигналов + шум
my_plot ('Сумма сигналов с шумом', n_S_sum, Noisy_S_sum, 'Амплитудный спектр для суммы сигналов с шумом', n,DPF_2_abs, 'Действительный спектр для суммы сигналов с шумом', Re_2, 'Мнимый спектр для суммы сигналов с шумом', Im_2, 'Фазовый спектр для суммы сигналов с шумом', phase_spec_2)
Рисунок 3. График суммарного сигнала с шумом
Повторить действия п.2 для сигнала с шумом из п.3. Дать обоснование изменению некоторых параметров спектров.
Рассчитываем спектры для суммарного сигнала с шумом.
dpf_2=fft(Noisy_S_sum,fs); %вычисление ДПФ
DPF_2_abs=abs(dpf_2); %вычисление амплитудного спектра
Re_2=real(dpf_2); % вычисление действительной части
Im_2=imag(dpf_2); % вычисление мнимой части
phase_spec_2=atan2(Im_2+0.00001, Re_2+0.0001); % вычисление фазового спектра
my_plot ('Сумма сигналов с шумом', n_S_sum, Noisy_S_sum, 'Амплитудный спектр для суммы сигналов с шумом', n,DPF_2_abs, 'Действительный спектр для суммы сигналов с шумом', Re_2, 'Мнимый спектр для суммы сигналов с шумом', Im_2, 'Фазовый спектр для суммы сигналов с шумом', phase_spec_2)
Рисунок 4. Построенные графики спектров для сигнала с шумом
Сформировать комплексный сигнал cos + i∙sin с частотой f1 и начальной фазой φ0.
Номер по списку - 4:
Nи = 4 + 10 + 1 = 15 – длительность сигнала в отсчётах (Nи должно быть нечётным)
f1 = 1;
phi_0 = pi/4; % остаток от деления номера по списку на 4 * pi/4 = 0 (поэтому взяли 1* pi/4 = pi/4)
N = 128 – длина в отсчётах периода вычисления ДПФ;
T = 1/(3∙ 1 ∙ 4 + 1) = 1/13 – период дискретизации;
Выбрать отсчёты n для построения сигнала таким образом, чтобы он своим центром располагался в точке 0 на графике. Изобразить полученный сигнал на графике, при этом действительная и мнимая части должны быть изображены вместе разными цветами на одном графике. График следует изобразить первым в общем поле с помощью функции subplot с параметрами 3, 1, 1.
number = 4; % номер варианта
N_imp=15; % длительность сигнала в отсчётах
f_1 = 1; % остаток от деления номера по списку на 4
phi_0 = pi/4; % остаток от деления номера по списку на 4 * pi/4 = 0 (поэтому взяли 1* pi/4 = pi/4)
N = 128; % длина в отсчётах периода вычисления ДПФ
T_d = 1/(3*f_1*mod(number,8)); % период дискретизации
n_next = (0+(N_imp-1))/2; % точка справа, где у=0
n_past = (0-(N_imp-1))/2; % точка слева, где у=0
n_array = [n_past:n_next]; % массив для
n_Td_array = n_array.*T_d; % поэлементное умножение
S_3 = cos(2*pi*f_1*n_Td_array+phi_0)+i*sin(2*pi*f_1*n_Td_array+phi_0); % новый сигнал
Arr_1=[S_3(n_next+1:N_imp)];
Arr_2=[zeros(1, N - N_imp)];
Arr_3=[S_3(1:n_next)];
Sg_3=[Arr_1 Arr_2 Arr_3];
Re_3 = real(Sg_3); % вычисление действительной части спектра
Im_3 = imag(Sg_3); % вычисление мнимой части спектра
figure
subplot(3,1,1); plot (Re_3, 'b'); hold on; plot (Im_3, 'r'); grid on; title ('Сигнал Re + Im') % построение графика Im + Re
Рисунок 5. График Re (синий) и Im (красный)
Для сигнала из п.5 вычислить дискретное преобразование Фурье и построить амплитудный и фазовый спектры. Изобразить полученные спектры сигналов на графике. Графики следует изобразить на позициях 2, 3 в общем поле с помощью функции subplot с параметрами 3, 1, 2-3. Убедиться, что полученные спектры соответствуют заданному сигналу, свойствам спектров комплексного сигнала. Обосновать.
dpf_Sg3=fft(Sg_3,N); %вычисление ДПФ
DPF_abs_Sg3=abs(dpf_Sg3); %вычисление амплитудного спектра
Re_Sg3=real(dpf_Sg3); % вычисление действительной части
Im_Sg3=imag(dpf_Sg3); % вычисление мнимой части
phase_spec_Sg3=atan2(Im_Sg3+0.00001, Re_Sg3+0.0001); % вычисление фазового спектра
subplot(3,1,2); plot (DPF_abs_Sg3); hold on; grid on; title ('Амплитудный спектр для Sg 3') % построение графика амплитудного спектра для S_3
subplot(3,1,3); plot (phase_spec_Sg3); hold on; grid on; title ('Фазовый спектр для Sg 3') % построение графика фазового спектра для S_3
Рисунок 6. Амплитудный и фазовый спектры для S_3
Точка максимума для амплитудного спектра:
x = f1 * T * N = 1 * 128 / 3 * 1 * 4 = 128 / 12 = 10.67 + 1 = 11.67
Определение нулей для амплитудного спектра:
N / Nimp = 128 / 15 = 8.53
Между первым нулями около главного пика будет 8.53 * 2 = 17
20 – 3 = 17
Проверка фазового спектра:
в точке амплитудного максимума (по координате х) в фазовом спектре будет значение, равное phi0.
phi0 = pi / 4 = 0,785
Добавить к отсчётам n для сигнала из п.5 сдвиг shift = 4 – сдвиг сигнала относительно центрального расположения. При этом если номер по списку четный, то выбрать положительный сдвиг, если нечетный, то отрицательный. Сформировать сдвинутый сигнал cos + i∙sin c использованием новых отсчётов n. Изобразить полученный сигнал на графике, при этом действительная и мнимая части должны быть изображены вместе разными цветами на одном графике. График следует изобразить первым в общем поле с помощью функции subplot с параметрами 3, 1, 1.
shift = 4; % значение сдвига
n_next_shift = n_next+shift; % сдвиг в положительную сторону, т.к. чётный вариант
n_past_shift = n_past+shift; % сдвиг в положительную сторону, т.к. чётный вариант
n_shift=(n_past_shift:1:n_next_shift); % даипазон со сдвигом
Sg_shift = cos(2*pi*f_1*T_d*n_shift+phi_0)+i*sin(2*pi*f_1*T_d*n_shift+phi_0); % формирование сигнала со сдвигом
Arr_4=[Sg_shift(n_next_shift+1:N_imp)];
Arr_5=[Sg_shift(1:(n_next_shift))];
Sg_shift=[Arr_4 Arr_2 Arr_5]; % построение массива для графика со сдвигом
DPF_Sg_shift =fft(Sg_shift, N); %ДПФ для графика со сдвигом
Re_shift = real(Sg_shift); % действительная часть
Im_shift = imag (Sg_shift); % мнимаяч часть
figure
subplot(3,1,1); plot (Re_shift, 'b'); hold on, grid on, plot (Im_shift, 'r'); title ('График Re + Im со сдвигом'); % построение графика Re + Im со сдвигом
Рисунок 7. График Re (синий) + Im (красный) со сдвигом
Повторить действия п.6 для сигнала из п.7. Дать обоснование изменению некоторых параметров спектров.
Re_fft_shift = real(DPF_Sg_shift);
Im_fft_shift = imag(DPF_Sg_shift);
fft_shift = abs(DPF_Sg_shift);
phase_spec_shift=atan2(Im_fft_shift+0.00001, Re_fft_shift+0.0001); % вычисление фазового спектра для графика со сдвигом
subplot(3,1,2); plot (fft_shift); hold on; grid on; title ('Амплитудный спектр для графика со сдвигом'); % построение амплитудного графика со сдвигом
subplot(3,1,3); plot (phase_spec_shift); hold on; grid on; title ('Фазовый спектр для графика со сдвигом'); % построение фазового графика со сдвигом
Рисунок 8. Графики со сдвигом