ARTICLE · 1329276
数字信号处理习题解析













数字信号处理
习题解析
本次习题讲解适配教材:高西全《数字信号处理》(第五版),西安电子科技大学出版社。本篇讲解第三章3-3,3-23,3-24,3-25,配套MATLAB代码与详细推导解析。
第三章3-3
01
题目

02
MATLAB程序实现
clear; clc; close all;
N = 10;
n = 0:N-1; % 序列下标 0~9
% 定义x1(n)
x1 = [ones(1,5), zeros(1,5)];
% 定义x2(n)
x2 = [ones(1,5), -ones(1,5)];
% 计算L=10点循环卷积
y = cconv(x1, x2, N);
% 绘图
figure('Color','w');
subplot(3,1,1);
stem(n, x1, 'filled','LineWidth',1);
xlabel('n'); ylabel('x_1(n)');
title('序列x_1(n)');
axis([-1 N -0.2 1.2]);
grid on;
subplot(3,1,2);
stem(n, x2, 'filled','LineWidth',1);
xlabel('n'); ylabel('x_2(n)');
title('序列x_2(n)');
axis([-1 N -1.2 1.2]);
grid on;
subplot(3,1,3);
stem(n, y, 'filled','LineWidth',1);
xlabel('n'); ylabel('y(n)=x_1(n)⊛x_2(n)');
title('10点循环卷积结果y(n)');
grid on;
03
运行结果

第三章3-23
01
题目

02
题目分析

03
MATLAB程序实现


04
运行结果




第三章3-24
01
题目

02
题目分析


03
MATLAB程序实现

04
运行结果

第三章3-25
01
题目
3.25已知序列 h(n)=R6(n),x(n)=nR8(n)。
(1) 计算yc(n)= h(n)⑧x(n)。
(2)计算yc(n)= h(n)⑯x(n)和y(n)=h(n)*x(n)。
(3) 画出 h(n)、x(n)、y_c(n) 和 y(n) 的波形图,观察总结循环卷积与线性卷积的关系。
02
MATLAB程序实现
(1) 计算yc(n)= h(n)⑧x(n)
% 清理环境
clear; clc; close all;
% 定义序列
n_h = 0:5;
h = ones(1, 6); % h(n) = R_6(n)
n_x = 0:7;
x = 0:7; % x(n) = n*R_8(n)
% 计算8点循环卷积
N = 8;
h_pad = [h zeros(1, N-length(h))]; % 补零至8点: [1 1 1 1 1 1 0 0]
x_pad = [x zeros(1, N-length(x))]; % 补零至8点: [0 1 2 3 4 5 6 7]
% 利用DFT性质 H(k)*X(k) 逆变换
Hk = fft(h_pad, N);
Xk = fft(x_pad, N);
Yc_k = Hk .* Xk;
yc = ifft(Yc_k, N);
disp('(1) 8点循环卷积 yc(n) = ');
disp(yc);
(2)计算 yc(n)= h(n)⑯x(n)和y(n)=h(n)*x(n)。
% 清理环境
clear; clc; close all;
% 定义序列
n_h = 0:5;
h = ones(1, 6); % h(n) = R_6(n)
n_x = 0:7;
x = 0:7; % x(n) = n*R_8(n)
% 1. 计算线性卷积
y = conv(h, x);
disp('(2) 线性卷积 y(n) = ');
disp(y);
% 2. 计算16点循环卷积
N2 = 16;
h_pad16 = [h zeros(1, N2-length(h))]; % 补零至16点
x_pad16 = [x zeros(1, N2-length(x))]; % 补零至16点
Hk16 = fft(h_pad16, N2);
Xk16 = fft(x_pad16, N2);
Yc16_k = Hk16 .* Xk16;
yc16 = ifft(Yc16_k, N2);
% yc16 = cconv(h, x, 16); % 内置函数等价写法
disp('(2) 16点循环卷积 yc_16(n) = ');
disp(yc16);
(3) 画出 h(n)、x(n)、y_c(n) 和 y(n) 的波形图,观察总结循环卷积与线性卷积的关系
clear; clc; close all;
% 定义基础序列
h = ones(1, 6); % h(n) = R_6(n)
x = 0:7; % x(n) = nR_8(n)
% 计算各类卷积(供绘图使用)
y = conv(h, x); % 线性卷积
N8 = 8;
h8 = [h zeros(1, N8-length(h))];
x8 = [x zeros(1, N8-length(x))];
yc8 = real(ifft(fft(h8, N8) .* fft(x8, N8), N8)); % 8点循环卷积
N16 = 16;
h16 = [h zeros(1, N16-length(h))];
x16 = [x zeros(1, N16-length(x))];
yc16 = real(ifft(fft(h16, N16) .* fft(x16, N16), N16)); % 16点循环卷积
% 定义横坐标
n_h = 0:length(h)-1;
n_x = 0:length(x)-1;
n_y = 0:length(y)-1;
n_yc8 = 0:N8-1;
n_yc16 = 0:N16-1;
% 绘制波形图
figure('Name','波形图对比','Position',[50 50 900 700]);
subplot(5,1,1);
stem(n_h, h, 'filled','LineWidth',1.2);
title('h(n) = R_6(n)'); xlabel('n'); ylabel('h(n)'); grid on;
axis([-1 N16 0 1.5]);
subplot(5,1,2);
stem(n_x, x, 'filled','Color','r','LineWidth',1.2);
title('x(n) = nR_8(n)'); xlabel('n'); ylabel('x(n)'); grid on;
axis([-1 N16 0 8]);
subplot(5,1,3);
stem(n_y, y, 'filled','Color','k','LineWidth',1.2);
title('线性卷积 y(n) = h(n) * x(n)'); xlabel('n'); ylabel('y(n)'); grid on;
axis([-1 N16 0 max(y)+2]);
subplot(5,1,4);
stem(n_yc8, yc8, 'filled','Color','m','LineWidth',1.2);
title('8点循环卷积 y_{c8}(n)'); xlabel('n'); ylabel('幅度'); grid on;
axis([-1 N16 0 max(y)+2]);
subplot(5,1,5);
stem(n_yc16, yc16, 'filled','Color','b','LineWidth',1.2); hold on;
stem(n_y, y, 'o','Color','k','LineWidth',1.5);
title('16点循环卷积 y_{c16}(n)(蓝)与线性卷积(黑圈)对比');
xlabel('n'); ylabel('幅度'); grid on;
axis([-1 N16 0 max(y)+2]);
legend('16点循环卷积','线性卷积','Location','northwest');
03
运行结果



总结:设两有限长序列长度分别为M、L,二者线性卷积结果长度为 M+L-1。
1. 当循环卷积点数 N ≥ M+L-1:不发生时域混叠,循环卷积结果等于线性卷积;
2. 当循环卷积点数 N < M+L-1:发生时域混叠,循环卷积结果不等于线性卷积。















































































