一、目的(本次实验所涉及并要求掌握的知识点)
通过本实验加深对 FFT 算法的理解,熟悉MATLAB中的有关函数;应用FFT对典型信号进行频谱分析;了解应用FFT进行信号频谱分析过程中可能现的问题,以便在实际中正确应用FFT。应FFT实现快速线性卷积和相关函数的计算等。
二、实验内容与设计思想(设计思路、主要代码结构、主要代码段的文字分析、输出结果截图)
(1)给定序列,并对其进行相应的分析
①高斯序列
观察高斯序列的时域和幅频特性,固定信号中参数p=8,改变的值,使q分别等于2,4,8,观察它们的时域和幅频特性,了解当q取不同值时对信号序列的时域和幅频特性的影响;固定q=8,改变p,使p分别等于8,13,14,观察参数p变化对信号序列的时域及幅频特性的影响,记录实验中观察到的现象,绘出相应的时域序列和幅频特性曲线,并说明频谱出现了哪些现象?
- 设计思路
主要目的是展示高斯序列在时域和频域中的特性,通过改变高斯函数的参数p(均值)和q(与标准差σ有关),观察这些变化如何影响信号的形状及其频谱。具体来说:
固定p,改变q:保持高斯函数的中心位置不变,而改变其宽度,以观察宽度对时域波形和频域特性的影响。
固定q,改变p:保持高斯函数的宽度不变,而移动其中心位置,以观察位置变化对时域波形和频域特性的影响。
- 主要代码结构
① 定义参数:
n: 离散时间索引。
p_fixed, q_fixed: 固定的高斯函数参数。
q_values, p_values: 用于循环改变的参数集合。
② 图像1:固定p=8,改变q值:
对于每个q值,生成一个高斯序列,并计算其快速傅里叶变换(FFT)。
使用subplot创建子图来显示时域波形和对应的幅频特性。
设置标题、标签等图形属性,使用plot绘制连线图,并开启网格线以提高可读性。
③ 图像2:固定q=8,改变p值:
类似地,对于每个p值,生成高斯序列并进行FFT分析。
同样地使用subplot创建子图,并设置相应的图形属性。
④ 辅助功能:
sgtitle为整个图形窗口添加总标题。
- 主要代码段的文字分析
1. 图像1:固定p=8,改变q值
此段代码首先创建一个新的图形窗口(figure(1)),然后进入一个循环,对于每个q值,生成一个高斯序列x,计算其FFT,并将结果移位以使频谱居中。接着,它分别用两个subplot命令来显示时域波形和幅频特性,同时设置适当的标签、标题和网格线。
2. 图像2:固定q=8,改变p值
这一部分与前一部分类似,但这次是在固定q的情况下,改变p值,从而观察中心位置变化对高斯序列及其频谱的影响。同样地,使用了subplot来组织图形输出,并且配置了图形的各种属性以确保清晰度和美观性。
- 输出结果截图
如图所示,q 的变化影响了高斯序列的宽度和频谱的集中程度。随着q 的增加,时域波形变宽,频谱变窄且峰值升高。
图 1 固定p=8,改变q值的高斯序列时域和幅频特性
如图所示,p 的变化主要影响了高斯序列的时域宽度,随着p的增大而变宽,最高点也向右偏移,而频谱的形状和宽度保持不变,只是整体位置发生了偏移。
图 2 固定q=8,改变p值的高斯序列时域和幅频特性
②衰减正弦序列
观察衰减正弦序列的时城和幅频特性,a=0.1,f= 0.0625 ,检查谱峰出现位置是否正确,注意频谱的形状,绘出幅频特性曲线。改变f,使f分别等于0.4375和0.5625,观察两种情况下,频谱的形状和谱峰出现位置,有无混叠和泄漏现象哪种满足采样定定理。
- 设计思路
主要目的是生成三个不同频率的衰减正弦序列,并对其进行快速傅里叶变换(FFT)以分析其时域和频域特性。通过绘制这些序列及其对应的幅频特性曲线,可以直观地观察到不同频率下信号的行为,特别是谱峰的位置、是否存在混叠或泄漏现象。
- 主要代码结构
- 定义参数:设置衰减系数 a 和三种不同的频率 f1, f2, f3。
- 生成序列:根据给定的时间点 n 以及公式,分别计算三个衰减正弦序列 x1, x2, x3。
- 进行傅里叶变换:对每个序列应用 FFT 函数,得到它们在频域上的表示 X1, X2, X3。
- 计算频率轴:根据采样频率 fs 和序列长度 N 计算出相应的频率向量 f。
- 绘制图形:使用子图(subplot)来组织图形布局,分别展示三个序列的时域波形和对应的幅频特性曲线。
- 主要代码段的文字分析
1. 定义参数
a = 0.1;
f1 = 0.0625;
f2 = 0.4375;
f3 = 0.5625;
这一部分设定了衰减因子 a 和将要分析的三个频率值 f1, f2, f3。这三个频率代表了不同的情况,用于比较不同频率下的频谱特性。
2. 生成衰减正弦序列
n = 0:20;
x1 = a * exp(-a * n).* sin(2 * pi * f1 * n);
x2 = a * exp(-a * n).* sin(2 * pi * f2 * n);
x3 = a * exp(-a * n).* sin(2 * pi * f3 * n);
定义时间索引 n 为从0到20的整数数组。
使用上述定义的公式生成三个衰减正弦序列 x1, x2, x3,对应于不同的频率 f1, f2, f3。
3. 进行傅里叶变换
X1 = fft(x1);
X2 = fft(x2);
X3 = fft(x3);
应用 fft() 函数对每个序列执行快速傅里叶变换,获得频域数据 X1, X2, X3。
4. 计算频率轴
fs = 1; % 采样频率
N = length(n);
f = (0:N - 1) * fs / N;
设置采样频率 fs 为1 Hz(意味着采样间隔为1秒),这适用于离散时间序列 n。
根据采样定理和序列长度 N 来构建频率轴 f。
5. 绘制图形
% 绘制时域图
subplot(3, 2, 1); stem(n, x1); title('...'); xlabel('...'); ylabel('...');
subplot(3, 2, 3); stem(n, x2); title('...'); xlabel('...'); ylabel('...');
subplot(3, 2, 5); stem(n, x3); title('...'); xlabel('...'); ylabel('...');
% 绘制幅频特性曲线
subplot(3, 2, 2); plot(f, abs(X1)); title('...'); xlabel('...'); ylabel('...');
subplot(3, 2, 4); plot(f, abs(X2)); title('...'); xlabel('...'); ylabel('...');
subplot(3, 2, 6); plot(f, abs(X3)); title('...'); xlabel('...'); ylabel('...');
使用 subplot() 创建一个3行2列的网格来放置六个子图,前三个是时域波形,后三个是对应的幅频特性曲线。
使用 stem() 和 plot() 分别绘制离散点和连续线来表示时域波形和频域特性。
每个图形都带有适当的标题和坐标轴标签以便解释。
- 输出结果截图
1. 对于 f = 0.0625
时域波形:衰减正弦序列在时域上表现为逐渐衰减的正弦波。
频谱:频谱中只有一个明显的峰值,位于预期的频率位置。
谱峰位置:正确。
2. 对于 f = 0.4375
时域波形:衰减正弦序列在时域上表现为逐渐衰减的正弦波。
频谱:频谱中有一个明显的峰值,位于预期的频率位置。
谱峰位置:正确。
混叠和泄漏:由于频率较高,可能会有轻微的泄漏现象。
3. 对于 f = 0.5625
时域波形:衰减正弦序列在时域上表现为逐渐衰减的正弦波。
频谱:频谱中有一个明显的峰值,位于预期的频率位置。
谱峰位置:正确。
混叠和泄漏:由于频率接近奈奎斯特频率的一半,可能会有明显的泄漏现象。
4. 结论
当频率 f 较低时(如 0.0625),频谱清晰且没有明显的混叠或泄漏现象。
当频率 f 较高时(如 0.4375 和 0.5625),频谱可能会出现轻微的泄漏现象。
根据奈奎斯特采样定理,当频率 f 接近奈奎斯特频率的一半时,可能会出现混叠现象。因此,频率 0.0625 更符合采样定理的要求。
图 3 衰减正弦序列
③三角波序列
④反三角波序列
观察三角波和反三角波序列的时域和幅频特性,用N=8点FFT 分析信号序列三角波和反三角波序列的幅频特性,观察两者的序列形状和频谱曲线有什么异同?绘出两序列及其幅频特性曲线,说明三角波和反三角波的圆周位移关系。
- 设计思路
- 初始化:首先清除工作区和命令行窗口,确保运行环境干净。
- 定义序列:根据题目给定的条件,创建两个离散时间序列——三角波和反三角波。
- 频域转换:对这两个序列应用快速傅里叶变换(FFT),以获得它们的频域表示,并计算幅度谱。
- 归一化:将幅度谱进行归一化处理,以便于比较不同序列的频域特性。
- 绘图展示:使用subplot函数在一个图形窗口中组织六个子图,分别显示两个序列的时域波形、幅频特性(幅度谱)以及8点FFT的结果。
- 主要代码结构
- 初始化与清理:clear; clc;:清除所有变量并清空命令窗口。
- 参数设定:定义了采样点数N和样本点n。
- 序列生成:使用逻辑索引为三角波xc和反三角波x_anti_tri赋值,满足题目的数学描述。
- 频域分析:应用fft函数计算序列的频域表示,并通过取绝对值得到幅度谱。对幅度谱进行归一化,以使得最大值为1,便于可视化和比较。
- 频率轴构建:创建了一个从0到2*pi的离散频率向量frq用于后续绘图。
- 图形绘制:使用subplot布局来安排六个不同的子图,每个子图都有自己的标题和坐标轴标签。stem函数被用来绘制离散数据点。
- 主要代码段的文字分析
- 序列生成部分:在这里,我们利用逻辑索引来选择符合条件的元素,并直接对其赋值。这种方法是MATLAB中一种高效且简洁的方式来操作数组。
- 频域转换及归一化:fft函数执行快速傅里叶变换,而abs则用于计算复数结果的模,即幅度。归一化步骤保证了不同序列之间的可比性。
- 绘图部分:通过subplot(3, 2, X),我们将一个图形窗口划分为3行2列,共6个位置,每个位置对应一个特定的图像。stem函数非常适合用来表示离散信号或频谱,它能清晰地显示出各个频率分量及其对应的幅度。
- 输出结果截图
1. 幅频特性分析
相同点:
两个序列的主要能量都集中在低频部分,特别是频率索引为 0 和 4。
两个序列的直流分量(频率索引为 0)都是最大的。
不同点:
三角波在时域上是递增后递减的形状,而反三角波则是递减后递增的形状。
在频域中,虽然主要能量分布相似,但具体幅度有所不同。例如,三角波在频率索引为 4 的幅度比反三角波大。
2. 圆周位移关系
- 圆周位移:在频域中,一个信号的圆周位移可以通过其相位谱来观察。对于这两个序列,由于它们是对称的,相位谱会显示出不同的相位偏移。
- 相位谱:虽然代码中没有直接绘制相位谱,但从幅频特性可以看出,两个序列的相位信息可能有所不同,导致了时域上的对称性差异。
图 4 三角波和反三角波
(2)分析有限长正弦序列
分别用离散时间傅里叶变换(DTFT)和离散傅里叶变换(DFT)分析一个有限长正弦序列的频谱,说明两个频谱的区别。信号频率分别为10 Hz和11 Hz,采样频率为64 Hz,信号长度为32点。
- 设计思路
- 初始化:设定采样频率fs、采样点数N,并创建时间序列n。
- 生成信号:基于给定的角频率,分别生成两个不同频率(10Hz和11Hz)的正弦波序列。
- 计算DTFT:使用一个循环来近似计算每个序列的DTFT,并存储结果。
- 计算DFT:利用MATLAB内置的fft函数直接计算每个序列的DFT。
- 绘图展示:绘制DTFT和DFT的幅度谱,以直观地比较两者之间的差异。
- 主要代码结构
- 设置基本参数
- 定义正弦波的角频率并生成信号
- 计算DTFT(离散时间傅里叶变换)
- 计算DFT(离散傅里叶变换)
- 绘制图形展示结果
- 主要代码段的文字分析
1. 初始化与参数设定
% 采样频率
fs = 64;
% 采样点数
N = 32;
% 时间序列
n = 0:N - 1;
这部分定义了采样频率fs、采样点数N,以及用于生成信号的时间索引n。
2. 生成正弦序列
% 生成对应频率的离散角频率(数字频率)
omega_10 = 2 * pi * 10 / fs;
omega_11 = 2 * pi * 11 / fs;
% 生成频率为10Hz的有限长正弦序列
x_10 = sin(omega_10 * n);
% 生成频率为11Hz的有限长正弦序列
x_11 = sin(omega_11 * n);
这里根据指定的频率(10Hz和11Hz),计算对应的角频率,并生成相应的正弦波序列x_10和x_11。
3. 计算DTFT
% 计算频率为10Hz正弦序列的DTFT(通过计算足够多的频率点来近似DTFT)
k_DTFT = 0:1023;
omega_DTFT = 2 * pi * k_DTFT / 1024;
X_DTFT_10 = zeros(1, length(omega_DTFT));
for idx = 1:length(omega_DTFT)
X_DTFT_10(idx) = sum(x_10.* exp(-1j * omega_DTFT(idx) * n));
end
% 计算频率为11Hz正弦序列的DTFT
X_DTFT_11 = zeros(1, length(omega_DTFT));
for idx = 1:length(omega_DTFT)
X_DTFT_11(idx) = sum(x_11.* exp(-1j * omega_DTFT(idx) * n));
end
DTFT的计算是通过遍历一系列离散的角频率点omega_DTFT,对于每一个频率点,都对原始序列进行复指数加权求和。这模拟了连续时间傅里叶变换的过程,但只适用于离散时间序列。
4. 计算DFT
% 计算频率为10Hz正弦序列的DFT
X_DFT_10 = fft(x_10, N);
% 计算频率为11Hz正弦序列的DFT
X_DFT_11 = fft(x_11, N);
DFT的计算非常简单,直接调用MATLAB内置的fft函数即可。由于DFT本质上是一个快速算法实现的离散傅里叶变换,所以它只能提供有限个频率点上的信息。
- 输出结果截图
- DTFT是连续频谱,它对所有的连续频率都有定义,理论上需要计算无穷多个频率点,这里我们通过计算较多的频率点来近似展示其连续特性,而DFT是离散频谱,其频率点是离散分布的,在我们给定的代码中,DFT频率点个数等于采样点数N。
- 对于周期信号,DTFT频谱是等间隔的冲激函数,在实际计算和绘图中我们看到是连续变化的曲线,DFT频谱则是在离散频率点上对DTFT频谱的采样,会出现栅栏效应,可能导致某些频率特征不能很好体现,比如11Hz正弦序列(非采样频率整数倍)的DFT频谱和10Hz(采样频率整数倍)相比,峰值等特征相对没那么准确反映真实频谱情况。
- DTFT频谱幅度通常具有关于原点对称的特性(对于实序列),DFT频谱幅度(在正频率部分展示时)在满足一定条件下也有相应对称关系,但它是离散的、有限个点来体现这种对称等特性。
图 5 有限长正弦序列
三、实验使用环境(本次实验所使用的平台和相关软件)
MATLAB R2022b
四、实验小结(实验中遇到的问题及解决过程、实验中产生的错误及原因分析、实验体会和收获)
- 通过本次实验,我不仅深入理解了FFT算法如何将时域信号转换为频域表示并捕捉信号特征,还熟练掌握了MATLAB中如`fft()`、`fftshift()`、`stem()`等用于信号处理的工具,极大地简化了频谱分析的过程。我认识到频谱分析在理论和实际工程应用中的重要性,包括识别信号成分、检测噪声源和优化系统性能等方面。同时,我也注意到了实际应用FFT时潜在的问题,如频谱泄漏和频率分辨率,以及正确解释频谱图的重要性。此外,我了解到FFT不仅能用于频谱分析,还可以加速线性卷积和相关函数的计算,因为频域中的乘法等同于时域中的卷积操作,显著提高了计算效率。这些收获为我未来的工作和研究奠定了坚实的基础。
- 频率轴的归一化问题:在绘制高斯序列的频谱图时,期初频率轴设置不当,导致频谱图不准确。例如,在计算f = (-N/2:N/2-1)/N时,必须确保N是FFT点数,并且正确地表示了归一化的频率范围。解决方案:最后,我仔细检查频率轴的定义,确保其符合信号的实际采样率和长度。
- 频谱泄漏:使用FFT分析非整周期的正弦波时,出现了频谱泄漏现象,如在“分析有限长正弦序列”部分生成的10Hz和11Hz正弦波。起初信号长度不是其周期的整数倍,频谱图上出现额外的频率分量。解决方案:最后通过调整信号长度使其为周期的整数倍或应用窗函数来减少频谱泄漏的影响。
五、参考文献(书籍、网址链接等)
1.数字信号与图像处理
2.CSDN
六、源代码附件(完整的程序源代码,注意排版紧凑,如果代码较长,字体、字间距选择小一点的)
%% 1.高斯序列
% 定义参数
n = 0:15; % 离散时间索引
p_fixed = 8; % 固定p值
q_values = [2, 4, 8]; % 改变的q值
p_values = [8, 13, 14]; % 改变的p值
q_fixed = 8; % 固定q值
% 图像1:固定p=8, 改变q值
figure(1);
for i = 1:length(q_values)
q = q_values(i);
x = exp(-(n-p_fixed).^2 / (2*q^2)); % 高斯序列
Xw = fft(x); % 计算FFT
Xw_shifted = fftshift(Xw); % 对FFT结果进行移位以获得中心对称的频谱
% 绘制时域波形
subplot(3,2,2*i-1);
plot(n, x, 'LineWidth', 1.5); % 使用plot代替stem
ylabel(['p=', num2str(p_fixed), ', q=', num2str(q)]);
title('时域');
grid on;
% 绘制幅频特性
subplot(3,2,2*i);
N = length(Xw_shifted); % FFT点数
f = (-N/2:N/2-1)/N; % 归一化频率轴
plot(f, abs(Xw_shifted), 'LineWidth', 1.5); % 使用plot代替stem
title('幅频特性');
xlabel('归一化频率');
ylabel('|X(f)|');
grid on;
end
sgtitle('固定p=8,改变q值的高斯序列时域和幅频特性');
% 图像2:固定q=8, 改变p值
figure(2);
for i = 1:length(p_values)
p = p_values(i);
x = exp(-(n-p).^2 / (2*q_fixed^2)); % 高斯序列
Xw = fft(x); % 计算FFT
Xw_shifted = fftshift(Xw); % 对FFT结果进行移位以获得中心对称的频谱
% 绘制时域波形
subplot(3,2,2*i-1);
plot(n, x, 'LineWidth', 1.5); % 使用plot代替stem
ylabel(['p=', num2str(p), ', q=', num2str(q_fixed)]);
title('时域');
grid on;
% 绘制幅频特性
subplot(3,2,2*i);
N = length(Xw_shifted); % FFT点数
f = (-N/2:N/2-1)/N; % 归一化频率轴
plot(f, abs(Xw_shifted), 'LineWidth', 1.5); % 使用plot代替stem
title('幅频特性');
xlabel('归一化频率');
ylabel('|X(f)|');
grid on;
end
sgtitle('固定q=8,改变p值的高斯序列时域和幅频特性');
%% 2.衰减正弦序列
% 定义参数
a = 0.1;
f_values = [0.0625, 0.4375, 0.5625];
% 生成时间向量
n = 0:15;
% 初始化图形
figure;
for k = 1:length(f_values)
f = f_values(k);
% 生成衰减正弦序列
x = a * exp(-a * n) .* sin(2 * pi * f * n);
% 进行傅里叶变换
X = fft(x);
% 计算频率轴
fs = 1; % 采样频率
N = length(n);
f_axis = (0:N-1) * fs / N;
% 绘制时域图
subplot(3, 2, 2*k-1);
stem(n, x);
title(['衰减正弦序列 x(n), a=', num2str(a), ', f=', num2str(f)]);
xlabel('n');
ylabel('x(n)');
% 绘制幅频特性曲线
subplot(3, 2, 2*k);
plot(f_axis, abs(X));
title(['衰减正弦序列 x(n) 幅频特性曲线, a=', num2str(a), ', f=', num2str(f)]);
xlabel('频率 f');
ylabel('幅度');
% 检查谱峰出现位置
[~, maxIdx] = max(abs(X));
peakFreq = f_axis(maxIdx);
disp(['对于 f = ', num2str(f), ',谱峰出现在频率:', num2str(peakFreq)]);
end
%% 3.三角波/反三角波序列
% 采样点数
N = 8;
n = 0:N-1;
% 定义三角波序列xc(n)
xc = zeros(1, N);
xc(n >= 0 & n <= 3) = n(n >= 0 & n <= 3);
xc(n >= 4 & n <= 7) = 8 - n(n >= 4 & n <= 7);
% 定义反三角波序列x_anti_tri(n)
x_anti_tri = zeros(1, N);
x_anti_tri(n >= 0 & n <= 3) = 4 - n(n >= 0 & n <= 3);
x_anti_tri(n >= 4 & n <= 7) = n(n >= 4 & n <= 7) - 4;
% 计算三角波序列的FFT并求幅频特性
Xc_fft = fft(xc, N);
mag_Xc_fft = abs(Xc_fft); % 幅度谱(取绝对值)
mag_Xc_fft = mag_Xc_fft / max(mag_Xc_fft); % 归一化幅度谱
% 计算反三角波序列的FFT并求幅频特性
X_anti_tri_fft = fft(x_anti_tri, N);
mag_X_anti_tri_fft = abs(X_anti_tri_fft); % 幅度谱(取绝对值)
mag_X_anti_tri_fft = mag_X_anti_tri_fft / max(mag_X_anti_tri_fft); % 归一化幅度谱
% 频率轴(离散频率)
k = 0:N-1;
frq = k * (2 * pi / N); % 频率范围为 [0, 2*pi]
% 创建一个包含所有图形的窗口
figure('Name', '三角波和反三角波的时域及频域分析');
% 绘制三角波时域波形
subplot(3, 2, 1);
stem(n, xc, 'filled');
title('三角波序列时域波形');
xlabel('样本点 n');
ylabel('幅度');
% 绘制三角波幅频特性(幅度谱)
subplot(3, 2, 3);
stem(frq, mag_Xc_fft, 'filled');
title('三角波序列幅频特性');
xlabel('归一化频率 (rad)');
ylabel('归一化幅度');
% 绘制三角波8点FFT图像
subplot(3, 2, 5);
stem(k, mag_Xc_fft, 'filled');
title('三角波序列8点FFT');
xlabel('频率索引 k');
ylabel('归一化幅度');
% 绘制反三角波时域波形
subplot(3, 2, 2);
stem(n, x_anti_tri, 'filled');
title('反三角波序列时域波形');
xlabel('样本点 n');
ylabel('幅度');
% 绘制反三角波幅频特性(幅度谱)
subplot(3, 2, 4);
stem(frq, mag_X_anti_tri_fft, 'filled');
title('反三角波序列幅频特性');
xlabel('归一化频率 (rad)');
ylabel('归一化幅度');
% 绘制反三角波8点FFT图像
subplot(3, 2, 6);
stem(k, mag_X_anti_tri_fft, 'filled');
title('反三角波序列8点FFT');
xlabel('频率索引 k');
ylabel('归一化幅度');
%% 4.分析有限长正弦序列
% 采样频率
fs = 64;
% 采样点数
N = 32;
% 时间序列
n = 0:N - 1;
% 生成对应频率的离散角频率(数字频率)
omega_10 = 2 * pi * 10 / fs;
omega_11 = 2 * pi * 11 / fs;
% 生成频率为10Hz的有限长正弦序列
x_10 = sin(omega_10 * n);
% 生成频率为11Hz的有限长正弦序列
x_11 = sin(omega_11 * n);
% 计算频率为10Hz正弦序列的DTFT(通过计算足够多的频率点来近似DTFT)
k_DTFT = 0:1023;
omega_DTFT = 2 * pi * k_DTFT / 1024;
X_DTFT_10 = zeros(1, length(omega_DTFT));
for idx = 1:length(omega_DTFT)
X_DTFT_10(idx) = sum(x_10.* exp(-1j * omega_DTFT(idx) * n));
end
% 计算频率为11Hz正弦序列的DTFT
X_DTFT_11 = zeros(1, length(omega_DTFT));
for idx = 1:length(omega_DTFT)
X_DTFT_11(idx) = sum(x_11.* exp(-1j * omega_DTFT(idx) * n));
end
% 计算频率为10Hz正弦序列的DFT
X_DFT_10 = fft(x_10, N);
% 计算频率为11Hz正弦序列的DFT
X_DFT_11 = fft(x_11, N);
% 绘制频率为10Hz正弦序列的DTFT频谱幅度
figure;
subplot(2, 2, 1);
plot(omega_DTFT, abs(X_DTFT_10));
title('10Hz正弦序列DTFT频谱幅度');
xlabel('角频率 (rad)');
ylabel('幅度');
% 绘制频率为10Hz正弦序列的DFT频谱幅度(只取前N/2+1点展示正频率部分)
subplot(2, 2, 2);
plot((0:N / 2) * (2 * pi / N), abs(X_DFT_10(1:N / 2 + 1)));
title('10Hz正弦序列DFT频谱幅度');
xlabel('角频率 (rad)');
ylabel('幅度');
% 绘制频率为11Hz正弦序列的DTFT频谱幅度
subplot(2, 2, 3);
plot(omega_DTFT, abs(X_DTFT_11));
title('11Hz正弦序列DTFT频谱幅度');
xlabel('角频率 (rad)');
ylabel('幅度');
% 绘制频率为11Hz正弦序列的DFT频谱幅度(只取前N/2+1点展示正频率部分)
subplot(2, 2, 4);
plot((0:N / 2) * (2 * pi / N), abs(X_DFT_11(1:N / 2 + 1)));
title('11Hz正弦序列DFT频谱幅度');
xlabel('角频率 (rad)');
ylabel('幅度');