wn=boxcar(N);
Wn=[wn'zeros(1,200-N+1)];%保证维度一样
Xn=Wn.*xn;
M=128;%采样点数
Xm=abs(fft(Xn,M)/(M/2));%M点FFT变换
subplot(2,1,2)
f=linspace(0,fs,M);
plot(f,Xm);
xlabel('f(Hz)');
ylabel('幅度');
title('加矩形窗处理后的频域函数');
4)绘出各信号频域的幅频特性和相频特性
正弦信号a=sin(20*pi*t)
t=0:
0.001:
0.999;
subplot(311)
a=sin(20*pi*t);
plot(t,a);gridon;title('sin20pi*t');xlabel('T');
b=fft(a);
subplot(312);
stem(t*1000,abs(b)/1000,'fill');xlabel('Hz');
axis([-105000.5]);
gridon;title('频率特性')
subplot(313)
stem(t*1000,angle(b)/1000,'fill');xlabel('Hz');
axis([0100-0.0040.004])
gridon;title('相频特性')
方波信号a=square(2*pi*t,50)
t=0:
0.001:
0.5;
a=square(2*pi*10*t,50);
subplot(311)
plot(t,a);gridon;
axis([00.5-1.51.5]);
title('周期方波信号')
b=fft(a);
subplot(312)
stem(t*100,abs(b)/100,'fill');
axis([05004]);
gridon;title('频率特性')
subplot(313)
stem(t*100,angle(b)/100,'fill');
axis([05-0.040.04]);
gridon;title('相频特性')
三角波信号
t=-0.3:
0.01:
0.3;
a=sawtooth(10*pi*t,0.5);
subplot(311)
plot(t,a);gridon;
axis([-0.30.3-1.51.5]);
title('三角波信号')
b=fft(a);
subplot(312)
stem(t*100,abs(b)/100,'fill');
axis([05000.5]);
gridon;title('频率特性')
subplot(313)
stem(t*100,angle(b)/100,'fill');
axis([025-0.040.04]);
gridon;title('相频特性')
5)以正弦周期信号为例,观察讨论基本概念(频谱混叠、频谱泄漏、整周期截取等)。
整周期阶段现象很明显,非正整周期截取时它的最大数字频率不在0.2~0.4
之间,这与理论值相差是比较大的。
在截取长度不是很长时必须要整周期截取,这样才能保证截断误差不是很大。
clc
omega=pi/4;
ns=0;
nf=64;
n=[ns:
nf];
xn=sin(omega*n);
xk=fft(xn,128);
xn1=n(1:
50);%分周期序列截取
xk1=fft(xn1,128);
%绘图
k=0:
127;wk=2*k/128;
subplot(4,1,1);stem(n,xn,'.');
xlabel('n');ylabel('xn');title('(a)整周期截取的正弦周期信号');grid
subplot(4,1,2);stem(wk,abs(xk),'.');
title('(b)整周期截取128点dft的幅频特性图');
xlabel('\omega/\pi');ylabel('幅度');grid
subplot(4,1,3);stem(0:
length(xn1)-1,xn1,'.');
xlabel('n');ylabel('xn');title('(c)非整周期截取周期信号');grid
subplot(4,1,4);stem(wk,abs(xk1),'.');
title('(d)非整周期截取128点dft的幅频特性图');
xlabel('\omega/\pi');ylabel('幅度');grid
二、已知三个信号
,经调制产生信号
,其中
为常数,
为具有窄带特性的Hanning信号。
将此已调信号通过信道传输,描述该信道的差分方程为
得到接收信号
1)分析Hanning信号
的时域与频域特性
2)分析已调信号
的时域与频域特性
3)分析系统的单位脉冲响应
4)分析接收信号
的频谱
5)设计带通滤波器从接收信号
中还原出三个已调信号。
基本原理:
汉宁窗时域表达式
,MATLAB实现
在时域中,描写系统特性的方法是差分方程和单位脉冲响应,在频域可以用系统函数描述系统特性。
已知输入信号可以由差分方程、单位脉冲响应或系统函数求出系统对于该输入信号的响应,本实验仅在时域求解。
在计算机上适合用递推法求差分方程的解,最简单的方法是采用MATLAB语言的工具箱函数filter函数。
也可以用MATLAB语言的工具箱函数conv函数计算输入信号和系统的单位脉冲响应的线性卷积,求出系统的响应。
(1)n=51;
window=hanning(n);
[h,w]=freqz(window,1);
subplot(1,2,1)
stem(window);
subplot(1,2,2)
plot(w/pi,20*log(abs(h)/abs(h
(1))));
2)N=100;
n=0:
99;
Rn=[ones(1,N-1)zeros(1,101-N)];
pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn;
sn=2*pn.*(cos(pi*n/4)+4*pn.*cos(pi*n/2)+6*pn.*cos(3*pi*n/4));
subplot(211);
stem(n,sn);
title('µ÷ÖÆÐźÅ');
[H,w]=freqz(sn,1,200);
magH=abs(H);
length(w)
length(H)
magHdB=20*log10(magH);
subplot(212);
plot(w/pi,magHdB);
3)a=[1-1.11720.9842-0.40220.2247];
b=[0.2247-0.40220.9842-1.11721];
n=1:
49;
hn=impz(b,a,n);
stem(n,hn,'k','f');
ylabel('脉冲响应¨h(n)');
xlabel('序号(n)');
title('单位脉冲响应');
4)a=[1-1.11720.9841-0.40220.2277];
b=[0.2277-0.40220.9841-1.11721];
yn=filter(b,a,sn);
subplot(311);
plot(yn);
[H,w]=freqz(yn,1,200);
X=abs(H);
length(w)
length(H)
Y=20*log10(X);
subplot(312);
plot(w/pi,Y);
subplot(3,1,3);
plot(w/pi,angle(H));
title('相频特性');
xlabel('\omega/\pi');
ylabel('phi(\omega)');
axis([00.2-33]);
gridon
5)观察y(n)的图像可得
wp1=[0.21,0.28];
ws1=[0.2,0.3];
wp2=[0.43,0.57];
ws2=[0.41,0.6];
wp3=[0.71,0.82];
ws3=[0.69,0.85];
分离信号一
a=[1-1.11720.9841-0.40220.2277];
b=[0.2277-0.40220.9841-1.11721];
N=100;
n=0:
99;
Rn=[ones(1,N-1)zeros(1,101-N)];
pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn;
sn=1.*pn.*cos(1*pi*n/4)+2.*pn.*cos(2*pi*n/4)+3.*pn.*cos(3*pi*n/4);
yn=filter(b,a,sn);
wp=[0.21,0.28];
ws=[0.2,0.3];
Rp=1;
As=20;
[n,wc]=cheb1ord(wp,ws,Rp,As);
[bz,az]=cheby1(n,Rp,wc);
x1=filter(bz,az,yn);
subplot(211),plot(x1)
[H,w]=freqz(x1,1,200);
subplot(212);
plot(w/pi,20*log10(abs(H)))
信号二
a=[1-1.11720.9841-0.40220.2277];
b=[0.2277-0.40220.9841-1.11721];
N=100;
n=0:
99;
Rn=[ones(1,N-1)zeros(1,101-N)];
pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn;
sn=1.*pn.*cos(1*pi*n/4)+2.*pn.*cos(2*pi*n/4)+3.*pn.*cos(3*pi*n/4);
wp=[0.43,0.57];
ws=[0.41,0.6];
Rp=1;
As=20;
[n,wc]=cheb1ord(wp,ws,Rp,As);
[bz,az]=cheby1(n,Rp,wc);
x1=filter(bz,az,yn);
subplot(211),plot(x1)
[H,w]=freqz(x1,1,200);
title('信号二图像');
subplot(212);
plot(w/pi,20*log10(abs(H)));
title('频谱')
信号三
a=[1-1.11720.9841-0.40220.2277];
b=[0.2277-0.40220.9841-1.11721];
N=100;
n=0:
99;
Rn=[ones(1,N-1)zeros(1,101-N)];
pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn;
sn=1.*pn.*cos(1*pi*n/4)+2.*pn.*cos(2*pi*n/4)+3.*pn.*cos(3*pi*n/4);
yn=filter(b,a,sn);
wp=[0.71,0.8];
ws=[0.69,0.85];
Rp=1;
As=20;
[n,wc]=cheb1ord(wp,ws,Rp,As);
[bz,az]=cheby1(n,Rp,wc);
x1=filter(bz,az,yn);
subplot(211),plot(x1)
[H,w]=freqz(x1,1,200);
subplot(212);
plot(w/pi,20*log10(abs(H)))
三、图像信号相关处理
1)读入一幅彩色图像
2)将彩色图像进行三原色分解,分解出R、G、B分量,并用图像显示出来
3)将彩色图像灰度化,转换为灰度图像并显示
4)对灰度图像用几种典型的边缘检测算子进行边缘检测,显示检测出的边缘。
基本原理:
MATLAB支持JPEG,BMP,PCX,TIFF,GIF等图像文件格式。
灰度图像:
数据矩阵中的元素值一般都在[0,1]或[0,255]之间,灰度图像根据这些数据利用线性插值来的色图中的颜色种类匹配。
灰度图像一般看起来试衣服黑白图像,但是色彩明暗比二值图像更为丰富、因为每一个像素点的取值在[0,1]或[0,255]之间。
灰度图像读入matlab中是一个二维的平面矩阵,其中行与列的乘积代表其图片中像素点的个数。
RGB图像:
图像中的每一个像素用三个数据来存储,分别指定红、蓝、绿三原色在像素颜色中的比例关系,组成一个三维数组,读入matlab后是一个三维的矩阵。
RGB图像就是采用红蓝绿作为三原色的。
其中R为红色,G为绿色,B为蓝色,这样这个三维矩阵A就可以表示一个彩色矩阵,也就是一整数字图片可以再matlab中读成一个矩阵A。
这个三维矩阵的第一维就是上图中第一层表示红色的数值,第二维为第二层代表绿色的数值,第三维为第三层代表蓝色的数值。
1)clc;
a=imread('H:
\ww.jpg');
imshow(a),title('原彩色图像');
2)clc;
a=imread('H:
\ww.jpg');
subplot(2,2,1),imshow(a),title('Ô²ÊɫͼÏñ');
ar=a(:
:
1);
ag=a(:
:
2);
ab=a(:
:
3);
subplot(2,2,2),imshow(ar),title('R');
subplot(2,2,3),imshow(ag),title('G');
subplot(2,2,4),imshow(ab),title('B');
3)clc;
a=imread('H:
\ww.jpg');
subplot(2,1,1),imshow(a),title('原彩色图像');
b=rgb2gray(a);
subplot(2,1,2),imshow(b),title('灰度图像');
4)a=imread('H:
\ww.jpg');
b=rgb2gray(a);
b1=edge(b,'sobel');
b2=edge(b,'prewitt');
b3=edge(b,'roberts');
b4=edge(b,'log');
b5=edge(b,'canny');
subplot(3,2,1);imshow(b);title('灰度图像');
subplot(3,2,2);imshow(b1);title('Sobel边缘检测');
subplot(3,2,3);imshow(b2);title('Prewitt边缘检测');
subplot(3,2,4);imshow(b1);title('Roberts边缘检测');
subplot(3,2,5);imshow(b1);title('LoG边缘检测');
subplot(3,2,6);imshow(b1);title('Canny边缘检测');
五.心得与体会
通过这一个星期的课程设计与学习,我重温了一遍数字信号处理的基本概念及相关理论,巩固了MATLAB基本使用方法,掌握了MATLAB数字信号处理的基本编程技术,实现了典型离散信号的DFT及数字滤波器的设计与应用。
数字信号处理是一门比较抽象的课程,通过MATLAB语言可以把抽象的理论用简洁直观的图形表示出来。
MATLAB是一个很好的编程平台,我要在今后的学习中继续深入学习,让MATLAB发挥更大的作用,以帮助学习高深知识。
通过此次实验,学会了利用DFT来对周期、非周期信号做频谱分析,采样定理理解更加深刻,通过改变采样间隔,实现混叠泄露现象。
得知采样的重要性,在今后的学习应用中,可以正确采样,不发生混叠泄露,使信号处理正确准确。
学会了窗函数的用法,通过对信号加矩形窗、hanning窗、hamming窗,加深了窗函数的概念理解,并且通过对同一个信号加不同窗的比较,出不同窗的特点。
对时域加窗相乘与频域卷积的比较得到时域结果的正确。
数字信号处理课程设计虽然只有短短的一周,但是它是我们向工程问题靠近的很重要的训练,我体会理论知识必须联系实际,这样才是学习的最佳途径。
Welcome!
!
!
欢迎您的下载,
资料仅供参考!