华南理工大学数字信号处理matlab实验(1)
- 格式:docx
- 大小:327.37 KB
- 文档页数:13
第一章离散时间信号的频域分析P1.1 单位样本和单位阶跃序列%程序P1_1%一个单位序列的产生clf;%产生从-10到20的一个向量n=-10:20;%产生单位样本序列u=[zeros(1,10) 1 zeros(1,20)];%绘制单位样本序列stem(n,u);xlabel('时间序号n');ylabel('振幅');title('单位样本序列');axis([-10 20 0 1.2]);1.1运行程序P1.1,以产生单位样本序列u[n]并显示它。
1.2:命令clf,axis,title,xlabel,和ylabel的作用是什么?clf—函数用于清除当前图像窗口。
axis—设置坐标轴的范围和显示方式title—就是给已经画出的图加一个标题xlabel—添加x坐标标注ylabel—添加y坐标标注1.3修改程序P1.1,以产生带有延时11个样本的延迟单位样本序列ud[n]。
运行修改的程序并显示产生的序列。
%程序%产生并绘制一个单位样本序列延时11clf;%产生从-10到20的一个向量n=-10:20;%产生单位样本序列u=[zeros(1,3) 1 zeros(1,27)];%绘制单位样本序列stem(n,u);xlabel('时间序号n');ylabel('振幅');title('单位样本序列');axis([-10 20 0 1.2]);1.5 修改程序P1.1,以产生带有超前7个样本的延时单位阶跃序列sd[n]。
运行修改后的序并显示产生的序列。
%程序%产生并绘制一个单位样本序列超前7clf;%产生从-10到20的一个向量n=-10:20;%产生单位样本序列u=[zeros(1,3) 1 zeros(1,27)];%绘制单位样本序列stem(n,u);xlabel('时间序号n');ylabel('振幅'); title('单位样本序列');axis([-10 20 0 1.2]);P1.2 指数信号%程序P1_2%生成一个复数指数序列clf;c=-(1/12)+(pi/6)*i;k=2;n=0:40;x=k*exp(c*n);subplot(2,1,1);stem(n,real(x));xlabel('时间序号n');ylabel('振幅');title('实部');subplot(2,1,2);stem(n,imag(x));xlabel('时间序号n');ylabel('振幅');title('虚部');1.6 运行程序P1.2,以产生复数值的指数序列。
实验一熟悉MATLAB环境一、实验目的(1)熟悉MATLAB的主要操作命令。
(2)学会简单的矩阵输入和数据读写。
(3)掌握简单的绘图命令。
(4)用MATLAB编程并学会创建函数。
(5)观察离散系统的频率响应。
二、实验内容认真阅读本章附录,在MATLAB环境下重新做一遍附录中的例子,体会各条命令的含义。
在熟悉了MATLAB基本命令的基础上,完成以下实验。
上机实验内容:(1)数组的加、减、乘、除和乘方运算。
输入A=[1 2 3 4],B=[3 4 5 6],求C=A+B,D=A-B,E=A.*B,F=A./B,G=A.^B并用stem语句画出A、B、C、D、E、F、G。
(2)用MATLAB实现以下序列。
a)x(n)=0.8n0≤n≤15b)x(n)=e(0.2+3j)n0≤n≤15c)x(n)=3cos(0.125πn+0.2π)+2sin(0.25πn+0.1π) 0≤n≤15d)将c)中的x(n)扩展为以16为周期的函数x16(n)=x(n+16),绘出四个周期。
e)将c)中的x(n)扩展为以10为周期的函数x10(n)=x(n+10),绘出四个周期。
(3)x(n)=[1,-1,3,5],产生并绘出下列序列的样本。
a )x 1(n)=2x(n+2)-x(n-1)-2x(n)b )∑=-=51k 2)k n (nx (n) x(4)绘出下列时间函数的图形,对x 轴、y 轴以及图形上方均须加上适当的标注。
a) x(t)=sin(2πt) 0≤t ≤10s b) x(t)=cos(100πt)sin(πt) 0≤t ≤4s(5)编写函数stepshift(n0,n1,n2)实现u(n-n0),n1<n0<n2,绘出该函数的图形,起点为n1,终点为n2。
(6)给定一因果系统)0.9z 0.67z -1)/(1z 2(1H(z)-2-1-1+++=求出并绘制H(z)的幅频响应与相频响应。
(7)计算序列{8 -2 -1 2 3}和序列{2 3 -1 -3}的离散卷积,并作图表示卷积结果。
数字信号处理实验报告班级:姓名:组号:第九组日期:二零一四年十一月实验1 常见离散信号产生和实现一、实验目的1、加深对常用离散信号的理解;2、熟悉使用MATLAB在时域中产生一些基本的离散时间信号。
二、实验原理1、单位抽样序列在MATLAB中可以利用函数实现。
2、单位阶越序列在MATLAB中可以利用函数实现:3、正弦序列在MATLAB中实现过程如下:4、复指数序列在MATLAB中实现过程如下:5、指数序列在MATLAB中实现过程如下:三、预习要求1、预先阅读实验讲义(MATLAB基础介绍);2、讨论正弦序列、复指数序列的性质。
A.绘出信号,当、时、、时的信号实部和虚部图;当时呢?此时信号周期为多少?程序dsp1.m如下:titlez1=-1/12+j*pi/6;titlez2=1/12+j*pi/6;z3=1/12;z4=2+j*pi/6;z5=j*pi/6;n=0:20;x1=exp(titlez1*n);x2=exp(titlez2*n);x3=exp(z3*n);x4=exp(z4*n);x5=exp(z5*n);subplot(5,2,1);stem(n,real(x1));xlabel('n');ylabel('real(x1)'); title('z1=-1/12+j*pi/6时') subplot(5,2,2);stem(n,imag(x1));xlabel('n');ylabel('imag(x1)'); title('z1=-1/12+j*pi/6时') subplot(5,2,3);stem(n,real(x2));xlabel('n');ylabel('real(x2)'); title('z2=1/12+j*pi/6时')subplot(5,2,4);stem(n,imag(x2));xlabel('n');ylabel('image(x2)'); title('z2=1/12+j*pi/6时')subplot(5,2,5);stem(n,real(x3));xlabel('n');ylabel('real(x3)'); title('z3=1/12时')subplot(5,2,6);stem(n,imag(x3));xlabel('n');ylabel('image(x3)');title('z3=1/12时')subplot(5,2,7);stem(n,real(x4));xlabel('n');ylabel('real(x4)'); title('z4=2+j*pi/6时')subplot(5,2,8);stem(n,imag(x4));xlabel('n');ylabel('image(x4)'); title('z4=2+j*pi/6时')subplot(5,2,9);stem(n,real(x5));xlabel('n');ylabel('real(x5)'); title('z5=j*pi/6时')subplot(5,2,10);stem(n,imag(x5));xlabel('n');ylabel('image(x5)'); title('z5=j*pi/6时')运行结果如下:结论:当Z=pi/6时,序列周期为12。
目录实验一数字信号的产生和频谱分析实验 (2)一.实验目的 (2)二.实验要求 (2)三.实验原理 (2)四.实验步骤 (3)五.流程图 (3)七.实验结果分析 (6)实验二FIR数字滤波器设计 (7)一.试验目的 (7)二.实验要求 (7)三.实验原理和步骤 (7)四.实验流程图 (7)五.实验波形 (8)六.实验结果分析 (11)实验三IIR数字滤波器设计 (11)一.试验目的 (11)二.实验要求 (11)三.实验原理 (12)四.实验流程图 (12)五.实验波形 (13)六.实验结果分析 (14)实验四模拟调制解调 (14)一.试验目的 (14)二.实验要求 (14)三.实验原理 (15)四.实验流程图 (15)五.实验波形 (16)六.实验结果分析 (17)实验五数字调制解调 (17)一.试验目的 (17)二.实验要求 (17)三.实验原理 (18)四.实验流程图 (18)五.实验波形 (18)六.实验结果分析 (20)实验一数字信号的产生和频谱分析实验一.实验目的1.通过仿真掌握采样定理2.掌握利用FFT进行信号谱分析的原理二.实验要求1. 按照采样定理生成CW信号和LFM信号;2. 画出信号时域波形图和频谱图;3. 生成高斯分布的白噪声;4. 生成一定信噪比的带噪信号,并对其进行谱分析。
三.实验原理1.采样定理:在模拟信号数字化时,需要对模拟信号进行采样,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>=2fmax),采样之后的数字信号完整地保留了原始信号中的信息,否则会发生频谱混叠,造成最后解调出来的信号失真.一般实际应用中保证采样频率为信号最高频率的5~10倍;采样定理又称奈奎斯特定理。
2.快速傅立叶变换(FFT)算法长度为N的序列的离散傅立叶变换为:N点的DFT可以分解为两个N/2点的DFT,每个N/2点的DFT又可以分解为两个N/4点的DFT。
第2讲基于Matlab的信号处理实例实验内容(1)(1) 读取给定的3D加速度信号文件,绘出信号波形;程序源代码:function sy2fid = fopen('run 100m_TROUSERS POCKET_1_陈佳_1.txt','r');a=fscanf(fid,'%d,%d,%d\n');fclose(fid);len=length(a)/3;k=1;for i=1:lenx(i)=a(k);y(i)=a(k+1);z(i)=a(k+2);k=k+3;endsubplot(3,1,1);plot(x(1:700),'g','LineWidth',3);grid on; %标示格子xlabel('n'),ylabel('x');%标示坐标legend('x(i)'); %标示名称subplot(3,1,2);plot(y(300:700),'m','LineWidth',3)grid on; %标示格子xlabel('n'),ylabel('y');%标示坐标legend('y(i)'); %标示名称subplot(3,1,3);plot(z(300:700),'b','LineWidth',3);grid on; %标示格子xlabel('n'),ylabel('z');%标示坐标legend('z(i)'); %标示名称执行结果如下所示:100200300400500600700050100150200nxx(i)5010015020025030035040045050100150200250nyy(i)501001502002503003504004500100200300nzz(i)(2) 将读出的3D 加速度信号分解为偶序列及奇序列,分别绘出波形;绘出偶序列及奇序列的和信号、差信号及积信号的波形;a.分解为偶序列及奇序列,分别绘出波形: 程序源代码:function sy2oefid = fopen('run 100m_TROUSERS POCKET_1_陈佳_1.txt','r'); a=fscanf(fid,'%d,%d,%d\n'); fclose(fid);len=length(a)/3; k=1;for i=1:len x(i)=a(k); y(i)=a(k+1);z(i)=a(k+2);k=k+3;endx0=[zeros(1,len-1),x];%x前面补0x1=fliplr(x0);%x1即是反转的x0ex=(x1+x0)/2;%x的偶部ox=-(x1-x0)/2;%x的奇部y0=[zeros(1,len-1),y];y1=fliplr(y0);ey=(y1+y0)/2;oy=-(y1-y0)/2;z0=[zeros(1,len-1),z];z1=fliplr(z0);ez=(z1+z0)/2;oz=-(z1-z0)/2;subplot(3,2,1);plot([-len+1:len-1],ex ,'g','LineWidth',3); grid on; %标示格子xlabel('n'),ylabel('x');%标示坐标legend('ex(i)'); %标示名称subplot(3,2,3);plot([-len+1:len-1],ey,'m','LineWidth',3) grid on; %标示格子xlabel('n'),ylabel('y');%标示坐标legend('ey(i)'); %标示名称subplot(3,2,5);plot([-len+1:len-1],ez,'b','LineWidth',3); grid on; %标示格子xlabel('n'),ylabel('z');%标示坐标legend('ez(i)'); %标示名称subplot(3,2,2);plot([-len+1:len-1],ox,'g','LineWidth',3); grid on; %标示格子xlabel('n'),ylabel('x');%标示坐标legend('ox(i)'); %标示名称subplot(3,2,4);plot([-len+1:len-1],oy,'m','LineWidth',3) grid on; %标示格子xlabel('n'),ylabel('y');%标示坐标legend('oy(i)'); %标示名称subplot(3,2,6);plot([-len+1:len-1],oz,'b','LineWidth',3); grid on; %标示格子xlabel('n'),ylabel('z');%标示坐标legend('oz(i)'); %标示名称 sumoex=ex+ox; sumoey=ey+oy; sumoez=ez+oz;执行结果如下所示:-4000-3000-2000-100001000200030004000050100150nxex(i)-4000-3000-2000-100001000200030004000050100150200nyey(i)-4000-3000-2000-100001000200030004000050100150nzez(i)-4000-3000-2000-100001000200030004000-100-50050100nxox(i)-4000-3000-2000-100001000200030004000-200-1000100200nyoy(i)-4000-3000-2000-100001000200030004000-200-1000100200nzoz(i)b.绘出偶序列及奇序列的和信号的波形: 程序源代码:function sumoefid = fopen('run 100m_TROUSERS POCKET_1_陈佳_1.txt','r'); a=fscanf(fid,'%d,%d,%d\n'); fclose(fid);len=length(a)/3; k=1;for i=1:len x(i)=a(k); y(i)=a(k+1); z(i)=a(k+2); k=k+3; endx0=[zeros(1,len-1),x];%x 前面补0 x1=fliplr(x0);%x1即是反转的x0 ex=(x1+x0)/2;%x 的偶部 ox=-(x1-x0)/2;%x 的奇部 y0=[zeros(1,len-1),y]; y1=fliplr(y0); ey=(y1+y0)/2; oy=-(y1-y0)/2;z0=[zeros(1,len-1),z]; z1=fliplr(z0); ez=(z1+z0)/2; oz=-(z1-z0)/2; sumoex=ex+ox; sumoey=ey+oy; sumoez=ez+oz; subplot(3,1,1);plot([-len+1:len-1],sumoex ,'g','LineWidth',3); grid on ; %标示格子 xlabel('n'),ylabel('x');%标示坐标 legend('sumoex'); %标示名称 subplot(3,1,2);plot([-len+1:len-1],sumoex ,'g','LineWidth',3); grid on ; %标示格子 xlabel('n'),ylabel('x');%标示坐标 legend('sumoey'); %标示名称 subplot(3,1,3);plot([-len+1:len-1],sumoex ,'g','LineWidth',3); grid on ; %标示格子 xlabel('n'),ylabel('x');%标示坐标 legend('sumoez'); %标示名称执行结果如下所示:-4000-3000-2000-1000010002000300040000100200nxsumoex-4000-3000-2000-1000010002000300040000100200nxsumoey-4000-3000-2000-1000010002000300040000100200nxsumoezc..绘出偶序列及奇序列的差信号的波形程序源代码:function choefid = fopen('run 100m_TROUSERS POCKET_1_陈佳_1.txt','r'); a=fscanf(fid,'%d,%d,%d\n');fclose(fid);len=length(a)/3;k=1;for i=1:lenx(i)=a(k);y(i)=a(k+1);z(i)=a(k+2);k=k+3;endx0=[zeros(1,len-1),x];%x前面补0x1=fliplr(x0);%x1即是反转的x0ex=(x1+x0)/2;%x的偶部ox=-(x1-x0)/2;%x的奇部y0=[zeros(1,len-1),y];y1=fliplr(y0);ey=(y1+y0)/2;oy=-(y1-y0)/2;z0=[zeros(1,len-1),z];z1=fliplr(z0);ez=(z1+z0)/2;oz=-(z1-z0)/2;choex=ex-ox;choey=ey-oy;choez=ez-oz;subplot(3,1,1);plot([-len+1:len-1],choex ,'g','LineWidth',3);grid on; %标示格子xlabel('n'),ylabel('x');%标示坐标legend('choex'); %标示名称subplot(3,1,2);plot([-len+1:len-1],choex ,'g','LineWidth',3);grid on; %标示格子xlabel('n'),ylabel('x');%标示坐标legend('choey'); %标示名称subplot(3,1,3);plot([-len+1:len-1],choex ,'g','LineWidth',3);grid on; %标示格子xlabel('n'),ylabel('x');%标示坐标 legend('choez'); %标示名称执行结果如下所示:-4000-3000-2000-1000010002000300040000100200nx-4000-3000-2000-1000010002000300040000100200nx-4000-3000-2000-1000010002000300040000100200nxchoexchoeychoezd.绘出偶序列及奇序列的积信号的波形程序源代码:function muloefid = fopen('run 100m_TROUSERS POCKET_1_陈佳_1.txt','r'); a=fscanf(fid,'%d,%d,%d\n'); fclose(fid);len=length(a)/3; k=1;for i=1:len x(i)=a(k); y(i)=a(k+1); z(i)=a(k+2); k=k+3; endx0=[zeros(1,len-1),x];%x 前面补0 x1=fliplr(x0);%x1即是反转的x0 ex=(x1+x0)/2;%x 的偶部 ox=-(x1-x0)/2;%x 的奇部 y0=[zeros(1,len-1),y]; y1=fliplr(y0); ey=(y1+y0)/2;oy=-(y1-y0)/2;z0=[zeros(1,len-1),z]; z1=fliplr(z0); ez=(z1+z0)/2; oz=-(z1-z0)/2; muloex=ex.*ox; muloey=ey.*oy; muloez=ez.*oz; subplot(3,1,1);plot([-len+1:len-1],muloex ,'g','LineWidth',3); grid on ; %标示格子 xlabel('n'),ylabel('x');%标示坐标 legend('muloex'); %标示名称 subplot(3,1,2);plot([-len+1:len-1],muloex ,'g','LineWidth',3); grid on ; %标示格子 xlabel('n'),ylabel('y');%标示坐标 legend('muloey'); %标示名称 subplot(3,1,3);plot([-len+1:len-1],muloex ,'g','LineWidth',3); grid on ; %标示格子 xlabel('n'),ylabel('z');%标示坐标 legend('muloez'); %标示名称执行结果如下所示:-4000-3000-2000-100001000200030004000-101x 104nxmuloex-4000-3000-2000-100001000200030004000-101x 104nymuloey-4000-3000-2000-100001000200030004000-101x 104nzmuloez∑-=-=10][1][M k k n x Mn y (3) 画出M 点滑动平均滤波器的波形(M 分别取4和10); 注:M 点滑动平均滤波器:程序源代码:function m n=0:20;x=[n==0]; %单位冲击响应 a1=[0.25 0.25 0.25 0.25]; b=[1];y1=filter(a1,b,x);a2=[0.1]; %求m=10时,差分方程右边的系数 for i=1:9a2=[a2,0.1]; endy2=filter(a2,b,x); subplot(2,1,1);stem(n,y1,'g','filled')%画图,用绿色,线条加粗 title('滑动平均滤波器的波形') grid on ; %标示格子xlabel('n'),ylabel('y');%标示坐标 legend('M=4'); %标示m subplot(2,1,2);stem(n,y2,'m','filled')%画图,用品红色,线条加粗 grid on ; %标示格子 xlabel('n'),ylabel('y');%标示坐标 title('滑动平均滤波器的波形') legend('M=10'); %标示m执行结果如下所示:246810121416182000.10.20.30.4滑动平均滤波器的波形nyM=4246810121416182000.050.1ny滑动平均滤波器的波形M=10(4) 用上述滑动平均滤波器对输入的3D 加速度信号进行滤波,同时绘出输入及输出信号波形;观察分析输出波形的变化。
实验三 用FFT 作谱分析一、实验目的(1)进一步加深DFT 算法原理和基本性质的理解(因为FFT 只是DFT 的一种快速算法,所以FFT 的运算结果必然满足DFT 的基本性质)。
(2)熟悉FFT 算法原理(3)学习用FFT 对连续信号和时域离散信号进行谱分析的方法分析误差及其原因,以便在实际中正确应用FFT二、实验内容(1)利用FFT 对下列信号进行谱分析并画出图形, FFT 变换区间N =8,16a.)()(41n R n x =b.n n x 4cos )(2π= (2)设一序列中含有两种频率成份,f1=2HZ,f2=2.05HZ,采样频率取为fs =10HZ ,即)/2sin()/2sin()(21s s f n f f n f n x ππ+=要区分出这两种频率成份,必须满足N>400,为什么?a.取x(n)(0≤n<128)时,计算x(n)的DFT X(k)b.将a 中的x (n )以补零方式使其加长到0≤n<512,计算X(k)c.取x(n)( 0≤n<512),计算X(k)(3)令)()()(32n jx n x n x +=用FFT 计算8点和16点离散傅立叶变换并画出图形,分析DFT 的对称性三、实验图形记录(1)FFT 变换(2) 两种不同频率成份DFT变换(3)DFT的对称性四、实验小结通过本次实验知道了离散傅里叶的N点变换在频域范围内表现为对傅里叶变换即Z变换在单位圆上的抽样,所以N取8点时K=0,1,2,3,4,5,6,7与N取16点时K=0,2,4,6,8,10,12,14的离散傅里叶值对应相等,他们都等于原信号在W=0,1*pi/8, 2*pi/8, 3*pi/8, 4*pi/8, 5*pi/8, 6*pi/8, 7*pi/8时的傅里叶变换,因此离散傅里叶变换实际上是对该序列在频率范围内以2*pi/N的间隔进行抽样;但如果取样点数小于原信号周期(如N=8<T),未能取完一个周期,而N=16取完一个周期,则他们对应W值得取值就不一样,因为此时傅里叶变换是该序列周期延拓后对应的傅里叶级数的主值序列;为了避免频率混叠要求有Fs>2f c;结论:FFT的性质同DFT一致,DFT其实是对该序列FFT的W的抽样或者说对Z在单位圆上的抽样,也是该序列周期延拓后FFT的主值序列。
实验一基于Matlab的数字信号处理基本操作一、实验目的:学会运用MATLAB表示的常用离散时间信号;学会运用MATLAB实现离散时间信号的基本运算。
二、实验仪器:电脑一台,MATLAB6.5或更高级版本软件一套。
三、实验内容:(一) 离散时间信号在MATLAB中的表示离散时间信号是指在离散时刻才有定义的信号,简称离散信号,或者序列。
离散序列通常用X(n)来表示,自变量必须是整数。
离散时间信号的波形绘制在MATLAB中一般用stem函数。
stem函数的基本用法和plot函数一样,它绘制的波形图的每个样本点上有一个小圆圈,默认是空心的。
如果要实心,需使用参数“fill ”、“filled ”,或者参数“.”。
由于MATLAB中矩阵元素的个数有限,所以MATLAB 只能表示一定时间范围内有限长度的序列;而对于无限序列,也只能在一定时间范围内表示出来。
类似于连续时间信号,离散时间信号也有一些典型的离散时间信号。
1. 单位取样序列单位取样序列、:(n),也称为单位冲激序列,定义为和、? ⑴=0)o(n)=丿0 (n 式0)要注意,单位冲激序列不是单位冲激函数的简单离散抽样,它在n=0处是取确定的值1。
在MATLAB中,冲激序列可以通过编写以下的impDT.m文件来实现,即function y=impDT(n)y=(n==0); %当参数为0时冲激为1,否则为0调用该函数时n必须为整数或整数向量。
【实例1-1】禾U用MATLAB的impDT函数绘出单位冲激序列的波形图。
解:MATLAB源程序为>>n=-3:3;>>x=impDT(n);>>stem(n,x,'fill'),xlabel('n'),grid on>>title('单位冲激序列’) >>axis([-3 3 -0.1 1.1])1程序运行结果如图1-1所示。
0.60007.0000-5.4000所以,X=[错误!未找到引用源。
]=[ 0.6000, 7.0000, -5.4000]’实验结果2:K=1.732051实验结果3:三曲线的对比图如下所示:图1.1 三曲线的对比实验二基于MATLAB信号处理实验xlabel('频率/Hz');ylabel('振幅/dB');title('布莱克窗的幅频特性');grid on;subplot(2,1,2);plot(f4,180/pi*unwrap(angle(H4)));xlabel('频率/Hz');ylabel('相位');title('布莱克窗的相频特性');grid on;六、实验结果实验结果2.1:图2-1 x(n)与y(n)的互相关序列图由实验结果可知,x(n)与y(n)的互相关只在区间[-4,8]上有能力,刚好是区间[-3,3]与右移后的区间[-1,5]两端点之和,与结论一致。
且互相关在2处达到最大。
实验结果2.2.1:其表示的差分方程为:y(n)-0.8145y(n-4)=x(n)+x(n-4)实验结果2.2.2:滤波器的幅频和相频图如下所示:图2-2 滤波器的幅频与相频图实验结果2.2.3:由下图实验结果可知,输出信号相对于输入信号有一小小的延迟,基本上x(n)的频点都通过了,滤波器是个梳状filter,正好在想通过的点附近相位为0,也就是附加延迟为0图2-3 滤波器的幅度和相位变化图2-4 两信号波形实验结果2.3:四种带通滤波器的窗函数的频率响应如下所示:图2-5 矩形窗的频率特性图2-6 汉宁窗的频率特性图2-7 海明窗的频率特性图2-8 布莱克曼窗的频率特性图3-1 加噪前、后图像对比图3-2 加椒盐噪声的图像均值滤波前、后的图像对比图3-3 加椒盐噪声的图像中值滤波前、后的图像对比图3-4加高斯噪声的图像均值滤波前、后的图像对比图3-5 加高斯噪声的图像中值滤波前、后的图像对比实验结果3.2:图3-6 原图及重构图像图3-7 程序运行结果由实验结果可知,当DCT变换的系数置0个数小于5时,重构图像与原图像的峰值信噪比为2.768259,重构图像置为0的变换系数的个数个数为:43.708737;当DCT变换的系数置0个数小于10时,重构图像与原图像的峰值信噪比15.922448,重构图像置为0的变换系数的个数个数为:36.110705;当DCT变换的系数置0个数小于5时,重构图像与原图像的峰值信噪比为2.768259,重构图像置为0的变换系数的个数个数为:30.366348;可以发现,在抛弃部分DCT系数后,重构图像时不会带来其画面质量的显著下降,采用这种方法来实现压缩算法时,可以通过修改mask变量中的DCT系数来更好地比较仿真结果。
基于MATLAB的数字信号处理1MATLAB的综合实验一、实验目的及要求培养学生利用Matlab解决专业问题的能力。
二、实验设备(环境)及要求1.计算机2.Matlab软件编程实验平台三、实验内容1、编程实现一个数字信号处理的仿真系统。
要求具有界面并实现以下功能:1)能产生(得到)并选择各种数字信号(sin、方波、三角波、语音、噪声及其叠加);2)具有DFT、DCT和DWT变换功能,并对各种信号进行变换;3)设计滤波器实现低通、高通、带通滤波,得到输出信号的频域特性和时间序列;4)输入一段叠加了噪声的语音信号,显示其频谱特性,通过变换或滤波对其降噪,得到输出信号的频域特性和时间序列。
四、设计思想本系统包含有三个主要部分:信号产生与变换模块,滤波器模块和语音噪声处理。
信号产生与变换通过输入信号频率和采样频率实现正弦、方波、三角波、语音信号的产生以及噪声的叠加,系统设定信号持续时间为0.05s,语音信号为截取了一段2s的声音信号。
同时对各个信号进行DFT,DCT和DWT变换,且变换点数N=256,同时设定DWT变换时的小波类型为db1。
滤波器模块设计了四个IIR 滤波器(巴特沃斯、切比雪夫Ⅰ型,切比雪夫Ⅱ型和椭圆滤波器),并分别实现低通,高通和带通。
界面设计了各种滤波器所需参数的输入模块。
系统设定待滤波信号持续时间为0.05s,包含有3个频率成分,S=sin(2*pi*f*t)+ sin(2*pi*5*f*t)+sin(2*pi*8*f*t),其中f为输入信号频率,S通过低通、带通、高通滤波器之后,分别得到频率为f,5f和8f的正弦信号,实现信号滤波。
语音噪声处理部分是一个复选框按钮,通过巴特沃斯低通滤波器对其进行降噪,设计中通过观察噪声语音信号的频谱得到低通滤波器的截止频率和阻带起始频率,并合理输入通带衰减与阻带衰减,最终得到理想的降噪结果。
数字滤波器设计过程中用到了如下的一些matlab设计函数:buttord、butter,cheb1ord、cheby1,cheb2ord、cheby2,ellipord、ellip。
数字信号处理matlab实验学院:电子与信息专业班级: 5学号:201130302068姓名:梁敏健实验名称:离散时间信号与系统分析、滤波器实验日期:2013.10实验1 离散时间信号与系统分析(2课时)题目一:以下程序中分别使用conv和filter函数计算h[n] = [3 2 1 -2 1 0 -4 0 3]和x[n] = [1 -2 3 -4 3 2 1]的卷积y和y1,并分析y和y1是否有差别代码:h = [3 2 1 -2 1 0 -4 0 3];x = [1 -2 3 -4 3 2 1];y = conv(h,x);n = 0:14;subplot(2,1,1);stem(n,y);xlabel('Time index n'); ylabel('Amplitude');title('Output Obtained by Convolution'); grid;x1 = [x zeros(1,8)];y1 = filter(h,1,x1);subplot(2,1,2);stem(n,y1);xlabel('Time index n'); ylabel('Amplitude');title('Output Generated by Filtering'); grid;可见,y与y1没有差别。
题目二:编制程序求解下列两个系统的单位冲激响应和阶跃响应,并绘出其图形。
要求分别用filter、conv、impz三种函数完成。
,,源代码:对,,单位冲激响应a1=[1,0.75,0.125];b1=[1,-1];n=0:20;x1=[1 zeros(1,20)];y1filter=filter(b1,a1,x1);subplot(2,2,1);stem(n,y1filter);title('y1filter');xlabel('x');ylabel('y');title('impulse response generated by filter')x1_1=[1 zeros(1,10)];[h]=impz(b1,a1,10);y1conv=conv(h,x1_1);n=0:19;subplot(2,2,2);stem(y1conv) ;title('impulse response generated by conv')h=impz(b1,a1,21);subplot(2,2,3);stem([0:20], h);title('impulse response generated by impz') 结果:单位阶跃:a1=[1,0.75,0.125];b1=[1,-1];n=0:20;x2=ones(1,21);y1filter=filter(b1,a1,x2);subplot(2,2,3);stem(n,y1filter);title('y1filter_step');xlabel('x');ylabel('y');title('impulse response generated by filter')x2=ones(1,21);[h]=impz(b1,a1,20);y1=conv(h,x2);y1conv=y1(1:21);n1=0:20;subplot(2,2,2);stem(n1,y1conv,'filled');title('y1conv');xlabel('n');ylabel('y1[n]');title('impulse response generated by conv')a=[1,0.75,0.125];b=1;h=impz(b,a,21);subplot(2,2,1);stem([0:20], h);title('impulse response generated by impz') 结果:对单位冲激响应:a2=1;b2=[0 0.25*ones(1,4)];n=0:9;x1=[1 zeros(1,9)];y2filter=filter(b2,a2,x1);subplot(2,2,1);stem(n,y2filter);title('y2filter');xlabel('x');ylabel('y')title('impulse response generated by filter')x2=[1 zeros(1,5)];[h]=impz(b2,a2,5);y2conv=conv(h,x2);subplot(2,2,2);stem(n,y2conv,'filled')title('impulse response generated by conv')h=impz(b2,a2,10);subplot(2,2,3);stem([0:9], h);title('impulse response generated by impz') 结果:单位阶跃a1=1;b1=[0 0.25*ones(1,4)];n=0:20;x1=ones(1,21);y2filter=filter(b1,a1,x1);subplot(2,2,1);stem(n,y2filter);title('y2filter_step');xlabel('x');ylabel('y');title('impulse response generated by filter')y2=conv(b1,x1);y2conv=y2(1:21);subplot(2,2,2);stem(n,y2conv,'filled');title('y2conv');xlabel('n');ylabel('y[n]');title('impulse response generated by conv')n=0:20;b=[0,0.25,0.5,0.75,ones(1,17)];a=1;h=impz(b,a,21);subplot(2,2,3);stem([0:20], h);title('impulse response generated by impz')题目三2N点实数序列N=64。
用一个64点的复数FFT程序,一次算出,并绘出的图形。
代码:N=64;n=[0:1:N-1];n1=2*n;n2=2*n+1;k=[0:1:N-1];xn1=cos(2*pi/N*7*n1)+1/2*cos(2*pi/N*19*n1);xn2=cos(2*pi/N*7*n2)+1/2*cos(2*pi/N*19*n2);XK1=fft(xn1);XK2=fft(xn2);X1=XK1+exp(-j*pi*k/N).*XK2;X2=XK1-exp(-j*pi*k/N).*XK2;X1=[X1 zeros(1,N)];X2=[zeros(1,N) X2];XK=X1+X2;k=[0:1:2*N-1];XK=abs(XK); stem(k,XK);xlabel('k');ylabel('|X(k)|');title('X(k)=DFT[x(n)]2N')题目四:已知某序列在单位圆上的N=64等分样点的Z变换为:。
用N点IFFT程序计算出和。
代码:N=64;k=[0:1:63];xk=1./(1-0.8*exp(-j*2*pi*k/N));xn=ifft(xk,64);stem(k,xn)xlabel('k');ylabel('x(n)');disp('xnÐòÁÐ');disp(xn);xn序列1.0000 - 0.0000i 0.8000 + 0.0000i 0.6400 + 0.0000i 0.5120 + 0.0000i0.4096 + 0.0000i 0.3277 + 0.0000i 0.2621 + 0.0000i 0.2097 + 0.0000i0.1678 + 0.0000i 0.1342 + 0.0000i 0.1074 - 0.0000i 0.0859 + 0.0000i0.0687 - 0.0000i 0.0550 - 0.0000i 0.0440 - 0.0000i 0.0352 - 0.0000i0.0281 - 0.0000i 0.0225 - 0.0000i 0.0180 - 0.0000i 0.0144 - 0.0000i0.0115 - 0.0000i 0.0092 - 0.0000i 0.0074 - 0.0000i 0.0059 - 0.0000i0.0047 - 0.0000i 0.0038 - 0.0000i 0.0030 - 0.0000i 0.0024 - 0.0000i0.0019 - 0.0000i 0.0015 - 0.0000i 0.0012 - 0.0000i 0.0010 + 0.0000i0.0008 + 0.0000i 0.0006 + 0.0000i 0.0005 + 0.0000i 0.0004 + 0.0000i0.0003 + 0.0000i 0.0003 + 0.0000i 0.0002 + 0.0000i 0.0002 + 0.0000i0.0001 + 0.0000i 0.0001 + 0.0000i 0.0001 + 0.0000i 0.0001 + 0.0000i0.0001 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 - 0.0000i0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 - 0.0000i0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i实验2 滤波器设计(2课时)1、求系统的零、极点和幅度频率响应和相位响应。