数字信号处理实验

实验一 MATLAB基础
(标题,宋体四号,加粗,2倍行距,居中,大纲1级,段前1行段后0.5行)
1.MATLAB的启动 (宋体小四,加粗,21磅行距,左对齐,大纲2级,段前0.5行,悬挂2字符)
有多种方式可启动MATLAB,最常用的方法就是双击系桌面的MATLAB图标,也可以在开始菜单的程序选项中选择MATLAB快捷方式。
初次启动MATLAB后,将进入MATLAB默认设置的桌面平台。(宋体小四,21磅行距,两端对齐,正文文本,首行2字符)
2.桌面平台
默认设置情况下的桌面平台包括6个窗口,分别是MATLAB主窗口、命令窗口、历史窗口、当前目录窗口、发行说明书窗口和工作间管理窗口。
3. 实验心得(实验心得内容全部手写完成!)
(1)实验内容(对实验内容进行阐述,具体描述掌握的知识及自己的操作学习过程,不少于200字)
1.MATLAB程序编辑/调试器(编写算法程序的地方)
在MATLAB的命令窗口中有3种方式可进入程序编辑/调试器
(1)选择菜单栏的“File”项中的“New”或“Open”项。
(2)选择工具栏的“New”或“Open”项。
(3)在命令窗口中输入edit命令。
MATLAB的程序类型有以下三种
(1)脚本M文件
(2)程序M文件
(3)函数M文件(常称为M函数)
2.MATLAB帮助系统
(1)单击MATLAB主窗口菜单的“Help”|“Demos”选项,或在命令窗口输入demo,将进入MATLAB的演示界面。
(2)命令窗口查询帮助有“help+关键词”,显示所有帮助说明;“lookfor+关键字”,查询相关函数等。
3.变量
(1)变量的命名
(2)一些特殊的变量
ans:用于结果的缺省变量名;
i、j:虚数单位;
pi:圆周率;
nargin:函数的输入变量个数;
eps:计算机的最小数;
nargout:函数的输出变量个数;
inf:无穷大;
nan:不定量。
4.向量的生成
由冒号运算符生成:A=初值:增值:终值
5.矩阵的生成
(1)在命令窗口中直接输入
(2)由多个向量生成矩阵
(3)一些常用的特殊矩阵
单位矩阵:eye(m,n);eye(m);
零矩阵:zeros(m,n);zero(m);
一矩阵:ones(m,n);ones(m);
对角矩阵:对角元素向量V=[a1,a2,…an],A=diag(V);
随机矩阵:rand(m,n)产生一个mn均匀分布的随机矩阵,如Y=randn(m,n)%生成mn正态分布随机矩阵
6.矩阵运算
矩阵的四则运算,运算符有+、-、、\、.\、/、./、、.、’和.’
7.基本平面图形绘制命令plot的调用格式
(1)plot(X,Y)
(2)plot(Y)
(3)plot(X1,Y1,X2,Y2,…)
(4)plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2,…)
8.二维图形注释命令
(1)axis(V)
(2)grid on
(3)title(‘string’)
(4)text(x,y,’string’)
(5)xlabel(‘string’)、ylabel(‘string’)
(6)[x,y]=ginput(n)
(7)gtext(‘string’)
(8)hold on/off
(9)plotyy(x1,y1,x2,y2)
(10)多子图,subplot
(11)syem
(2)实验收获及总结(不少于150字)
通过本次实验在原有的matlab基础上加深了对于matlab的认知,复习了各种二维矩阵的运算,掌握了一些新的命令,对于matlab绘图有了更深刻的理解,同时对于函数文件的编写有了更加深刻的印象。复习了matlab的窗口使用,对于基本上的matlab知识掌握更加熟练,同时编写了很多脚本文件,掌握了很多特殊变量,运用注释将程序的可读性有了进一步的提高。
实验二 信号的表示 (前一页末尾插入分页符)
1.实验目的 (标号重新开始于1)
1.了解MATLAB程序设计语言的基本特点,熟悉MATLAB软件运行环境。
2.掌握各种信号的建模方式。
3.掌握各种信号的图形表示方法。
4.掌握变量等有关概念,具备初步的将一般数学模型转化为对应的计算机模型并进行处理的能力。
2.实验设备
PC机
MATLAB7.0软件
3.实验内容
学习使用MATLAB7.0软件;学习信号的图形表示方法;掌握各种信号的建模方式;实现单位采样序列δ(n)、单位阶跃序列u(n)、矩形序列Rg(n)、三角波、方波、锯齿波、Sinc函数。
4.思考题
(1)实现单位采样序列δ(n)、单位阶跃序列u(n)、矩形序列Rg(n),并用图形显示。写出程序及输出图形。
单位采样序列δ(n)
n=-5:10;
y=[zeros(1,5),1,zeros(1,10)];
stem(n,y);
axis([-5,10,0,2]);
title(‘单位采样序列’);
在这里插入图片描述
单位阶跃序列u(n)
n=-5:10;
y=[zeros(1,5),ones(1,11)];
stem(n,y,‘r’);
axis([-5,10,0,2]);
title(‘单位阶跃序列u(n)’)
在这里插入图片描述
矩形序列Rg(n)
n=-5:10;
y=[zeros(1,5),ones(1,5),zeros(1,6)];
plot(n,y,‘b’);
stem(n,y,‘b’);
axis([-5,10,0,2]);
title('矩形序列Rg(n ');
在这里插入图片描述
(2) 实现三角波、方波、锯齿波、Sinc函数,并用图形显示。写出程序及输出图形。
三角波
x=0:0.01:1
y=abs(sawtooth(10
pi*(x+0.05),0.5));
plot(x,y,‘m’);
axis([0,1,0,2])
title(‘三角波’);
在这里插入图片描述
方波
x=-2pi/100:pi/1024:2pi/100;
y=square(2pi30x,60);
plot(x,y,‘y’);
title(方波’’);
ylim([-1.5,1.5]);
在这里插入图片描述
锯齿波
x=0:0.01:1
y=sawtooth(10
pi*(x+0.05),1);
plot(x,y,‘y’);
axis([0,1,-2,2])
title(‘¾â³Ý’);
在这里插入图片描述
Sinc函数
y=sinc(x);
plot(x,y,‘k’);
title(‘sincº¯Êý’);
在这里插入图片描述
实验三 FFT频谱分析及应用
1.实验目的
1.通过实验加深对FFT的理解。
2.熟悉应用FFT对典型信号进行频谱分析的方法。
2.实验设备
PC、MATLAB7.0软件
3.实验内容
使用MATLAB程序实现信号频域特性的分析。涉及离散傅里叶变换(DFT)、快速傅里叶变换(FFT)及信号频率分辨率等知识点。
4.思考题
被噪声污染的信号,比较难看出所包含的频率分量,如一个有50Hz和120Hz正弦信号构成的信号,受零均值随机噪声的干扰,数据采样率为1000Hz,试用FFT函数来分析其信号频率成分,要求:
画出时域波形;
分析信号功率谱密度;
t=0:0.001:0.8;
x=sin(2pi50t)+cos(2pi120t);
y=x+1.5*randn(1,length(t));
subplot(3,1,1);plot(t,x);
subplot(3,1,2);plot(t,y);
Y=fft(y,512);
P=Y.conj(Y)/512;
f=1000
(0:255)/512;
subplot(3,1,3);plot(f,P(1:256));
title(‘FFT N=512’);
xlabel(‘频率(单位:Hz)’);
ylabel(‘P’);
在这里插入图片描述
实验四 信号的运算-卷积
1.实验目的
1.掌握信号的线性卷积运算。
2.掌握信号的循环卷积运算。
3.信号的循环卷积计算线性卷积的条件。
2.实验设备
PC、MATLAB7.0软件
3.实验内容
学习使用MATLAB7.0软件进行建模;学习信号卷积运算的MATLAB实现;实现信号的线性卷积运算、应用DFT实现线性卷积运算、验证循环卷积计算线性卷积的条件。
4.思考题
1.如果信号x(n)=x1(n)*x2(n)利用线性卷积计算。用conv函数实现如下:y=conv(x1,x2)。
function y = circonvt(x1,x2,N)
if(length(x1)>N||length(x2)>N)
error(‘N必须大于等于x的长度’);
end
x1=[x1 zeros(1,N-length(x1))];
x2=[x2 zeros(1,N-length(x2))];
x1=fft(x1,N);x2=fft(x2,N);x=x1.*x2;
y=ifft(x,N);y=real(y);
end
circonvt( [1 5 4],[4 2 5],4)
在这里插入图片描述
2.假设卷积下面信号

选定循环卷积的长度为N=21,确定y1(n)=x(n)h(n)的哪些数值与线性卷积y2(n)=x(n)*h(n)结果中的数值相同。编写代码并输出图形,分析错误数据的原因,怎样才能使两者数据相同。
function y = circonvt(x1,h,N)
if(length(x1)>N||length(h)>N)
error(‘N必须大于等于x的长度’);
end
x1=[x1 zeros(1,N-length(x1))];
h=[h zeros(1,N-length(h))];
x1=fft(x1,N);h=fft(h,N);x=x1.*h;
y=ifft(x,N);y=real(y);

n1=0:1:12;
x1=0.9.^n1;
h=ones(1,12);
h=[zeros(1,9) h];
N=length(x1)+length(h)-1;
n=0:N-1;
ny=0:20;
y1=circonvt(x1,h,21);
y2=circonvt(x1,h,N);
x1=[x1 zeros(1,N-length(x1))];
h=[h zeros(1,N-length(h))];
X1=fft(x1,N);
H=fft(h,N);
X=X1.*H;
x=ifft(X);
x=real(x);
subplot(2,2,1);stem(n,x1);title(‘x1(n)’);axis([0,33,0,1]);
subplot(2,2,2);stem(n,h);title(‘h(n)’);axis([0,33,0,1]);
subplot(2,2,3);stem(ny,y1,‘fill’);title(‘21点循环卷积’);axis([0,33,0,8]);
hold on;
subplot(2,2,4);stem(n,x);title(‘线性卷积’);axis([0,33,0,8]);
subplot(2,2,3);stem(n,x,‘r’,’–’);axis([0,33,0,8]);
hold off;
在这里插入图片描述
3.已知系统响应为h(n)=sin(0.2n)+cos(0.5n) 0<=n<20,输入为x(n)=exp(0.2n) 0<=n<10,画出用DFT方法实现求系统输出的系统框图, 编写用DFT实现的程序代码并输出图形。
function [ y] = circonvt(x1,x2,N )
if(length(x1)>N|length(x2)>N)
error(‘N必须大于等于x的长度’);
end
x1=[x1 zeros(1,N-length(x1))];
x2=[x2 zeros(1,N-length(x2))];
X1=fft(x1,N);X2=fft(x2,N);X=X1.*X2;
y=ifft(X,N);y=real(y);

n1=0:1:19;
hn=sin(0.2n1)+cos(0.5n1);
n2=0:1:9;
xn=exp(0.2*n2);
N=length(xn)+length(hn)-1;
n=0:N-1;
ny=0:20;
y1=circonvt(xn,hn,21);
y2=circonvt(xn,hn,N);
xn=[xn zeros(1,N-length(xn))];
hn=[hn zeros(1,N-length(hn))];
X1=fft(xn,N);
H=fft(hn,N);
X=X1.*H;
x=ifft(X);
x=real(x);
subplot(2,2,1);stem(n,xn);title(‘xn(n)’);axis([0,33,0,5]);
subplot(2,2,2);stem(n,hn);title(‘hn(n)’);axis([0,33,-2,2]);
subplot(2,2,3);stem(ny,y1,‘fill’);title(‘21点循环卷积’);axis([0,33,-20,30]);
hold on;subplot(2,2,4);stem(n,x);title(‘线性卷积’);axis([0,33,-20,30]);
subplot(2,2,3);stem(n,x,‘r’,’–’);axis([0,33,-20,30]);
hold off;
在这里插入图片描述
实验五:线性卷积的快速处理方法-重叠相加法
1.实验目的
1.掌握线性卷积的正确处理方法-重叠相加法的原理。
2.掌握线性卷积的正确处理方法-重叠相加法的实现方法。
3.通过实验和分析深入了解重叠相加法。
2.实验设备
PC、MATLAB7.0软件
3.实验内容
学习使用MATLAB7.0软件进行建模;学习重叠相加法的基本原理;学习重叠相加法的MATLAB实现;实现信号的重叠相加法运算;通过与卷积运算进行对比,比较其浮点运算次数及消耗的时间。
4.思考题
编写一个实现块卷积重叠相加法的M文件函数,该函数的输入之一应是段的长度M或是FFT的长度。卷积运算应在DFT域中进行。最终,这将会使程序最快的运行。
function y = text(x,h,Nfft)
H=fft(h,Nfft);
M=Nfft-length(h)+1;
for ix=1:M:length(x)
x_seg=x(ix:ix+M-1);
X=fft(x_seg,Nfft);
Y=X.*H;
y_seg=ifft(Y);
y(ix:ix+M-1)=y(ix:ix+M-1)+y_seg(1:Nfft);
end
y=ifft(Y,Nfft);
ifany(imag(h))&&any(imag(x))
y=rear(y);
end

n1=0:1:19;
hn=sin(0.2n1)+cos(0.5n1);
n2=0:1:9;
xn=exp(0.2n2);
z=conv(hn,xn);
N=length(xn)+length(hn)-1;
hn=[hn zeros(1,N-length(hn))];
R=length(xn);
M=length(hn);
y=fftfilt(xn,hn,8);
k1=1:length(y);
k=1:N;
plot(k1,y,‘b-o’,k,z,‘g-x’)
xlabel(‘time’)
ylabel(‘amplitude’)
legend(‘y[n]’,‘z[n]’)
在这里插入图片描述
实验六:线性卷积的快速处理方法-重叠保留法
1.实验目的
1.掌握线性卷积的正确处理方法-重叠保留法的原理。
2.掌握线性卷积的正确处理方法-重叠保留法的实现方法。
3.通过实验和分析深入了解重叠保留法。
2.实验设备
PC、MATLAB7.0软件
3.实验内容
学习使用MATLAB7.0软件进行建模;学习重叠保留法的基本原理;学习重叠保留法的MATLAB实现;实现信号的重叠保留法运算;通过与卷积运算进行对比,比较其浮点运算次数及消耗的时间。
4.思考题
1.通过couv函数来测试此函数的正确性。考虑使用下面信号
x(n)= h(n)=
function y = circonvt(x,h,N)
if(length(x)>N||length(h)>N)
error(‘N必须大于等于X的长度’);
end
x=[x zeros(1,N-length(x))];
h=[h zeros(1,N-length(h))];
X=fft(x,N);
H=fft(h,N);
X1=X.H;
y=ifft(X1,N);
y=real(y);
end
function y = ovrlpsav( x,h,N )
Lenx=length(x);
M=length(h);
if N<M
N=M+2
end
M1=M-1;
L=N-M1;
h=[h,zeros(1,N-M)];
x=[zeros(1,M1),x,zeros(1,N-1)];
K=floor((Lenx+M-1)/(L));
Y=zeros(K+1,N);
for k=0:K
xk=x(k
L+1:k
L+N);
Y(k+1,:)=circonvt(xk,h,N);
end
Y=Y(:,M:N)’;
y=(Y(😃)’;
end
xn=ones(1,17);
n1=0:1:100;
hn=sin(n1*pi/13);
z=conv(hn,xn);
N=length(xn)+length(hn)-1;
hn=[hn zeros(1,N-length(hn))];
R=length(xn);
M=length(hn);
y=ovrlpsav(xn,hn,10);
k1=1:length(y);
k=1:N;
plot(k1,y,‘b-o’,k,z,‘g-x’);
title(‘x(n)和h(n)的循环卷积图像’);
xlabel(‘n’);
ylabel(‘y’);
在这里插入图片描述
在这里插入图片描述

实验七:IIR数字滤波器的设计
1.实验目的
1.掌握脉冲响应不变法和双线性不变法设计IIR数字滤波器的原理和方法。
2.观察双线性变换法和脉冲响应不变法设计的滤波器的频域特性,了解双线性变换法和脉冲响应不变法的特点和区别。
2.实验设备
PC、MATLAB7.0软件
3.实验内容
学习使用MATLAB7.0编写程序,实现IIR数字滤波器的设;设计脉冲响应不变法和双线性变换法设计IIR数字滤波器的方法、不同设计方法得到的IIR滤波器频域特性异同等知识点。
4.思考题
1.查看帮助文件,了解相关函数的调用格式。
2.用双线性变换法设计一个Chebyshev1型数字带通滤波器,设计指标为,T=1ms,Rp=1dB,Wp1=0.35Π,Wp2=0.65Π,Rs=60dB, Ws1=0.2Π,Ws2=0.8Π
按实验步骤附上所设计滤波器的H(z)及相应的幅频特性曲线定性分析得到的图形,判断设计是否满足要求。
Ts=0.001;
Fs=1/Ts;
Rp=1;Rs=60;
wp1=0.35pi;
wp2=0.60
pi;
ws1=0.2pi;
ws2=0.8
pi;
Wp1=(2/Ts)*tan(wp1/2);
Wp2=(2/Ts)tan(wp2/2);
Wp=[Wp1,Wp2];
Ws1=(2/Ts)tan(ws1/2)
Ws2=(2/Ts)tan(ws2/2);
Ws=[Ws1,Ws2];
BW=Wp2-Wp1;
Omegaw0=sqrt(Wp1
Wp2);
[N,OmegaC]=cheb1ord(Wp,Ws,Rp,Rs,‘s’);
[z0,p0,k0]=cheb1ap(N,Rp);
AnalogB=k0
real(poly(z0));
AnalogA=real(poly(p0));
[BandB,BandA]=lp2bp(AnalogB,AnalogA,Omegaw0,BW); [DigitalB,DigitalA]=bilinear(BandB,BandA,Fs); [sos,G]=tf2sos(DigitalB,DigitalA);
[Hz,Wz]=freqz(DigitalB,DigitalA,1024,‘whole’); dbHz=20
log10((abs(Hz)+eps)/max(abs(Hz))); grd=grpdelay(DigitalB,DigitalA,Wz);
subplot(2,2,1);
plot(Wz/pi,abs(Hz));
title(‘幅频响应’);
xlabel(’’),ylabel(‘幅度:|Hz|’);
axis([0,1,0,1.1]);
set(gca,‘XTickMode’,‘manual’,‘XTick’,[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
grid;
subplot(2,2,4);
plot(Wz/pi,dbHz);
title(‘模值(dB)’);
xlabel(‘频率(单位:\pi)’);
ylabel(‘分贝(dB)’);
axis([0,1,-40,5]);
set(gca,‘XTickMode’,‘manual’,‘XTick’,[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
set(gca,‘YTickmode’,‘manual’,‘YTick’,[-50,-30,-2,0]);
grid;
subplot(2,2,2);
plot(Wz/pi,angle(Hz)/pi); title(‘相频响应’);
xlabel(’’);
ylabel(‘单位:\pi’);
axis([0,1,-1,1]);
set(gca,‘XTickMode’,‘manual’,‘XTick’,[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
grid;
subplot(2,3,3);
plot(Wz/pi,grd);
title(‘群延迟’);
xlabel(‘频率(单位:\pi)’); ylabel(‘样本’);
axis([0,1,0,8]);
set(gca,‘XTickMode’,‘manual’,‘XTick’,[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
set(gca,‘YTickmode’,‘manual’,‘YTick’,[0:0.5:10]);
grid;
set(gcf,‘color’,‘w’);
在这里插入图片描述
实验八 FIR数字滤波器的设计

  1. 实验目的
    (1)掌握用窗函数法和频率采样法设计FIR数字滤波器的原理和方法。
    (2)数字线性相位FIR滤波器的幅频特性的相频特性。
    (3)了解不同窗函数对滤波器性能的影响。
  2. 实验设备
    PC,MATLAB7.0
  3. 实验内容
    使用MATLAB编写程序,实验FIR数字滤波器的设计;涉及窗函数法和频率采样法设计FIR数字滤波器的方法,线性相位FIR滤波器的幅频特性和相频特性的特点,窗函数选择及对滤波器性能的影响等知识点。
  4. 思考题
    (1)用Blackman窗设计一个数字带通滤波器,设计指标为Rp=1dB,Wp1=0.35π,Wp2=0.65π,Rs=60dB,Ws1=0.2π,Ws2=0.8π。
    答:
    ws1=0.2pi;
    wp1=0.35
    pi;
    wp2=0.65pi;
    ws2=0.8
    pi;
    tr_width=min((wp1-ws1),(ws2-wp2));
    %N=ceil(11pi/tr_width)+1;
    N=ceil(11
    pi/tr_width);
    n=[0:1:N-1];
    wc1=(ws1+wp1)/2;
    wc2=(ws2+wp2)/2;
    hd=ideal_lp(wc2,N)-ideal_lp(wc1,N);
    w_black=(blackman(N))’;
    h=hd.w_black;
    [dB,mag,pha,grd,w]=freqz_m(h,[1]);
    delta_w=2
    pi/1000;
    w_center=(wp1+wp2)/2;
    Rp1=-(min(dB(wp1/delta_w+1:w_center/delta_w+1)));% actual passband ripple
    As1=-round(max(dB(1:1:ws1/delta_w+1))); % Min stopband attenuation
    Rp2=-(min(dB(w_center/delta_w+1:wp2/delta_w+1)));% actual passband ripple
    As2=-round(max(dB(ws2/delta_w+1:1:501))); % Min stopband attenuation
    %plots
    subplot(2,2,1);
    stem(n,hd);
    title(’ 理想脉冲响应 ‘);
    axis([0,N-1,-0.3,0.38]);
    xlabel(‘n’);
    %set(gca,‘YTickMode’,‘manual’,‘YTick’,[0,0.1,0.2,0.3]);
    subplot(2,2,2);
    stem(n,w_black);
    title(‘Blackman 窗’);
    axis([0,N-1,0,1.1]);
    xlabel(‘n’);
    subplot(2,2,3);
    stem(n,h);title(’ 实际脉冲响应 ‘);
    axis([0,N-1,-0.3,0.38]);xlabel(‘n’);
    %set(gca,‘YTickMode’,‘manual’,‘YTick’,[0,0.1,0.2,0.3]);
    subplot(2,2,4);
    plot(w/pi,dB);title(‘幅频响应:dB’);
    grid;axis([0,1,-80,0]);
    xlabel(‘pi’);ylabel(‘dB’);
    set(gca,‘XTickMode’,‘manual’,‘XTick’,[0,0.2,0.35,0.65,0.8,1.0]);
    部分功能函数:
    function hd=ideal_lp(wc,N);
    alpha=(N-1)/2;
    n=0:1:N-1;
    m=n-alpha+eps;
    hd=sin(wcm)./(pim);
    函数freqz_m:
    function [dB,mag,pha,grd,w]=freqz_m(b,a)
    [H,w]=freqz(b,a,1000,‘whole’); % w ranging from 0 to 2pi radians per sample.
    H=(H(1:501))’;
    w=(w(1:501))’;mag=abs(H);
    dB=20*log10((mag+eps)/max(mag));
    pha=angle(H);grd=grpdelay(b,a,w);
    在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章