夜雨聆风学习资料网

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:发生时域混叠,循环卷积结果不等于线性卷积。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料