昆明理工大学数字信号处理B实验(上)

前言

        本文仅限昆明理工大学开设的数字信号处理及DSP应用的MATLAB结果分享。文章部分内容可能有错误,仅代表个人观点。

        本文先探讨前三个实验研究的问题和解决过程。

实验一 离散信号分析

1.1 实验目的

1.观察常用离散时间信号的图形,掌握离散时间信号的基本序列运算。

2.理解离散时间系统的时域特性,加深对离散时间系统的差分方程的理解。

1.2 实验内容

1.在给出的区间上产生并画出下面序列:

(1) x(n)=n[u(n)-u(n-10)]+10e^{-0.3(n-10)}[u(n-10)-u(n-20)],0\leq n\leq 20

(2)\tilde{x}(n)=\left \{...,5,4,3,2,1,5,4,3,2,1,5,4,3,2,1,...\right \},-10\leq n\leq 9

        画两个离散时间序列,先用赋值语句设置序列,再用stem函数绘制离散时间序列。

%% 任务一

%第一问
n = 1:1:21; %设置序列x的总范围
x1_1(n) = n .* ( heaviside(n) - heaviside(n - 10) ) + 10 .* exp(-0.3 .* (n - 10)) .* (heaviside(n - 10) - heaviside(n - 20));   %设置序列x的内容

figure
subplot(2,1,1)
stem(n-1, x1_1);

%第二问

n = -10:1:9;%设置序列x的总范围
for i = n   %设置序列内容
    x1_2(i + 11) = 5 - mod(i, 5);
end

subplot(2,1,2)
stem(n, x1_2);

        简单的离散时间序列绘制,不需要太多的解释,单位阶跃信号heaviside函数在今年6月的信号与系统B实验中就已经用过了,这里不多讲述。

2.给出一个简单数字微分器:y(n)=x(n)-x(n-1),它计算输入序列的后向一阶差分。对下面三角脉冲序列实现上述微分器并求出结果。x(n)=n[u(n)-u(n-10)]+(20-n)[u(n-10)-u(n-20)]

        很明显,这里的简单数字微分器就是对序列x(n)进行一阶差分的运算。差分时注意序列的范围和差分区域。

%% 任务二

n = -10:1:30; n1 = -10:1:29; n2 = -9:1:30;  %设置序列x的总范围和差分范围
x2(n+11) = n .* (heaviside(n) - heaviside(n - 10)) + (20 - n) .* (heaviside(n - 10) - heaviside(n - 20));   %设置序列x的内容

figure
subplot(2,1,1)
stem(n, x2);

y(n2+11) = x2(n2+11) - x2(n1+11);
y(1) = x2(1);   %对序列进行简单数字微分(一阶差分)

subplot(2,1,2)
stem(n, y);

        差分对于离散时间信号就是微分对于连续时间信号。差分也分为向前差分、向后差分和中心差分,题目给出的要求是当前项减前项,属于是向后差分。向前差分是后项减当前项、中心差分是后项减前项再除以2.

1.3 实验步骤

1. 实验内容1的程序运行结果如下图所示:

2. 实验内容2的程序运行结果如下图所示:

        这两部分就不展示了,与本人画出的结果大同小异。

1.4 实验思考题

1. 分析单位脉冲序列和单位阶跃序列的特点,使用它们描述离散时间信号,各有什么好处?

        单位脉冲序列代表瞬态特性,单位阶跃信号代表持续特性。利用单位脉冲信号描述离散时间信号,可以了解系统的线性特性、稳定性以及动态性能;利用单位阶跃信号输入到离散时间系统中,可以通过其响应了解系统的稳态特性和动态性能。

2. 简述序列的加法、乘法、移位、点乘等运算的计算过程。

        序列的加法和点乘遵循按位相加或相乘的原则。序列的位移是指序列中的所有项向左或向右移动固定的位数。序列的乘法即是序列的卷积和。

实验二 信号采样

2.1 实验目的

1.验证奈奎斯特采样定理。

2.加深对时域取样后信号频谱变化的认识。

2.2 实验内容

假设有模拟信号为:x_{a}(t)=cos(20\pi t), 0\leq t\leq 1,如果以Ts=0.01sTs=0.05sTs=0.1s的时间间隔进行采样,可以得到x(n)

1.针对每一个Ts取值,画出相应的x(n)

        模拟信号在MATLAB中可以理解成是函数。因此利用syms函数定义模拟信号x_{a}(t),在通过不同的采样频率得到不同的取值。

%% 起始

dt = 0.001; dt1 = 0.01; dt2 = 0.05; dt3 = 0.1;  %设置取样周期
syms t;
x(t) = cos(20 .* pi .* t);  %设置函数

figure
subplot(4,1,1);
fplot(t, x, [0 1])
title("原函数")


%% 任务一

%取样周期0.01秒
subplot(4,1,2)
hold on
title("取样周期0.01秒")
fplot(t, x, [0 1])
for i = 0:dt1:1
    plot(i, x(i), 'ro');
    x1(fix(i / dt1 + 1)) = double(subs(x, t, i));
end

hold off

%取样周期0.05秒
subplot(4,1,3)
hold on
title("取样周期0.05秒")
fplot(t, x, [0 1])
for i = 0:dt2:1
    plot(i, x(i), 'ro');
    x2(fix(i / dt2 + 1)) = double(subs(x, t, i));
end

hold off

%取样周期0.1秒
subplot(4,1,4)
hold on
title("取样周期0.1秒")
fplot(t, x, [0 1])
for i = 0:dt3:1
    plot(i, x(i), 'ro');
    x3(fix(i / dt3 + 1)) = double(subs(x, t, i));
end

hold off

        这里为了看得清楚,先把原函数图像输出,再通过打圈来标识,得到输出结果:

2.采用sinc内插(用\Delta t=0.001s)从样本x(n)重建模拟信号y_{a}(t)

        sinc函数与Sa函数表达式相同,sinc(x)=\frac{sin(\pi x)}{\pi x}。由于sinc函数在时域上是无限长的,实际使用中需要截断。可以简单的for循环暴力插值,高级一点的可以用矢量化和FFT快速傅里叶变换求解。

%% 任务二

ct = 0:dt:1;
n1 = 0:1/dt1; n2 = 0:1/dt2; n3 = 0:1/dt3;
y1 = zeros(size(ct)); y2 = zeros(size(ct)); y3 = zeros(size(ct));   %初始化函数
for i = 1:length(ct)    %利用sinc进行差值
    y1(i) = sum(x1 .* sinc((ct(i) - n1*dt1) / dt1));
    y2(i) = sum(x2 .* sinc((ct(i) - n2*dt2) / dt2));
    y3(i) = sum(x3 .* sinc((ct(i) - n3*dt3) / dt3));
end

figure
subplot(3,1,1)
plot(ct, y1)
title("取样周期0.01秒重建模拟")

subplot(3,1,2)
plot(ct, y2)
title("取样周期0.05秒重建模拟")

subplot(3,1,3)
plot(ct, y3)
title("取样周期0.1秒重建模拟")

        这样的运算结果与预期相差的有点大,但是也确实是验证了奈奎斯特采样定理:

2.3 实验步骤

1. 实验内容1的程序运行结果如下图所示:

2. 实验内容2的程序运行结果如下图所示:

        由于内容2的结果与预期相差较大,因此放出内容2的预期效果。预期效果可能是用矢量优化的FFT做的,适合数据量大的sinc插值。

2.4 实验思考题

1. 在分析理想采样的实验中,当采样频率不同时,得到的采样序列有何差异?

        当采样频率足够高时,采样序列能够较好地保留原始序列的特征,但是能量消耗大;当采样频率降低时,采样序列可能无法准确反映原始序列的高频成分,导致频谱混叠现象加剧,序列完整性受损。

2. 理想采样有哪些局限性,在实际应用中如何进行修正?

        首先是存在高频噪声,受到了奈奎斯特采样定理的约束,采样频率应不小于信号最高频率的两倍,采样能量受到限制;由此获得的理想信号数据量大,存储与传输受到限制

实验三 离散信号的卷积运算

3.1 实验目的

1.理解线性卷积和,掌握线性卷积和的求解方法。

2.理解循环卷积和,掌握循环卷积和的求解方法并对照线性卷积比较二者异同。

3.2 实验内容

1. 求序列x_{1}(n)=0.8^{n}(0\leq n\leq 9)x_{2}(n)=\delta (n)+\delta (n-2)的线性卷积,并用stem函数作图。

        卷积的运算,包括卷积和与卷积积分的运算在MATLAB中都能用conv函数实现,在今年6月的信号与系统B实验中就已经用过了,这里不多讲述。单位冲激序列也还是用布尔型转数值得到的。

%% 任务一

n1 = 0:1:9; n2 = 0:1:3; nq = 0:1:12;    %设置长度
x1_1(n1+1) = 0.8 .^ n1;
x1_2(n2+1) = (n2 == 0) + (n2 == 2); %设置序列内容
x1 = conv(x1_1, x1_2);  %线性卷积

figure
subplot(3,1,1)
stem(n1, x1_1);
axis([-1 10 -0.1 1.1])
title('序列x1(n)')

subplot(3,1,2)
stem(n2, x1_2);
axis([-1 4 -0.1 1.1])
title('序列x2(n)')

subplot(3,1,3)
stem(nq, x1);
axis([-1 13 -0.1 2.1])
title('线性卷积结果')

        注意卷积前后的序列长度,还是很容易的。

2. 求序列x_{1}(n)=\left \{ 1,2,3,4,5 \right \}(0\leq n\leq 4)x_{2}(n)=\left \{ -1,3,0,-2,-2,1 \right \}(0\leq n\leq 5)的线性卷积和6点、10点以及12点循环卷积,画出线图并总结出线性卷积和循环卷积的关系。

        循环卷积是周期卷积的一种。不同于线性卷积,循环卷积考虑到的周期信号的周期边界,更适合处理周期性信号。通常可以利用DFT的循环卷积性质,计算DFT来实现循环卷积。

%% 任务二

x2_1(1:5) = [1 2 3 4 5];
x2_2(1:6) = [-1 3 0 -2 -2 1];   %设置序列内容
y2 = conv(x2_1, x2_2);  %线性卷积

yc6 = ifft(fft(x2_1, 6) .* fft(x2_2, 6));   %6点循环卷积
yc10 = ifft(fft(x2_1, 10) .* fft(x2_2, 10));%10点循环卷积
yc12 = ifft(fft(x2_1, 12) .* fft(x2_2, 12));%12点循环卷积

figure
subplot(2,3,1)
stem(1:5, x2_1);
axis([0 6 0 6])
title('序列x1(n)')

subplot(2,3,2)
stem(1:6, x2_2);
axis([0 7 -3 5])
title('序列x2(n)')

subplot(2,3,3)
stem(1:10, y2);
axis([0 11 -16 16])
title('线性卷积结果')

subplot(2,3,4)
stem(1:6, yc6);
axis([0 7 -16 16])
title('6点循环卷积结果')

subplot(2,3,5)
stem(1:10, yc10);
axis([0 11 -16 16])
title('10点循环卷积结果')

subplot(2,3,6)
stem(1:12, yc12);
axis([0 13 -16 16])
title('12点循环卷积结果')

        循环卷积结果序列的长度是可以指定的:n点循环卷积的结果序列长度就是n。

3.3 实验步骤

1. 实验内容1的程序运行结果如下图所示:

2. 实验内容2的程序运行结果如下图所示:

          这两部分就不展示了,与本人画出的结果大同小异。

3.4 实验思考题

1.写出线性卷积和的公式,简述线性卷积和的计算过程。

        线性卷积公式:y(n)=\sum_{k=-\infty }^{\infty }x_{1}(k)\cdot x_{2}(n-k)。将卷积序列翻转并平移,与被卷积序列按位遍历相乘并相加。

2.写出循环卷积和的公式,简述循环卷积和的计算过程。

        循环卷积公式:y(n)=\sum_{k=0 }^{N-1 }x_{1}(k)\cdot x_{2}((n-k) modN)。将有限长的两序列扩展成周期为N的周期序列,其中的卷积序列翻转并平移,在一个周期内与被卷积序列按位遍历相乘求余并相加,得到定长的离散序列。

结论

        全文全部是本人一个人完成,存在错误,允许指正,不允许因为本人专业程度低而出现对本人的诋毁、骂人等现象。

        技术是开拓、完善、传承的过程。开拓的过程是艰苦,完善的过程是漫长的,传承的过程是延续的。愿技术能在传承的基础上开拓,能在开拓的道路上完善,能在完善的成果中继承,生生不息,永无止尽!

        感谢阅读。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值