[MATLAB]通过50个MATLAB程序理解信号与系统的核心概念

时间:2025-05-05 16:04:19

通过50个MATLAB程序理解信号与系统的核心概念

       摘要:信号与系统是电气工程、通信工程和控制工程等领域的核心课程,涵盖了信号的表示、变换、系统分析及滤波等基本概念。MATLAB 是一个强大的工具,广泛用于信号与系统的教学和研究,因为它提供了丰富的信号处理工具箱和可视化功能。以下是 50 个 MATLAB 代码示例,旨在通过实践帮助你深入理解信号与系统的精髓。这些示例覆盖了信号生成、时域和频域分析、系统响应、滤波器设计等关键主题。每个示例都包含简要说明和核心代码,注释解释了关键步骤和理论背景。

       由于篇幅限制,每个代码示例都以核心功能为主,完整运行可能需要 MATLAB 环境和相关工具箱(如 Signal Processing Toolbox)。这些代码适合初学者和中级用户,帮助你从基础到进阶掌握信号与系统的核心概念。如果你有特定需求或需要更详细的解释,可以进一步讨论。


1. 信号生成与基本操作

1.1 正弦信号生成

  • 目标:生成一个正弦信号并可视化。
  • 理论:正弦信号是信号与系统中最基本的信号形式,用于分析系统的频率响应。
% 参数设置
fs = 1000; % 采样频率 (Hz)
t = 0:1/fs:1; % 时间向量 (1秒)
f = 5; % 信号频率 (Hz)
A = 1; % 幅度

% 生成正弦信号
x = A * sin(2 * pi * f * t);

% 绘图
plot(t, x);
xlabel('Time (s)');
ylabel('Amplitude');
title('Sinusoidal Signal (5 Hz)');
grid on;

1.2 方波信号生成

  • 目标:生成一个方波信号。
  • 理论:方波包含丰富的谐波分量,用于分析系统的非线性响应。
fs = 1000; % 采样频率
t = 0:1/fs:1; % 时间向量
f = 5; % 频率 (Hz)

% 生成方波
x = square(2 * pi * f * t);

% 绘图
plot(t, x);
xlabel('Time (s)');
ylabel('Amplitude');
title('Square Wave (5 Hz)');
grid on;

1.3 信号叠加

  • 目标:叠加两个不同频率的正弦信号。
  • 理论:信号叠加是线性系统分析的基础。
fs = 1000;
t = 0:1/fs:1;
f1 = 5; % 第一个频率
f2 = 10; % 第二个频率

% 生成并叠加信号
x1 = sin(2 * pi * f1 * t);
x2 = sin(2 * pi * f2 * t);
x = x1 + x2;

% 绘图
plot(t, x);
xlabel('Time (s)');
ylabel('Amplitude');
title('Superimposed Sinusoids (5 Hz + 10 Hz)');
grid on;

1.4 信号移位

  • 目标:实现信号的时间移位。
  • 理论:时间移位是信号操作的基础,影响系统的因果性。
fs = 1000;
t = -1:1/fs:1;
f = 5;

% 生成原始信号
x = sin(2 * pi * f * t);
t_shifted = t + 0.2; % 时间右移 0.2 秒

% 绘图
plot(t, x, 'b', t_shifted, x, 'r--');
xlabel('Time (s)');
ylabel('Amplitude');
title('Time-Shifted Sinusoid (0.2s Shift)');
legend('Original', 'Shifted');
grid on;

1.5 信号缩放

  • 目标:实现信号的幅度和时间缩放。
  • 理论:缩放影响信号的能量和频率特性。
fs = 1000;
t = 0:1/fs:1;
f = 5;

% 原始信号
x = sin(2 * pi * f * t);
% 幅度缩放 (2倍)
x_amp_scaled = 2 * x;
% 时间缩放 (2倍频率)
t_time_scaled = t / 2;

% 绘图
subplot(2,1,1);
plot(t, x, 'b', t, x_amp_scaled, 'r--');
xlabel('Time (s)');
ylabel('Amplitude');
title('Amplitude Scaling (2x)');
legend('Original', 'Scaled');
grid on;

subplot(2,1,2);
plot(t, x, 'b', t_time_scaled, x, 'r--');
xlabel('Time (s)');
ylabel('Amplitude');
title('Time Scaling (2x Frequency)');
legend('Original', 'Scaled');
grid on;

2. 时域分析

2.1 信号能量计算

  • 目标:计算信号的能量。
  • 理论:信号能量是衡量信号强度的指标。
fs = 1000;
t = 0:1/fs:1;
f = 5;
x = sin(2 * pi * f * t);

% 计算信号能量
energy = sum(x.^2) / fs;
disp(['Signal Energy: ', num2str(energy)]);

2.2 信号功率计算

  • 目标:计算信号的平均功率。
  • 理论:功率是周期信号的重要特性。
fs = 1000;
t = 0:1/fs:1;
f = 5;
x = sin(2 * pi * f * t);

% 计算平均功率
power = mean(x.^2);
disp(['Signal Power: ', num2str(power)]);

2.3 信号自相关

  • 目标:计算信号的自相关函数。
  • 理论:自相关用于检测信号的周期性和相关性。
fs = 1000;
t = 0:1/fs:1;
f = 5;
x = sin(2 * pi * f * t);

% 计算自相关
[autocorr, lags] = xcorr(x, 'normalized');

% 绘图
plot(lags/fs, autocorr);
xlabel('Lag (s)');
ylabel('Autocorrelation');
title('Autocorrelation of S