写在前面:本文中所有的matlab代码已整理,见下载资源“DSP_matlab.zip”。
数字信号处理之MATLAB实验代码整理
1 常用的离散时间信号(DSP1_DiscreteTimeSignals.m)1)单位样本序列2)单位阶跃序列3)实指数序列4)复指数序列5)正弦序列6)随机序列
2 序列运算(DSP2_SequenceOperation.m)1)信号相加2)信号相乘3)信号加权4)信号移位5)信号反转6)信号卷积7)实验一_1:对信号进行加权、平移、反褶等基本运算操作8)实验一_2(主要看自编卷积的过程):
3 连续时间信号(见DSP3_ContinuousTimeSignalsSpectrumAnalysis.m)1)周期信号傅里叶级数(以周期方波信号的求解为例)2)非周期信号的傅里叶级数(以一个[-2,2]上的分段函数为例)3)实验二_1:
4 Z变换(见DSP4_ZTransform.m)1)求离散时间系统的Z变换乘积2)部分分式法:求X(z)的部分展开式3)实验三_3 :计算零极点与系统稳定性
5 LTI系统的频域分析(见DSP5_LTISpectrumAnalysis.m)1) 根据h(n)求系统频域响应H(exp(j*w))的幅度响应和相位响应2)实验四_1(问题a和上面的差不多,主要看问题b):3)实验四_2(典型例题):
6 简单滤波器设计(见DSP6_SimpleFilterDesign.m)1)设计一个高通滤波器,滤去低频分量
7 信号的采样和重建1)对信号x(t)进行采样和重建
8 信号DFT的计算1)用DFT计算有限长余弦信号的频谱
9 加窗对信号频谱分析影响1)在DFT对信号进行频谱分析时,分别加矩形窗和海明窗
10 数字滤波器结构1)实现IIR滤波器的级联型和并联型结构
11 FIR数字滤波器的设计1)用窗函数法设计FIR数字滤波器:2)频率取样法设计FIR数字滤波器
12 IIR数字滤波器的设计1)用模拟滤波器(这里分别用巴特沃斯、切比雪夫I型、椭圆型)转换数字滤波器的方法(脉冲响应不变法和双线性变换法)
1 常用的离散时间信号(DSP1_DiscreteTimeSignals.m)
1)单位样本序列
n1 = -2; n2 = 5;
n0 = 1;
n = [n1:n2]; % n1和n2是序列n的上下界
x = [(n-n0)==0]; % 给处置序列[],只有当(n-n0)==0时值才为1
stem(n,x); % 自变量写前面
2)单位阶跃序列
n1 = -2; n2 = 5;
n0 = 1;
n = [n1:n2];
x = [(n-n0)>=0]; % 只有当(n-n0)>=0时值才为1
stem(n,x);
3)实指数序列
% 实现x(n) = a^n
n = [0:10];
x = (0.9).^n; % 在含有数组的乘、除、乘方运算时需要点乘,表示对应运算
stem(n,x);
4)复指数序列
% 实现x(n) = e^((a+bj)*n)
a = 2; b = 3; % a表示实部,b表示虚部
n = 1:10;
x = exp((a+b*j)*n);
% 取实部,幅度谱
figure(1); stem(n,real(x));
% 取虚部,幅度谱
figure(2); stem(n,imag(x));
% 计算总幅度,画出幅度谱
AmpX = sqrt(real(x).^2 + imag(x).^2); % 计算总幅度方法一
AmpX = abs(x); % 计算总幅度方法二
figure(3); stem(n,AmpX);
% 计算相位,画出相位谱
AngleX = angle(x);
figure(4); stem(n,AngleX);
5)正弦序列
A1 = 3; w1 = 0.1*pi; b1 = pi/3;
A2 = 2; w2 = 0.5*pi; b2 = 0;
n = [0:10];
x = A1*cos(w1*n+b1) + A2*sin(w2*n+b2);
stem(n,x);
6)随机序列
N = 10;
x = randn(1,N); % 注意中间是逗号,第一个参数必须是1,表示在[1:N]产生标准正态分布随机序列
stem(x); % 不用输入自变量n
2 序列运算(DSP2_SequenceOperation.m)
1)信号相加
function[y,n] = sigadd(x1,n1,x2,n2)
% 两个序列分别为x1和x2,对应的自变量为n1和n2
% 运算结果为y,对应的自变量为n
n = min( min(n1),min(n2) ):max( max(n1),max(n2) );% 输出自变量取输入中最小和最大的
% y1和y2是将输入序列x1和x2的自变量范围扩大到n,因变量不变
y1 = zeros(1,length(n)); % 1×length(n)的矩阵,即一维数组
y2 = y1;
y1( find((n>=min(n1)) & (n=min(n2)) & (n=min(n1)) & (n=min(n2)) & (n=nh(1) && t |