【信号与系统】【北京航空航天大学】实验四、幅频、相频响应和傅里叶变换

一、实验目的

1、 掌握利用MATLAB计算系统幅频、相频响应的方法;
2、 掌握使用MATLAB进行傅里叶变换的方法;
3、 掌握使用MATLAB验证傅里叶变换的性质的方法。

二、实验内容

1、
在这里插入图片描述
MATLAB代码:

>> clear all;
>> a = [1 3 2];
>> b = [1];
>> w = -2 * pi : 0.01 : 2 * pi;
>> [H, w] = freqs(b, a, w);
>> mag = abs(H);
>> pha = angle(H);
>> rea = real(H);
>> ima = imag(H);
>> figure
>> subplot(2, 1, 1);
>> plot(w, mag);
>> grid on;
>> xlabel('\omega/\omega_0');
>> ylabel('|H(jw)|');
>> title('幅频响应曲线');
>> axis([-2 * pi, 2 * pi, 0, 0.6]);
>> subplot(2, 1, 2);
>> plot(w, pha);
>> grid on;
>> xlabel('\omega/\omega_0');
>> ylabel('∠H(jw) (rad)');
>> title('相频响应曲线');
>> axis([-2 * pi, 2 * pi, 0, 0.6]);
>> axis([-2 * pi, 2 * pi, -3, 3]);
>> figure
>> subplot(2, 1, 1);
>> plot(w, rea);
>> axis([-2 * pi 2 * pi -0.1 0.6]);
>> grid on;
>> xlabel('\omega/\omega_0');
>> ylabel('Re{H(jw)}');
>> title('频率响应的实部');
>> subplot(2, 1, 2);
>> plot(w, ima);
>> xlabel('\omega/\omega_0');
>> ylabel('Im{H(jw)}');
>> axis([-2 * pi 2 * pi -0.4 0.4]);
>> grid on;
>> title('频率响应的虚部');

幅频响应相频响应曲线:

在这里插入图片描述

频率响应的实部虚部

在这里插入图片描述

2、

在这里插入图片描述

MATLAB代码:

(1)X1(t) 信号

>> clear all;
>> syms x;
>> f = exp(-x) .* heaviside(x);
>> F = fourier(f);
>> Fs = abs(F);
>> Fe = angle(F);
>> figure
>> subplot(2, 1, 1);
>> ezplot(Fs, [-2 * pi, 2 * pi]);
>> title('符号计算X1(jw)的幅度谱', 'FontSize', 14);
>> grid on;
>> xlabel('\omega/\omega_0');
>> ylabel('|X1(jw)|');
>> subplot(2, 1, 2);
>> ezplot(Fe, [-2 * pi, 2 * pi]);
>> title('符号计算X1(jw)的相位谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('∠X1(jw) (rad)');
>> grid on;
>> clear all;
>> T = 0.01;
>> dw = 0.01;
>> t = -5 : T : 5;
>> w = -2 * pi : dw : 2 * pi;
>> f = exp(-t) .* (t >= 0);
>> F = f * exp(-j * t' * w) * T;
>> Fe = angle(F);
>> Fs = abs(F);
>> figure
>> subplot(2, 1, 1);
>> plot(w, Fs);
>> axis([-2 * pi 2 * pi 0.1 1.1]);
>> grid on;
>> title('数值计算X1(jw)的幅度谱', 'FontSize', 14);
>> ylabel('|X1(jw)|');
>> xlabel('\omega/\omega_0');
>> subplot(2, 1, 2);
>> plot(w, Fe);
>> axis([-2 * pi 2 * pi -1.5 1.5]);
>> title('数值计算X1(jw)的相位谱', 'FontSize', 14);
>> grid on;
>> ylabel('∠X1(jw) (rad)');
>> xlabel('\omega/\omega_0');

(2)X2(t) 信号

>> clear all;
>> syms x;
>> f = exp(-3 * abs(x)) .* sin(2 * x);
>> F = fourier(f);
>> figure
>> Fs = abs(F);
>> Fe = angle(F);
>> subplot(2, 1, 1);
>> ezplot(Fs);
>> grid on;
>> title('符号计算X2(jw)的幅度谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('|X2(jw)|');
>> subplot(2, 1, 2);
>> ezplot(Fe);
>> fplot(Fe);
>> axis([-2 * pi 2 * pi -1.6 1.6]);
>> axis([-2 * pi 2 * pi -2 2]);
>> grid on;
>> title('符号计算X2(jw)的相位谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('∠X2(jw) (rad)');
>> clear all;
>> T = 0.01;
>> dw = 0.01;
>> t = -10 : T : 10;
>> w = -2 * pi : dw : 2 * pi;
>> f = exp(-3 * abs(t)) .* sin(2 * t);
>> F = f * exp(-j * t' * w) * T;
>> figure
>> Fs = abs(F);
>> Fe = angle(F);
>> subplot(2, 1, 1);
>> plot(w, Fs);
>> grid on;
>> axis([-2 * pi 2 * pi -0.01 0.23]);
>> title('数值计算X2(jw)的幅度谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('|X2(jw)|');
>> subplot(2, 1, 2);
>> plot(w, Fe);
>> grid on;
>> axis([-2 * pi 2 * pi -2 2]);
>> title('数值计算X2(jw)的相位谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('∠X2(jw) (rad)');

(3)X3(t) 信号

>> clear all;
>> syms x;
>> f = heaviside(x + 0.5) - heaviside(x - 0.5);
>> F = fourier(f);
>> Fs = abs(F);
>> Fe = angle(F);
>> figure
>> subplot(2, 1, 1);
>> ezplot(Fs, [-5 * pi, 5 * pi]);
>> grid on;
>> title('符号计算X3(jw)的幅度谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('|X3(jw)|');
>> subplot(2, 1, 2);
>> ezplot(Fe, [-5 * pi, 5 * pi]);
>> grid on;
>> title('符号计算X3(jw)的相位谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('∠X3(jw) (rad)');
>> clear all;
>> T = 0.01;
>> dw = 0.01;
>> t = -5 : T : 5;
>> w = -5 * pi : dw : 5 * pi;
>> f = Heaviside(t + 0.5) - Heaviside(t - 0.5);
>> F = f * exp(-j * t' * w) * T;
>> Fs = abs(F);
>> Fe = angle(F);
>> figure;
>> subplot(2, 1, 1);
>> plot(w, Fs);
>> axis([-5 * pi 5 * pi -0.1 1.1]);
>> grid on;
>> title('数值计算X3(jw)幅度谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('|X3(jw)|');
>> subplot(2, 1, 2);
>> plot(w, Fe);
>> plot(w, abs(Fe));
>> axis([-5 * pi 5 * pi -0.2 3.3]);
>> grid on;
>> xlabel('\omega/omega_0');
>> xlabel('\omega/\omega_0');
>> ylabel('∠X3(jw) (rad)');
>> title('数值计算X3(jw)相位谱', 'FontSize', 14);

生成的谱图:

(1)X1(t) 信号

符号计算方法:

在这里插入图片描述

数值计算方法:

在这里插入图片描述
(2)X2(t) 信号

符号计算方法:

在这里插入图片描述

数值计算方法:

在这里插入图片描述
(3)X3(t) 信号

符号计算方法:

在这里插入图片描述
数值计算方法:

在这里插入图片描述

3、

在这里插入图片描述

(1)、验证线性性质

MATLAB代码:

>> clear all;
>> syms t;
>> x1 = exp(-t) .* heaviside(t);
>> x2 = exp(-3 * abs(t)) .* sin(2 * t);
>> x = 2 * x1 + 5 * x2;
>> X = fourier(x);
>> figure
>> subplot(2, 1, 1);
>> aX = abs(X);
>> pX = angle(X);
>> ezplot(aX);
>> grid on;
>> title('直接计算傅里叶变换的实部', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('|X(jw)|');
>> subplot(2, 1, 2);
>> ezplot(pX);
>> grid on;
>> title('直接计算傅里叶变换的虚部', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('∠X(jw) (rad)');
>> X1 = fourier(x1);
>> X2 = fourier(x2);
>> Y = 2 * X1 + 5 * X2;
>> aY = abs(Y);
>> pY = angle(Y);
>> figure
>> subplot(2, 1, 1);
>> ezplot(aY);
>> grid on;
>> title('使用性质计算傅里叶变换的实部', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('|X(jw)|');
>> subplot(2, 1, 2);
>> ezplot(pY);
>> grid on;
>> title('使用性质计算傅里叶变换的虚部', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('∠X(jw) (rad)');

直接计算:

在这里插入图片描述

使用性质计算:

在这里插入图片描述

(2)验证卷积性质

// 待更新。

4、

在这里插入图片描述

MATLAB代码:

signal_DTFT函数:

function X = signal_DTFT(xn, n, w)
X = xn * (exp(-1i) .^ (n' * w));

其余代码:

>> clear all;
>> w = -4 * pi : 0.01 : 4 * pi;
>> n = -30 : 30;
>> xn = 0.5 .^ (n - 1) .* (n >= 1);
>> X = signal_DTFT(xn, n, w);
>> magX = abs(X);
>> figure
>> subplot(2, 1, 1);
>> plot(w, magX);
>> grid on;
>> xlabel('\omega/\omega_0');
>> ylabel('|X(e^{jw})|');
>> title('傅里叶变换的模值', 'FontSize', 14);
>> axis([-4 * pi, 4 * pi, 0.5, 2]);
>> subplot(2, 1, 2);
>> plot(w, phaX);
>> axis([-4 * pi, 4 * pi, -4, 4]);
>> grid on;
>> xlabel('\omega/\omega_0');
>> ylabel('∠X(e^{jw}) (rad)');
>> title('傅里叶变换的相位', 'FontSize', 14);

傅里叶变换结果:

在这里插入图片描述
5、思考题

在这里插入图片描述

答: 数值计算和符号计算的精度不同。符号计算的精度取决于MATLAB中 ezplot 函数的精度,而数值计算的精度取决于自己定义的 w 变量的精度。

三、实验收获与感想:

1、 单位阶跃函数 u(t) 可以用 heaviside(t) 函数近似表示。在 t = 0 时刻的函数值为 0.5. 举例:

>> clear all;
>> syms x;
>> u = heaviside(x);
>> ezplot(u, [-5, 5]);
>> xlabel('t');
>> ylabel('u(t)');
>> title('单位阶跃函数', 'FontSize', 14);
>> heaviside(0)

ans =

0.5000

函数图像:

在这里插入图片描述

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值