事先声明,代码与图像仅供参考,如需要源文件可以去主页寻找相关资源。
本次实验包含3个实验题目:
题目一:
已知下述序列为有限长序列,
其中X(k)=[1,2,1,1,0]
h(k)=[1 ,-1, 1]
计算离散卷积和:y(k)=X(k) * h(k)
题目二:
利用MATLAB实现对于信号X(t)=cos( 2Π * 20t) 的抽样函数图像
题目三:
已知序列[X(k)]={1,1,1},对其频谱X(e^jΩ)进行抽样,
分别取N=2,3,10,观察频域抽样造成的混叠现象
那么我们开始分析并且在MATLAB R2022A上面绘制实现相关的题目图像:
问题一:
计算离散卷积和,我们首先应该知道对于MATLAB中的语言中,计算卷积的函数语言是CONV()。之后需要对于序列进行定义,即可实现。
对于离散卷积和,
也称为离散卷积或序列卷积,是在数字信号处理和相关领域中一个重要的概念。它是两个离散序列(或信号)通过特定的数学运算相互作用的结果。
形式化地,设有两个离散序列x[n]和h[n],它们的长度分别为N和M,那么它们的离散卷积和y[n]可以通过以下公式计算:
y[n] = Σ(x[m] * h[n-m])
这个公式表示对于每个n值,需要将x[m]序列与h[n-m]序列(h[n-m]是h[n]序列在时间上向右移动m个单位得到的)对应元素相乘,然后将所有这些乘积求和。
离散卷积和的一些重要性质包括:
- 卷积运算满足结合律和交换律(但不满足分配律)。
- 卷积运算可以用来描述线性时不变系统(LTI系统)对输入信号的响应。
- 对于因果系统,其冲击响应h[n]为零当n小于0时,离散卷积和的计算范围可以限制在非负n值上。
在MATLAB等编程环境中,可以使用内置的conv()
函数来方便地计算离散卷积和。离散卷积在许多应用中都很重要,如滤波、信号恢复、系统分析和图像处理等。
所以对于本题来说,参考代码如下:
%计算序列卷积
clear all
close
clc
x=[1,2,1,1,0];
h=[1,-1,1];
y=conv(x,h);
stem(y,"filled",'c');
grid on;
axis([0,8,-1,3]);
xlabel('k');ylabel('y(k)=x(k)*h(k)');
title('y(k)=x(k)*h(k)');
参考图像如下所示:
问题二:
对于抽样函数的图像绘制,首先定义参数与相关的连续信号,进行抽样,绘制出抽样信号,之后设置相关的范围与刻度,添加图例即可。
对于抽样函数的定义:
抽样函数通常指的是在信号处理和数字通信中使用的特定函数,用于描述对连续信号进行离散抽样的过程。最常提到的抽样函数是理想抽样函数,它在数学上可以表示为一个单位阶跃函数与正弦或余弦函数的乘积。
理想抽样函数S(t)的定义如下:
S(t) = Π(t / T_s)
其中,Π(x) 是单位阶跃函数(当x >= 0时为1,否则为0),t 是时间变量,T_s 是抽样周期,它的倒数 f_s = 1/T_s 是抽样频率。
这个函数表示每隔T_s时间间隔对连续信号进行一次采样,采样瞬间值等于连续信号在该时刻的值。在实际应用中,由于硬件限制,理想的单位阶跃抽样函数通常被近似为具有有限上升时间和下降时间的脉冲形状,如矩形脉冲或者其他类型的脉冲。
另外,有时也会提到 sinc 函数(sinc(x) = sin(πx) / (πx))作为与抽样相关的函数,尤其是在讨论理想抽样定理和频域采样时。sinc 函数在频域中表现为一个带限的冲击响应,与理想抽样过程的频域特性密切相关。但它并不直接被称为抽样函数,而是在分析和处理抽样过程的数学工具中起到重要作用。
故而本题的参考代码如下:
%抽样过程函数
clear all
close
clc
t=(0:0.00001:0.1);
fs=800; %采样频率
N=50; %定义采样点数
dt=1/(N*10); %采样间隔
% dt=1/fs; %采样间隔
T=(0:N-1)*dt; %定义采样的每个时间点
x1=cos(2*pi*20*T);
subplot(3,1,1);
plot(t,cos(2*pi*20*t));
grid on;
axis([0,0.1,-1.25,1.25]);
title('原始信号')
subplot(3,1,2)
plot(t,cos(2*pi*20*t),T,x1,'ro');
grid on;
axis([0,0.1,-1.25,1.25]);
title('采样过程')
subplot(3,1,3)
stem(T,x1,"filled",'r');
axis([0,0.1,-1.25,1.25]);
xlabel('时间/s')
title('抽样后的信号')
grid on;
%抽样结果函数
f=100;T=1/f;%频率 时间
t=-0.5:0.0001:0.5;
n=-0.5:T:0.5;
xt=cos(2*pi*20*t);%原信号
xn=cos(2*pi*20*n);%采样信号
plot(t,xt,'b');
hold on;
stem(n,xn,"filled",'r');
xlabel('时间/s')
参考图像如下所示:
抽样过程图像
抽样结果函数图像
问题三:
观察频域抽样造成的混叠现象,其相关定义如下:
频域抽样造成的混叠现象是数字信号处理中的一个重要概念,它发生在对模拟信号进行采样并转换为数字信号的过程中。
根据奈奎斯特定理,为了准确无失真地恢复原始的模拟信号,采样频率必须大于或等于信号最高频率的两倍。这个最高频率通常被称为奈奎斯特频率,记为f_N = f_s/2,其中f_s是采样频率。
如果信号中包含的频率成分高于奈奎斯特频率(即高于f_s/2),那么在进行频域抽样(也就是进行傅里叶变换)时,这些高频成分将会折叠到频域的0到f_s/2范围内,这种现象就称为混叠(Aliasing)。
混叠会导致以下问题:
1. 信息丢失:由于高频成分被错误地映射到了低频区域,原始信号的部分信息可能会丢失,使得恢复出的信号与原始信号有差异。
2. 干扰和误判:混叠的高频成分可能与其他原本位于低频区域的信号成分混淆,导致分析和处理结果出现错误。
为了避免混叠现象,通常需要在采样前对模拟信号进行低通滤波,以去除高于奈奎斯特频率的高频成分。这种方法称为抗混叠滤波。另外,也可以通过提高采样频率来减少混叠的影响,但这可能会增加数据量和处理复杂性。
在MATLAB等工具中,可以通过模拟信号生成、采样和傅里叶变换等操作来直观地观察和理解频域抽样造成的混叠现象。
本题参考代码如下:
clear all
close
clc
figure;
x=[1,1,1];
n=1000;
w=[0:n-1]*2*pi/n;
X=fft(x,n);
subplot(2,1,1);
plot(w,abs(X));
hold on ;
N=2;
wn=[0:N-1]*2*pi/N;
Xn=[];
for i=0:N-1
Xn=[Xn,X(1+fix(i*n/N))];
end
stem(real(wn),abs(Xn));
x1=ifft(Xn);
subplot(2,1,2);
stem([0:N-1],x1);
figure;
x=[1,1,1];
n=1000;
w=[0:n-1]*2*pi/n;
X=fft(x,n);
subplot(2,1,1);
plot(w,abs(X));
hold on ;
N=3;
wn=[0:N-1]*2*pi/N;
Xn=[];
for i=0:N-1
Xn=[Xn,X(1+fix(i*n/N))];
end
stem(wn,abs(Xn));
x1=ifft(Xn);
subplot(2,1,2);
stem([0:N-1],real(x1));
figure;
x=[1,1,1];
n=1000;
w=[0:n-1]*2*pi/n;
X=fft(x,n);
subplot(2,1,1);
plot(w,abs(X));
hold on ;
N=10;
wn=[0:N-1]*2*pi/N;
Xn=[];
for i=0:N-1
Xn=[Xn,X(1+fix(i*n/N))];
end
stem(wn,abs(Xn));
x1=ifft(Xn);
subplot(2,1,2);
stem([0:N-1],x1);
参考图像如下所示:
N=2图像
N=3图像
N=10图像
好的本次实验完整结束,结果仅供参考,源代码文件参考主页资源,感觉大家观看,请动动发财的小手,点点赞,一起加油努力,学习就像攀登高峰,虽然过程艰难,但每一步都会让你看到更广阔的风景。