New paste Repaste Download
%% ======================================================================
%   实验内容 1:方波信号的分解与合成(合集脚本)
%   包括:
%   (1) 方波谐波分解(实验 1.1)
%   (2) 方波谐波合成对比(实验 1.2)
% ======================================================================
clc; clear; close all;
%% ----------------------------------------------------------------------
%   实验内容 1.1:方波信号的傅里叶级数分解
% ----------------------------------------------------------------------
A = 3;                % 幅值
f = 50;               % 基频 50Hz
w0 = 2*pi*f;          % 角频率
T = 1/f;
t = 0 : 0.0001 : 2*T; % 时间:两个周期
harmonics_idx = [1,3,5,7,9];
N_terms = length(harmonics_idx);
harmonics_data = zeros(N_terms, length(t));
coeff_base = 4*A/pi;
% 计算谐波分量
for i = 1:N_terms
    k = harmonics_idx(i);
    harmonics_data(i,:) = (coeff_base / k) * sin(k*w0*t);
end
% ------------------------ 图 1:各谐波分量(分图显示) ------------------
figure('Name','方波分解 - 单独谐波','Color','w');
for i = 1:N_terms
    subplot(N_terms,1,i);
    plot(t, harmonics_data(i,:), 'LineWidth',1.5);
    grid on;
    ylabel(['k=',num2str(harmonics_idx(i))]);
    if i==1
        title('方波的前 5 项谐波分量(50Hz,幅值 3)');
    end
end
xlabel('时间 t (s)');
% ------------------------ 图 2:谐波的三维 mesh 图 ----------------------
figure('Name','方波分解 - 3D Mesh','Color','w');
[X, Y] = meshgrid(t, harmonics_idx);
mesh(X, Y, harmonics_data);
view(3);
title('方波各次谐波的三维波形');
xlabel('时间 t (s)');
ylabel('谐波序号 k');
zlabel('幅值');
colormap jet;
% ------------------------ 图 3:谐波叠加 2D ------------------------------
figure('Name','方波分解 - 2D叠加','Color','w');
hold on;
colors = ['r','g','b','m','k'];
for i=1:N_terms
    plot(t, harmonics_data(i,:), 'Color',colors(i),'LineWidth',1.3);
end
title('前五谐波在同一坐标系叠加');
xlabel('时间 t (s)');
ylabel('幅值');
legend("k=1","k=3","k=5","k=7","k=9");
grid on;
%% ----------------------------------------------------------------------
%   实验内容 1.2:方波信号的傅里叶级数合成
% ----------------------------------------------------------------------
% =========================== 执行两种情况 ===============================
% x1(t): |t|<1 → 1 , |t|>1 → 0
% tau = 2, T = 4
synth_square_wave(4, 2, [5,20,100], 'x1(t): T=4, 宽度 2');
% x2(t): |t|<0.5 → 1 , |t|>0.5 → 0
% tau = 1, T = 2
synth_square_wave(2, 1, [5,20,100], 'x2(t): T=2, 宽度 1');
% =================== 定义一个用于合成的函数 ============================
function synth_square_wave(T, tau, N_values, fig_title)
    t_limit = 1.5 * T;
    t = -t_limit : 0.001 : t_limit;
    w0 = 2*pi/T;
    % 构造理想方波
    original = zeros(size(t));
    for i = 1:length(t)
        t_mod = mod(t(i) + T/2, T) - T/2;
        if abs(t_mod) < tau/2
            original(i) = 1;
        end
    end
    figure('Name', fig_title, 'Color', 'w');
    for k = 1:length(N_values)
        N = N_values(k);
        f_synth = zeros(size(t));
        % 直流项
        a0 = tau/T;
        f_synth = f_synth + a0;
        % 余弦系数 an
        for n = 1:N
            an = 2*(tau/T)*sinc(n*tau/T);
            f_synth = f_synth + an*cos(n*w0*t);
        end
        subplot(length(N_values),1,k);
        plot(t, original,'k--','LineWidth',1); hold on;
        plot(t, f_synth,'r','LineWidth',1.5);
        title(['谐波项数 N = ',num2str(N)]);
        legend('理想方波','合成波形');
        ylim([-0.2,1.2]);
        grid on;
    end
end
Filename: None. Size: 3kb. View raw, , hex, or download this file.

This paste expires on 2025-12-18 02:34:49.551823+00:00. Pasted through web.