function [] = lab_7()

     %очистить экран
    
    %в качестве исходного данного возьмем модуль напряжений 
    %с предыдущих расчетов
    
    U = [
        9.94;
        10.09;
        9.96;
        10.01;
        10.09;
        10.09];
    
    
    f = 50;         %частота основной гармоники
    w = 2 * pi * f; %круговая частота 314 Гц
    T = 1 / f;      %период частоты 50 Гц = 20 мс
    dt = 0.00001;   %шаг дискретизации по оси времени
    
    %задаём значения по оси времени как простой массив значений
    t = 0:dt:T;
    %генерируем функцию в каждой точке оси времени
    %значения предыдущих расчетов теперь используются просто как
    %коэффициенты
    u = U(1)+U(2)*cos(w*t)+U(3)*sin(w*t)+U(4)*cos(2*w*t)+U(5)*sin(3*w*t)+U(6)*cos(4*w*t);

    %постоянная составляющая
    a_0 = (1 / T) * sum(u * dt);
    
    %определяем гармоники с первой по шестую
    for n = 1:6
        %записываем интеграл по методу левых прямоугольников
        %пробегаем все значения функции по оси t и суммируем их
        %сначала определяем коэффициенты A, потом B
        summ = 0;
        for k = 1:length(t)
            summ = summ + u(k)*cos(n*w*t(k)) * dt;
        end
        a(n) = (2/T) * summ;

        summ = 0;
        for k = 1:length(t)
            summ = summ + u(k)*sin(n*w*t(k)) * dt;
        end
        b(n) = (2/T) * summ;
        
    end
    
    %прямое преобразование фурье
    dw = 1;
    W = -6*w:dw:6*w;
    for k = 1:length(W)
        F(k) = 0;
        for j=1:length(t)
            F(k) = F(k) + u(j)*exp(-1i*W(k)*t(j))*dt;
        end    
        F(k) = F(k);
    end
    
    %обратное преобразование фурье
    for k = 1:length(t)
        U1(k) = 0;
        for j = 1:length(W)
            U1(k) = U1(k) + F(j)*exp(1i*t(k)*W(j))*dw;
        end
        U1(k) = U1(k)/(2*pi);
    end
    
    
    
    %восстановление графика по коэффициентам Фурье
    %n - номер гармоники
    summ = 0;
    for n=1:6
        summ = summ + a(n)*cos(n*w*t) + b(n) * sin (n*w*t);
    end
    %добавляем постоянную составляющую
    u1 = a_0 + summ;
    
    %вывести на график. функция subplot делит график на две части
    %три аргумента - кол-во графиков по оси X, по оси Y, номер графика
    subplot(2,2,1)
    plot(t,u,'.-b',t, u1,'-r', 'LineWidth', 1.2)    ;%на первый график выводим синусоиды
    subplot(2,2,3)
    bar([a' b'],'grouped'); % на второй - столбцы
    legend('a','b')
    %график преобразования фурье
    subplot(2,2,2)
    plot(W,abs(F),'.-b')    
    %восстановленный график
    subplot(2,2,4)
    plot(t,U1,'.-r')
end

%Отчёт загрузить в папку Гр.90201/Л.Р. №7 до 18:00 26.11.2021
Соседние файлы в папке лаба 7