МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра ТОР
отчет
по лабораторной работе №3
по дисциплине «Цифровая обработка сигналов»
Тема: ДИСКРЕТНОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ
Студенты гр. |
|
|
|
|
|
Преподаватель |
|
Апалина П.В. |
Санкт-Петербург
202X
Цели работы
• Расчет дискретного преобразования Фурье (ДПФ) средствами MATLAB.
• Оценка с помощью прямого и обратного ДПФ полосы частот, в которой сосредоточена основная доля энергии сигнала.
• Наблюдение изменений результатов вычисления ДПФ, происходящих при дополнении сигнала нулевыми отсчетами.
• Оценка степени ускорения вычислений за счет алгоритмов быстрого преобразования Фурье (БПФ).
Индивидуальное задание
В лабораторной работе исследуется кусочно-линейный сигнал s(t), заданный параметрами Uk, Tk, k = 1…4 (рис. 1).
Рис. 1. Кусочно-линейный сигнал, исследуемый в работе
Параметры сигнала и используемая частота согласно варианту бригады №2 представлены в табл. 1.
Табл. 1. Параметры сигнала
U1, В |
U2, В |
U3, В |
U4, В |
T1, мс |
T2, мс |
Fд, кГц |
4 |
4 |
8 |
0 |
6 |
10 |
3 |
Обработка данных
Код программы с подробными комментариями и полученные графики (рис. 2-7) приведем ниже.
%% Дискретное преобразование Фурье
close all;
U1 = 4; % сигнал из работы 1
U2 = 4;
U3 = 8;
U4 = 0;
T1 = 0.006;
T2 = 0.01;
Fd = 3000;
T = 1/Fd;
t1 = 0:T:T1;
t2 = T1:T:T2;
a1 = 0;
b1 = 4;
u1 = a1*t1 + b1
a2 = -U3/(T2-T1);
b2 = -a2*T2;
u2 = a2*t2 + b2;
u = [u1(1:end-1) u2];
t = [t1(1:end-1) t2];
ots = [0:30]; %вектор номеров отсчетов
% Построим график дискретного сигнала
figure(1);
stem(t, u, 'Linewidth', 1.5);
ax = gca;
ax.FontSize = 12;
Xlabel('t, с');
ylabel('U, В');
Рис. 2. График дискретного сигнала
Рис. 3. АЧХ и ФЧХ ДПФ по номерам отсчетов
%% Вычисление ДПФ и построение графика спектра дискретного сигнала
%Вычислим ДПФ для дискретного сигнала из индивидуального
%задания. Используя функцию stem, построим графики модуля и
%фазы спектральных отсчетов в одном графическом окне друг под другом (с
%помощью функции subplot).
y = fft(u);
%Здесь u — вектор отсчетов сигнала; y — вектор результатов вычисления ДПФ.
figure(2); %построим АЧХ и ФЧХ от номеров отсчетов
subplot(2,1,1);
stem(ots, abs(y), 'Linewidth', 1.5);
xlabel('k');
ylabel('А(k)');
ax = gca;
ax.FontSize = 12;
subplot(2,1,2);
stem(ots, angle(y), 'Linewidth', 1.5);
xlabel('k');
ylabel('Ф(k)');
ax = gca;
ax.FontSize = 12;
%% Оценка ширины спектра сигнала
%Используя обратное ДПФ, определим минимальное число низкочастотных
%гармонических составляющих сигнала, содержащих не менее 90% его энергии.
% Рассчитаем энергию исходного сигнала
E0 = 0;
for k = 1:length(u)
E0 = E0 + abs(u(k))^2;
end
%Создадим копию вектора результатов ДПФ под новым именем.
y2 = y;
%Обнулим в созданной копии результатов ДПФ те элементы, которые
%соответствуют гармоникам с номерами, превышающими некоторое пороговое
%значение Nmax.
Nmax = 1; % оставим столько гармоник слева и справа
for k = 1:length(y2) %обнулим гармоники слева и справа, слева должно быть
%на одну больше, т. к. нулевую гармонику не обнуляем никогда
if (Nmax + 1) < k && k < (length(y2) - Nmax + 1)
y2(k) = 0;
end
end
figure(3); %построим АЧХ и ФЧХ, чтобы увидеть обнуление гармоник на отсчетах
subplot(2,1,1);
stem(ots, abs(y2), 'Linewidth', 1.5);
xlabel('k');
ylabel('А(k)');
ax = gca;
ax.FontSize = 12;
subplot(2,1,2);
stem(ots, angle(y2), 'Linewidth', 1.5);
xlabel('k');
ylabel('Ф(k)');
ax = gca;
ax.FontSize = 12;
%% Вычисление обратного дпф и построение графика сигнала функцией stem
%Вычисление обратного ДПФ производится с помощью функции ifft:
u_obr = ifft(y2);
figure(4); %Построим график сигнала, полученного обратным ДПФ
stem(t, u_obr, 'Linewidth', 1.5);
ax = gca;
ax.FontSize = 12;
xlabel('T, с');
ylabel('U, В');
%% Вычисление энергии получившегося сигнала
% Она меньше, чем 90 % энергии исходного сигнала E0?
E1 = 0;
for k = 1:length(y2)
E1 = E1 + abs(y2(k))^2;
end
res = E1/E0;
% Опытным путем получили, что сохраняется более 90% энергии сигнала при
% Nmax от 1 (res = 0.9075 при Nmax = 1)
%Построим график полученного сигнала вместе с исходным в общих координатных осях.
figure(5);
plot(t, u_obr, 'Linewidth', 1.5);
hold on;
stem(t, u, 'Linewidth', 1.5);
ax = gca;
ax.FontSize = 12;
xlabel('T, с');
ylabel('U, В');
Рис. 4. АЧХ и ФЧХ ДПФ после обнуления N = 1 гармоник
Рис. 5. Восстановленный обратным преобразованием Фурье сигнал, переносящий не менее 90% энергии
Рис. 6. График восстановленного сигнала вместе с исходным в общих координатных осях
