数字信号处理
实验一 用FFT 进行谱分析
一、实验目的
1.进一步加深对DFT 算法原理和基本性质的理解(因为FFT 只是DFT 的一种快速算法,所以FFT 的运算结果必然满足DFT 的基本性质)。
2.熟悉FFT 算法原理和FFT 子程序的应用。
3.学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT 。 二、实验仪器
微型计算机 三、实验步骤
1.复习DFT 的定义、性质和用DFT 作谱分析的有关内容。
2.复习FFT 算法原理与编程思想,并对照DIT-FFT 运算流图和程序框图,读懂本实验提供的FFT 子程序。
3.编制信号产生子程序,产生以下典型信号供谱分析用:
)
(n R n x 41)(= (1-1) ???
??≤≤-≤≤+=n
n n n n n x 其他,074,83
0,1)(2 (1-2)
??
?
??≤≤-≤≤-=n n n n n n x 其他,074,330,4)(3 (1-3)
)4
cos(
)(4n n x π
= (1-4)
)8sin()(5n n x π
= (1-5)
)20cos()16cos()8cos()(6t t t t x πππ++= (1-6)
应当注意,如果给出的是连续信号)(t x a ,则首先要根据其最高频率确定采样速率f s 以及由频率分辨率选择采样点数N ,然后对其进行软件采样(即计算
)10(),()(-≤≤=N n nT x n x a )
,产生对应序列)(n x 。对信号)(6t x ,频率分辨率的选择要以能分辨开其中的三个频率对应的谱线为准则。对周期序列,最好截取周期的整数倍进行谱分析,否则有可能产生较大的分析误差。请实验者根据DFT 的隐含周期性思考这个问题。
4.编写主程序。
图1给出了主程序流程图及框图供参考。本实验提供FFT 子程序和通用绘图子程序。 5.按实验内容要求,上机实验,并写出实验报告。 四、实验内容
1.对下列所给出的信号逐个进行谱分析。
下面给出针对各信号的FFT 变换区间N 以及对连续信号)(6t x 的采样速度f s ,供实验时参考。
)(1n x 、)(2n x 、)(3n x 、)(4n x 、)(5n x :N=64;
)(6t x :fs=64(Hz ),N=64 。
2.令)(7n x =)(4n x +)(5n x ,用FFT 计算64点离散付里叶变换
)(7k X =DFT[)(7n x ] (1-7)
并根据DFT 的对称性,由)(7k X 求出)(4k X =DFT[)(4n x ] 和)(5k X =DFT[)(5n x ],
并与1中所得结果比较。
[提示:取N=64时,)(4n x =)(4n N x -,)(5n x =-)(5n N x -。]
3.令)(8n x =)(4n x +j )(5n x ,重复2。 五、思考题
1.在N=8和N=16两种情况下,)(2n x 、)(3n x 的幅频特性会相同吗?为什么?
2.如果周期信号的周期预先不知道,如何用FFT 进行分析? 六、实验报告要求
1.简述实验原理及目的。
2.结合实验中所得给定典型序列幅频特性曲线,与理论结合比较,并分析说明误差产生的原因以及用FFT 作谱分析时有关参数的选择方法。
3.总结实验所得主要结论。
4.简要回答思考题。
附一:程序讲解
1、信号产生子程序: ①定义变量类型:
由于FFT 中定义了四个变量(AR 、AI 、N 、M )。因此,信号产生程序中必然有这四个变量。但变量名称不能与子程序相同,所以我们该利用(ar,ai,B,A),其中变量ar,ai 为实型数组,B ,A 为整型变量。
②B 为以2为底A 的对数。 ③选择信号种类:
应用键盘输入命令要求输入信号的编号(1~6),例如为1时进入信号1子程序。 ④产生信号:先使用循环语句,n 从0循环到N-1。判断n 的取值,并按信号要求分别给实部ar(n)、虚部ai(n)赋值。
⑤调用FFT 子程序。
计算|x(n)| 时,用一循环语句n=0, N-1,计算
|x(n)|=22ar ai (1-8)
就完成了对信号1的FFT 变换。信号2~5与信号1相同。特别要注意信号6,由于给出了f s =64Hz ,根据T=1/f s ,可得到
Xa(k)=T ·DFT[x(n)] (1-9)
所以 1/f s DFT[x(n)]=Xa(k) (1-10)
将)(6t x 中t 换成n , 先计算出DFT[x(n)], 再乘以1/f s ,就可以得到DFT[)(6nT x ]。 主程序的框图见图1-1,FFT 流程图见图1-2。 2、FFT 子程序:
FFT 子程序中所需变量为AR 、AI 、M 、N ,其中AR 为信号实部;AI 为信号虚部;N=M
2 ,N 表示变换序列长度。先确定变量类型,N 、M 为整型;AR 、AI 为实型。通过学习课本知道,要进行FFT 变换必须先进行倒序,方法及框图如1-3。
把N/2→LH ,LH →J ,N-2→N 。I 从1循环到N 。 ①如果I>>J ,把LH 赋给K ;
②否则的话X(I)→X(J)→A(I),T →(J)后执行①。再判断J 是否小于K ,如果是则J+K →J ,继续循环;否则J-K →J ,K/2→K ,重新判断。
倒序完成后就可以进行FFT 变换了。设L 为蝶运算是从左到右的运算级数(L=1,2,…,M ),首先用循环语句L=1~M ,分别计算每一级的旋转因子W 。我们已经知道旋转因子的指数P:
P=J*2 (J=0,1,2,…,(n-1)) (1-11)
因此将J 从0循环到2,就可以计算出各级的2个旋转因子。通过蝶形运算规律得知,
序列x(n)经时域抽选(倒序)后,存入数组X中。并且蝶形运算的两个输入数据相距2个点,而
AR(K+B)=AR(K)-TR,AI(K+B)=AI(K)-TI;(1-12)
AR(K)=AR(K)+TR,AI(K)=AI(K)+TI;(1-13)其中TR=AR(K+B)*COS(P)+AI(K+B)*SIN(P),(k=J,N-1,2)。这样一来就可以计算出每一个旋转因子所变换出来的DFT序列了。
FFT子程序中的难点是有三重循环,一为各级蝶形运算;二为各级中的旋转因子;三为各旋转因子的各DFT序列值。弄明白了这三重循环就可以很容易的编程了。
图1-1 主程序框图
图1-2 FFT流程图
图1-3 倒序框图
附二:主程序及绘图子程序
#include
#include
#include
#include
#define PI 3.1415926
#define MAX 512
float AR[MAX],AI[MAX],A[MAX],AP[MAX];
main()
{
int gdriver,gmode;
int i,j,k,M,N;
void DFT_FFT();
void fun1(),fun2(),fun3(),fun4(),fun5(),fun6(),fun7(),fun8(); printf("input M=");
scanf("%d",&M);
N=(int)pow(2,M);
printf("N=%d\n",N);
printf("input the fun:\n");
scanf("%d",&k);
switch(k)
{
case 1:fun1(N);break;
case 2:fun2(N);break;
case 3:fun3(N);break;
case 4:fun4(N);break;
case 5:fun5(N);break;
case 6:fun6(N);break;
case 7:fun7(N);break;
case 8:fun8(N);break;
}
printf("the fun is %d\n",k);
getch();
printf("The values:\n");
for(j=0;j { if (AI[j]= =0.0) {A[j]=AR[j];} else {A[j]=sqrt(pow(AR[j],2)+pow(AI[j],2));} AP[j]=A[j]; printf("AP[%d]=%f",j,A[j]); if(j%2==0) printf("\n"); } getch(); DFT_FFT(AR,AI,M,N); printf("the values of re:\n"); for(j=0;j { A[j]=sqrt(pow(AR[j],2)+pow(AI[j],2)); printf("A[%d]=%f+j%f\n",j,AR[j],AI[j]); } getch(); gdriver=DETECT; initgraph(&gdriver,&gmode," "); setbkcolor(0); setcolor(10); { int m,i,x,y,L; x=50;y=200;i=10; for(L=0;L line(x+L*i,y,x+L*i,y-A[L]*5); x=50;y=400;i=10; line(30,400,609,400); for(m=0;m line(x+m*i,y,x+m*i,y-AP[m]*20); } getch(); closegraph(); } void fun1(int n) { int i; for(i=0;i { AI[i]=0.0; if(i<=3) AR[i]=1.0; else AR[i]=0.0; } } void fun2(int n) { int i; for(i=0;i { if(i<=3) {AR[i]=(i+1); AI[i]=0.0;} else if(i>=4&&i<=7) {AR[i]=(8-i); AI[i]=0.0;} else {AR[i]=0.0; AI[i]=0.0;} } } void fun3(int n) { int i; for(i=0;i { if(i<=3) {AR[i]=(4-i);AI[i]=0.0;} else if(i>=4&&i<=7) {AR[i]=(i-3);AI[i]=0.0;} else {AR[i]=0.0;AI[i]=0.0;} } } void fun4(int n) { } void fun5(int n) { } void fun6(int n) { } void fun7(int n) { } void fun8(int n) { int i; for(i=0;i {AR[i]=cos(PI*i/4);AI[i]=sin(PI*i/8);} } /************************DFT_FFT*************************/ void DFT_FFT(float AR[],float AI[],int m,int n) { } 实验二 用窗函数法设计FIR 数字滤波器 一、实验目的 1.掌握用窗函数法设计FIR 数字滤波器的原理和方法。 2.熟悉线性相位FIR 数字滤波器特征。 3.了解各种窗函数对滤波特性的影响。 二、实验仪器 微型计算机 三、实验原理和方法 如果所希望的滤波器的理想频率响应函数为 )(ωj d e H ,则其对应的单位脉冲响应为 )(n h d = π 21ωωωπ π d e e H j j d )(?- (2-1) 窗函数设计法的基本原理是用有限长单位脉冲响应序列)(n h 逼近)(n h d 。由于)(n h d 往往是无限长序列,且是非因果的,所以用窗函数)(n ω将)(n h d 截断,并进行加权处理,得到: )(n h =)(n h d )(n ω (2-2) )(n h 就作为实际设计的FIR 数字滤波器的单位脉冲响应序列,其频率响应函数) (ωj d e H 为: )(ω j d e H =∑-=-1 )(N n j e n h ω (2-3) 式中,N 为所选窗函数)(n ω的长度。 由第七章可知,用窗函数法设计的滤波器性能取决于窗函数)(n ω的类型及窗口长度N 的取值。设计过程中,要根据对阻带最小衰减和过渡带宽度的要求选择合适的窗函数类型和窗口长度N 。各种类型的窗函数可达到的阻带最小衰减和过渡带宽度见第七章。 这样选定窗函数类型和长度N 后,求出单位脉冲响应)(n h =)(n h d ·)(n ω,并按式 (2-3)求出)(ω j e H 。)(ωj e H 是否满足要求,要进行验算。一般在)(n h 尾部加零使长 度满足于2的整数次幂,以便用FFT 计算)(ω j e H 。如果要观察细节,补零点数增多即可。 如果)(ω j e H 不满足要求,则要重新选择窗函数类型和长度N ,再次验算,直至满足要求。 如果要求线性相位特性,则)(n h 还必须满足 )1()(n N h n h --±= (2-4) 根据上式中的正负号和长度N 的奇偶性又将线性相位FIR 滤波器分成四类。要根据设计的滤波特性正确选择其中一类。例如,要设计线性低通特征,可选择)1()(n N h n h --=一类,而不能选)1()(n N h n h ---=一类。 四、实验内容 1.复习用窗函数法设计FIR数字滤波器一节内容,阅读本实验原理掌握设计步骤。 2.编写程序 ①编写能产生矩型窗、哈明窗、汉宁窗、莱克曼窗的窗函数子程序。 ②编写主程序。主程序框图如图2-1所示,仅供参考。其中幅度特性要求用分贝dB 表示。 图2-1 主程序框图如 设 : [])()(n h DFT k H = (2-4) )()()(K jH k H k H I R += (2-5) )()()(22 k H k H k H I R += (2-6) 画图时,20lg )(k H 打印幅度特性。第k 点对应的频率k N k π ω2=。为使曲线包络更 接近)(ωj e H 的幅度特性曲线,DFT 变换区间要选大些。例如窗口长度N=33时,可通过在 )(n h 末尾补零的方法,使长度变为64,再进行4点DFT ,则可得到更精确的幅度衰减特性 曲线。FFT 子程序和通用绘图子程序参考实验一。 3.上机实验内容 用四种窗函数设计线性相位低通FIR 数字滤波器,截止频率4π ω= c ra d ,N=256。绘 制相应的幅频特性曲线,观察3dB 带宽和20dB 带宽以及阻带最小衰减,比较四种窗函数 对滤波器特性的影响。 设计低通FIR 数字滤波器时,一般以理想低通滤波特性为逼近函数)(ωj d e H ,即 ?????≤<≤=-π ωωωωωαω c c j j d e e H ,0,)( 其中21-=N α (2-8) ) () (sin 21)(21 )(απαωωπ ωπ ωω ωωαπ π ωω--= = = ??- -- n n d e e d e e H n h c n j j n j j d d c c (2-9) 五、思考题 1.如果给定通带截止频率和阻带截止频率以及阻带最小衰减,如何用窗函数法设计线性相位低通滤波器?写出设计步骤。 2.定性说明本实验中3dB 截止频率的理论值在什么位置?是否等于理想低通的截止频率ω? 3.如果要求用窗函数法设计带通滤波器,且给定上、下边带截止频率为1ω和2ω,试求理想带通的单位脉冲响应)(n h 。 六、实验报告要求 1.简述实验目的及原理。 2.按照实验步骤及要求,比较各种情况下的滤波性能,说明窗口长度N 和窗函数类型对滤波特性的影响。 3.总结用窗函数法设计FIR 滤波器的主要特点。 4. 简要回答思考题。 附一:程序讲解 1.定义变量类型 可参照实验一中变量类型,其另外四种窗函数)(n h d 、)(n ω为实型数组。 2.调窗函数: 读入窗口长度N ,用选择语句选择信号种类,四中窗函数分别为1~4,它们的)(n ω如下表: ①计算)(n h : 循环语句(i =0~n-1),)(n h =)(n h *)(n ω,把)(n h 的值赋给)(n h ,0赋给h (n ),循环完毕。 ②调用FFT 子程序: 参考实验一中的FFT 子程序,注意参数相应的改为:)(n h 、)(n h d ,并且不能与主程序相同。 ③计算幅值: 用循环语句 )()()(22n h n h i h i r += (i =0~n-1) (2-10) 由于实验中要求幅值变换成分贝表示,所以再用一循环语句 dBh(i)=20*log (h(i)) (i =0~n-1) (2-11) 显示幅值。 附二:源程序清单 #include #include #include #include #define PI 3.1415926 #define MAX 2048 #define N 51 float Hr[MAX],Hi[MAX],Hk[MAX],Hkxw[MAX],Hd[MAX],wn[MAX]; main() { int i,m,k,n; void GRAPH(); void DFT_FFT(); void HDN(),JXC(),HNC(),HMC(),BLKMC(); m=8; n=(int)pow(2,m); /* DFT-FFT LENGTH */ HDN(n); printf("Please input xh:(1-Rectangle;2-Hanning;3-Hanming;4-Blackman):"); scanf("%d",&k); switch(k) { case 1: JXC(n); break; case 2: HNC(n); break; case 3: HMC(n); break; case 4: BLKMC(n); break; } for(i=0;i {Hr[i]=Hd[i]*wn[i];Hi[i]=0.0;} DFT_FFT(Hr,Hi,m,n); for(i=0;i {Hk[i]=sqrt(pow(Hr[i],2)+pow(Hi[i],2));} for(i=0;i {Hkxw[i]=20*log10(Hk[i]);} GRAPH(Hkxw,n,k); } void GRAPH(float xw[MAX],int nn,int kk) { int gdriver,mode,i; gdriver=DETECT; initgraph(&gdriver,&mode," "); setbkcolor(42); setcolor(30); moveto(30,30); line(30,30,619,30); line(30,30,30,430); for(i=0;i {xw[i]=abs(xw[i]);} for(i=0;i {lineto(30+i*3,30+xw[i]*3);} for(i=30;i<240;i+=30) {line(30,30+i,25,30+i);} for(i=96;i<=386;i+=96) {line(30+i,30,30+i,35);} outtextxy(23,23,"O"); outtextxy(0,34,"(dB)"); outtextxy(0,90,"-20"); outtextxy(0,150,"-40"); outtextxy(0,210,"-60"); outtextxy(130,37," /4"); outtextxy(226,37," /2"); outtextxy(322,37,"3 /4"); outtextxy(420,37," "); if(kk==1) outtextxy(100,400,"--- RECTANGLE WINDOW ---"); if(kk==2) outtextxy(100,400,"--- HANNING WINDOW ---"); if(kk==3) outtextxy(100,400,"--- HANMING WINDOW ---"); if(kk==4) outtextxy(100,400,"--- BLACKMAM WINDOW ---"); outtextxy(100,420,"PRESS ANY KEY TO END."); getch(); setbkcolor(0); setcolor(15); closegraph(); } void HDN(int n) { int i; float a; a=(N-1)/2; for(i=0;i { if(i==a) Hd[i]=0.25; else Hd[i]=sin((PI/4.0)*(i-a))/(float)(PI*(i-a)); } for(i=N;i { Hd[i]=0.0; } } void JXC(int n) { int i; for(i=0;i { if(i else wn[i]=0.0; } } void HNC(int n) { int i; for(i=0;i { if(i else wn[i]=0.0; } } void HMC(int n) { } void BLKMC(int n) { } /************************DFT_FFT*************************/ void DFT_FFT(float AR[],float AI[],int m,int n) { } 题目:基于DSP的FFT程序设计的研究 作者届别 系别专业 指导老师职称 完成时间2013.06 内容摘要 快速傅里叶变(Fas Fourier Tranformation,FFT)是将一个大点数N的DFT分解为若干小点的D F T的组合。将用运算工作量明显降低,从而大大提高离散傅里叶变换(D F T) 的计算速度。因各个科学技术领域广泛的使用了FFT 技术它大大推动了信号处理技术的进步,现已成为数字信号处理强有力的工具,本论文将比较全面的叙述各种快速傅里叶变换算法原理、特点,并完成了基于MATLAB的实现。 关键词:频谱分析;数字信号处理;MATLAB;DSP281x 引言: 1965年,库利(J.W.Cooley)和图基(J.W.Tukey)在《计算数学》杂志上发表了“机器计算傅立叶级数的一种算法”的文章,这是一篇关于计算DFT的一种快速有效的计算方法的文章。它的思路建立在对DFT运算内在规律的认识之上。这篇文章的发表使DFT的计算量大大减少,并导致了许多计算方法的发现。这些算法统称为快速傅立叶变换(Fast Fourier Transform),简称FFT,1984年,法国的杜哈梅尔(P.Dohamel)和霍尔曼(H.Hollmann)提出的分裂基快速算法,使运算效率进一步提高。FFT即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。 随着科学的进步,FFT算法的重要意义已经远远超过傅里叶分析本身的应用。FFT算法之所以快速,其根本原因在于原始变化矩阵的多余行,此特性也适用于傅里叶变换外的其他一些正交变换,例如,快速沃尔什变换、数论变换等等。在FFT的影响下,人们对于广义的快速正交变换进行了深入研究,使各种快速变换在数字信号处理中占据了重要地位。因此说FFT对数字信号处理技术的发展起了重大推动作用。 信号处理中和频谱分析最为密切的理论基础是傅立叶变换(Fouriertransform,FT)。快速傅立叶变换(FFT)和数字滤波是数字信号处理的基本内容。信号时域采样理论实现了信号时域的离散化,而离散傅里叶变换理论实现了频域离散化,因而开辟了数字技术在频域处理信号的新途径,推进了信号的频谱分析技术向更广的领域发展。 1.信号的频谱分析 如果信号频域是离散的,则信号在时域就表现为周期性的时间函数;相反信号在时域上是离散的,则该信号在频域必然表现为周期的频率函数。不难设想,一个离散周期序列,它一定具有既是周期又是离散的频谱。有限长序列的离散傅里叶变换和周期序列的离散傅里叶级数本质是一样的。因而有限长序列的离散傅里叶变换的定义为:x(n)和X(k)是一个有限长序列的离散傅里叶变换对。 2.1 clc close all; n=0:15; p=8;q=2; x=exp(-(n-p.^2/q; figure(1; subplot(3,1,1; stem(n,x; title('exp(-(n-p^2/q,p=8,q=2'; xk1=fft(x,16; q=4; x=exp(-(n-p.^2/q; subplot(3,1,2; xk2=fft(x,16; stem(n,x; title('exp(-(n-p^2/q,p=8,q=4'; q=8; x=exp(-(n-p.^2/q; xk3=fft(x,16; subplot(3,1,3; stem(n,x; title('exp(-(n-p^2/q,p=8,q=8';%时域特性figure(2; subplot(3,1,1; stem(n,abs(xk1; title('exp(-(n-p^2/q,p=8,q=2'; subplot(3,1,2; stem(n,abs(xk2; title('exp(-(n-p^2/q,p=8,q=4'; subplot(3,1,3; stem(n,abs(xk3; title('exp(-(n-p^2/q,p=8,q=8';%频域特性%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%% p=8;q=8; figure(3; subplot(3,1,1; stem(n,x; title('exp(-(n-p^2/q,p=8,q=8'; xk1=fft(x,16; p=13; x=exp(-(n-p.^2/q; subplot(3,1,2; xk2=fft(x,16; stem(n,x; title('exp(-(n-p^2/q,p=13,q=8'; p=14; x=exp(-(n-p.^2/q; xk3=fft(x,16; subplot(3,1,3; stem(n,x; title('exp(-(n-p^2/q,p=14,q=8';%时域特性figure(4; subplot(3,1,1; stem(n,abs(xk1; title('exp(-(n-p^2/q,p=8,q=8'; subplot(3,1,2; stem(n,abs(xk2; title('exp(-(n-p^2/q,p=13,q=8'; subplot(3,1,3; 实验二 IIR数字滤波器设计及软件实现 1.实验目的 (1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法; (2)学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具fdatool)设计各种IIR数字滤波器,学会根据滤波需求确定滤波器指标参数。 (3)掌握IIR数字滤波器的MATLAB实现方法。 (3)通过观察滤波器输入输出信号的时域波形及其频谱,建立数字滤波的概念。 2.实验原理 设计IIR数字滤波器一般采用间接法(脉冲响应不变法和双线性变换法),应用最广泛的是双线性变换法。基本设计过程是:①先将给定的数字滤波器的指标转换成过渡模拟滤波器的指标;②设计过渡模拟滤波器;③将过渡模拟滤波器系统函数转换成数字滤波器的系统函数。MATLAB信号处理工具箱中的各种IIR数字滤波器设计函数都是采用双线性变换法。第六章介绍的滤波器设计函数butter、cheby1 、cheby2 和ellip可以分别被调用来直接设计巴特沃斯、切比雪夫1、切比雪夫2和椭圆模拟和数字滤波器。本实验要求读者调用如上函数直接设计IIR数字滤波器。 本实验的数字滤波器的MATLAB实现是指调用MATLAB信号处理工具箱函数filter对给定的输入信号x(n)进行滤波,得到滤波后的输出信号y(n)。 3. 实验内容及步骤 (1)调用信号产生函数mstg产生由三路抑制载波调幅信号相加构成的复合信号st,该函数还会自动绘图显示st的时域波形和幅频特性曲线,如图1所示。由图可见,三路信号时域混叠无法在时域分离。但频域是分离的,所以可以通过滤波的方法在频域分离,这就是本实验的目的。 图1 三路调幅信号st的时域波形和幅频特性曲线 (2)要求将st中三路调幅信号分离,通过观察st的幅频特性曲线,分别确定可以分离st中三路抑制载波单频调幅信号的三个滤波器(低通滤波器、带通滤波器、高通滤波器)的通带截止频率和阻带截止频率。要求滤波器的通带最大衰减为0.1dB,阻带最小衰减为 实验五:FIR数字滤波器设计与软件实现 信息学院 10电本2班王楚炘 2010304224 10.5.1 实验指导 1.实验目的 (1)掌握用窗函数法设计FIR数字滤波器的原理和方法。 (2)掌握用等波纹最佳逼近法设计FIR数字滤波器的原理和方法。 (3)掌握FIR滤波器的快速卷积实现原理。 (4)学会调用MATLAB函数设计与实现FIR滤波器。 2.实验内容及步骤 (1)认真复习第七章中用窗函数法和等波纹最佳逼近法设计FIR数字滤波器的原理; (2)调用信号产生函数xtg产生具有加性噪声的信号xt,并自动显示xt及其频谱,如图10.5.1所示; 图10.5.1 具有加性噪声的信号x(t)及其频谱如图(3)请设计低通滤波器,从高频噪声中提取xt中的单频调幅信号,要求信号幅频失真小于0.1dB,将噪声频谱衰减60dB。先观察xt的频谱,确定滤波器指标参数。 (4)根据滤波器指标选择合适的窗函数,计算窗函数的长度N, 调用MATLAB函数fir1设计一个FIR低通滤波器。并编写程序,调用MATLAB快速卷积函数fftfilt实现对xt的滤波。绘图显示滤波器的频响特性曲线、滤波器输出信号的幅频特性图和时域波形图。 (4)重复(3),滤波器指标不变,但改用等波纹最佳逼近法,调用MATLAB函数remezord和remez设计FIR数字滤波器。并比较两种设计方法设计的滤波器阶数。 提示:MATLAB函数fir1和fftfilt的功能及其调用格式请查阅本书 第7章和第?章; 采样频率Fs=1000Hz,采样周期T=1/Fs; 根据图10.6.1(b)和实验要求,可选择滤波器指标参数:通带截止频率fp=120Hz,阻带截至频率fs=150Hz,换算成数字频率,通带截止频率,通带最大衰为0.1dB,阻带截至频率,阻带最小衰为60dB。]实验程序框图如图10.5.2所示,供读者参考。 Fs=1000,T=1/Fs xt=xtg 产生信号xt, 并显示xt及其频谱 用窗函数法或等波纹最佳逼近法 设计FIR滤波器hn 对信号xt滤波:yt=fftfilt(hn,xt) 1、计算并绘图显示滤波器损耗函数 2、绘图显示滤波器输出信号yt End 图10.5.2 实验程序框图 4.思考题 (1)如果给定通带截止频率和阻带截止频率以及阻带最小衰减,如何用窗函数法设计线性相位低通滤波器?请写出设计步骤. 答:用窗函数法设计线性相位低通滤波器的设计步骤: a.根据对阻带衰减及过渡带的指标要求,选择窗函数的类型,并估计窗口的长度N; b.构造希望逼近的频率响应函数; c.计算h d(n); d.加窗得到设计结果h(n)=h d(n)w(n)。 (2)如果要求用窗函数法设计带通滤波器,且给定通带上、下截止频率为和,阻带上、下截止频率为和,试求理想带通滤波器的截止频率。 答:希望逼近的理想带通滤波器的截止频率分别为: 实验一熟悉Matlab环境 一、实验目的 1.熟悉MATLAB的主要操作命令。 2.学会简单的矩阵输入和数据读写。 3.掌握简单的绘图命令。 4.用MATLAB编程并学会创建函数。 5.观察离散系统的频率响应。 二、实验内容 认真阅读本章附录,在MA TLAB环境下重新做一遍附录中的例子,体会各条命令的含义。在熟悉了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。 clear all; 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; n=1:4; subplot(4,2,1);stem(n,a); xlabel('n');xlim([0 5]);ylabel('A'); subplot(4,2,2);stem(n,b); xlabel('n');xlim([0 5]);ylabel('B'); subplot(4,2,3);stem(n,c); xlabel('n');xlim([0 5]);ylabel('C'); subplot(4,2,4);stem(n,d); xlabel('n');xlim([0 5]);ylabel('D'); subplot(4,2,5);stem(n,e); xlabel('n');xlim([0 5]);ylabel('E'); subplot(4,2,6);stem(n,f); xlabel('n');xlim([0 5]);ylabel('F'); subplot(4,2,7);stem(n,g); xlabel('n');xlim([0 5]);ylabel('G'); (2)用MATLAB实现下列序列: a) x(n)=0.8n0≤n≤15 b) x(n)=e(0.2+3j)n0≤n≤15 c) x(n)=3cos(0.125πn+0.2π)+2sin(0.25πn+0.1π) 0≤n≤15 d) 将c)中的x(n)扩展为以16为周期的函数x16(n)=x(n+16),绘出四个周期。 e) 将c)中的x(n)扩展为以10为周期的函数x10(n)=x(n+10),绘出四个周期。 clear all; N=0:15; % a) x(n)=0.8n 0≤n≤15 xa=0.8.^N; 数字信号处理的步骤与注意事项,并编写1024个采样点的FFT C语言程序1. 数字信号处理 1.1 数字信号处理概述 数字信号处理是研究如何用数字或符号序列来表示信号以及如何对这些序列进行处理的一门学科。随着计算机技术的发展,数字信号处理技术得到了越来越广泛的应用,它已成为现代科学技术必不可少的工具。数字信号是数据序列,其处理实际上就是进行各种数学运算,如加、减、乘以及各种逻辑运算等等。因此,数字信号处理既可以是软件处理也可以是硬件处理。所谓软件处理,就是对所需要的运算编制程序,然后在计算机上实现,其处理灵活、方便。所谓硬件处理,就是用加法器、乘法器、延时器以及它们的各种组合来构成数字电路,以实现所需要的运算。硬件处理显然不如软件处理灵活方便,但能对数字信号进行实时处理。近年来日益广泛采用的各种数字信号处理器(如TI TMS320系列、Philps Trimedia系列等)可以认为是软硬件处理方式的结合,这种处理时用数字信号处理芯片以及存储器来组成硬件电路,所需要的运算靠特定的汇编语言编程来实现。因此,采用数字信号处理器既方便灵活,又能做到实时处理,所以数字信号处理器(DSP)已经越来越广泛地应用于包括通信在内的各个领域之中。 1.2 数字信号处理的优点 (1)精度高 数字系统的特性不因环境的变化而变化,计算精度是模拟系统所无法相比的,运算位数由8位提高到16位、32位、64位。 (2)可靠性高 模拟系统中各种参数受温度、环境影响较大,因而易出现感应、杂散效应,甚至会出现震荡等等;而数字系统受温度、环境影响较小。模拟信号受到干扰即产生失真,而数字信号由于只有两种状态,因此,所受的干扰只要在一定范围以内,就不会产生影响,这就是说,数字信号抗干扰能力强。另外,如果用数字信号进行传输,在中继站还可以再生。总的说来,信号的数字处理可靠性高。(3)灵活性强 可以通过改变数字信号系统的参数来改变系统的性能。数字信号的灵活性还表现在可以利用一套计算设备同时处理多路相互独立的信号,即所谓的“时分复用”,这在数字电话系统中是非常有用的技术。 (4)便于大规模集成化 数字部件具有高度的规范性,易于实现大规模集成化和大规模生产,数字系统体积小、重量轻。 (5)数字信号便于加密处理 由于数字信号实际上为数据序列,因此便于加密运算处理。 数字信号处理实验实验一离散时间信号与系统及MA TLAB实现 1.单位冲激信号: n = -5:5; x = (n==0); subplot(122); stem(n, x); 2.单位阶跃信号: x=zeros(1,11); n0=0; n1=-5; n2=5; n = n1:n2; x(:,n+6) = ((n-n0)>=0); stem(n,x); 3.正弦序列: n = 0:1/3200:1/100; x=3*sin(200*pi*n+1.2); stem(n,x); 4.指数序列 n = 0:1/2:10; x1= 3*(0.7.^n); x2=3*exp((0.7+j*314)*n); subplot(221); stem(n,x1); subplot(222); stem(n,x2); 5.信号延迟 n=0:20; Y1=sin(100*n); Y2=sin(100*(n-3)); subplot(221); stem(n,Y1); subplot(222); stem(n,Y2); 6.信号相加 X1=[2 0.5 0.9 1 0 0 0 0]; X2=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7]; X=X1+X2; stem(X); 7.信号翻转 X1=[2 0.5 0.9 1]; n=1:4; X2=X1(5-n); subplot(221); stem(n,X1); subplot(222); stem(n,X2); 8.用MATLAB计算序列{-2 0 1 –1 3}和序列{1 2 0 -1}的离散卷积。a=[-2 0 1 -1 3]; b=[1 2 0 -1]; c=conv(a,b); M=length(c)-1; n=0:1:M; stem(n,c); xlabel('n'); ylabel('幅度'); 9.用MA TLAB计算差分方程 当输入序列为时的输出结果。 N=41; a=[0.8 -0.44 0.36 0.22]; b=[1 0.7 -0.45 -0.6]; x=[1 zeros(1,N-1)]; k=0:1:N-1; y=filter(a,b,x); stem(k,y) xlabel('n'); ylabel('幅度') 10.冲激响应impz N=64; a=[0.8 -0.44 0.36 0.22]; 什么是数字信号处理?有哪些应用? 利用数字计算机或专用数字硬件、对数字信号所进行的一切变换或按预定规则所进行的一切加工处理运算。 例如:滤波、检测、参数提取、频谱分析等。 对于DSP:狭义理解可为Digital Signal Processor 数字信号处理器。广义理解可为Digital Signal Processing 译为数字信号处理技术。在此我们讨论的DSP的概念是指广义的理解。 数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。 信号处理的实质是对信号进行变换。 信号处理的目的是获取信号中包含的有用信息,并用更直观的方式进行表达。 DSP的应用几乎遍及电子学每一个领域。 ▲通用数字信号处理器:自适应滤波,卷积,相关,数字滤波,FFT, 希尔伯特变换,波形生成,窗函数等等。 ▲语音信号处理:语音增强、识别、合成、编码、信箱等,文字/语音转换 ▲图形/图像处理:三维动画,图象鉴别/增强/压缩/传输,机器人视觉等等图 ▲特殊应用数字信号处理:振动和噪声分析与处理,声纳和雷达信号处理, 通信信号处理, 地震信号分析与处理,汽车安全及全球定位,生物医学工程等等。 在医疗、军事、汽车等行业,以及通信市场、消费类电子产品等中具有广阔的市场前景。 数字信号处理系统的基本组成:前置预滤波器(PrF)、a/d变换器(ADC)、数字信号处理器(DSP)、d/a变换器(DAC)、模拟滤波器(PoF) 数字信号处理特点: 1.大量的实时计算(FIR IIR FFT), 2.数据具有高度重复(乘积和操作在滤波、卷积和FFT中等常见) 数字信号处理技术的意义、内容 数字信号处理技术是指数字信号处理理论的应用实现技术,它以数字信号处理理论、硬件技术、软件技术为基础和组成,研究数字信号处理算法及其实现方法。 意义: 在21世纪,数字信号处理是影响科学和工程最强大的技术之一 它是科研人员和工程师必须掌握的一门技巧 DSP芯片及其特点 ▲采用哈佛结构体系:独立的程序和数据总线,一个机器周期可同时进行程序读出和数据存取。对应的:冯·诺依曼结构。 ▲采用流水线技术: ▲硬件乘法器:具有硬件连线的高速“与或”运算器 ▲多处理单元:DSP内部包含多个处理单元。 ▲特殊的DSP指令:指令具有多功能,一条指令完成多个动作;如:倒位序指令等 ▲丰富的外设▲功耗低:一般DSP芯片功耗为0.5~4W。采用低功耗技术的DSP芯片只有0.1W/3.3V、1.6V (电池供电) DSP芯片的类别和使用选择 ▲按特性分:以工作时钟和指令类型为指标分类▲按用途分:通用型、专用型DSP芯片 ▲按数据格式分:定点、浮点各厂家还根据DSP芯片的CPU结构和性能将产品分成若干系列。 TI公司的TMS320系列DSP芯片是目前最有影响、最为成功的数字信号处理器,其产品销量一直处于领先地位,公认为世界DSP霸主。 ?目前市场上的DSP芯片有: ?美国德州仪器公司(TI):TMS320CX系列占有90% 一、实验目的 1. 通过本次实验回忆并熟悉MATLAB这个软件。 2. 通过本次实验学会如何利用MATLAB进行序列的简单运算。 3. 通过本次实验深刻理解理论课上的数字信号处理的一个常见方法——对时刻n的样本附近的一些样本求平均,产生所需的输出信号。 3. 通过振幅调制信号的产生来理解载波信号与调制信号之间的关系。 二、实验内容 1. 编写程序在MATLAB中实现从被加性噪声污染的信号中移除噪声的算法,本次试验采用三点滑动平均算法,可直接输入程序P1.5。 2. 通过运行程序得出的结果回答习题Q1.31-Q1.33的问题,加深对算法思想的理解。 3. 编写程序在MATLAB中实现振幅调制信号产生的算法,可直接输入程序P1.6。 4. 通过运行程序得出的结果回答习题Q1.34-Q1.35的问题,加深对算法思想的理解。 三、主要算法与程序 1. 三点滑动平均算法的核心程序: %程序P1.5 %通过平均的信号平滑 clf; R=51; d=0.8*(rand(R,1)-0.5);%产生随噪声 m=0:R-1; s=2*m.*(0.9.^m);%产生为污染的信号 x=s+d';%产生被噪音污染的信号 subplot(2,1,1); plot(m,d','r-',m,s,'g--',m,x,'b-.'); xlabel('时间序号n');ylabel('振幅'); legend('d[n]','s[n]','x[n]'); x1=[0 0 x];x2=[0 x 0];x3=[x 0 0]; y=(x1+x2+x3)/3; subplot(2,1,2); plot(m,y(2:R+1),'r-',m,s,'g--'); legend('y[n]','s[n]'); xlabel('时间序号n');ylabel('振幅'); 2. 振幅调制信号的产生核心程序:(由于要几个结果,因此利用subplot函数画图) %程序P1.6 %振幅调制信号的产生 n=0:100; m=0.1;fH=0.1;fL=0.01; m1=0.3;fH1=0.3;fL1=0.03; xH=sin(2*pi*fH*n); xL=sin(2*pi*fL*n); y=(1+m*xL).*xH; xH1=sin(2*pi*fH1*n); xL1=sin(2*pi*fL1*n); y1=(1+m1*xL).*xH; y2=(1+m*xL).*xH1; y3=(1+m*xL1).*xH; subplot(2,2,1); stem(n,y); grid; xlabel('时间序号n');ylabel('振幅');title('m=0.1;fH=0.1;fL=0.01;'); subplot(2,2,2); stem(n,y1); grid; xlabel('时间序号n');ylabel('振幅');title('m=0.3;fH=0.1;fL=0.01;'); subplot(2,2,3); stem(n,y2); grid; xlabel('时间序号n');ylabel('振幅');title('m=0.3;fH=0.3;fL=0.01;'); subplot(2,2,4); stem(n,y3); grid; 实验一 IIR数字滤波器设计及软件实现 一、实验目的 (1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法; (2)学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具fdatool)设计各种IIR数字滤波器,学会根据滤波需求确定滤波器指标参数。 (3)掌握IIR数字滤波器的MATLAB实现方法。 (3)通过观察滤波器输入输出信号的时域波形及其频谱,建立数字滤波的概念。 二、实验原理 设计IIR数字滤波器一般采用间接法(脉冲响应不变法和双线性变换法),应用最广泛的是双线性变换法。基本设计过程是:①先将给定的数字滤波器的指标转换成过渡模拟滤波器的指标;②设计过渡模拟滤波器;③将过渡模拟滤波器系统函数转换成数字滤波器的系统函数。MATLAB信号处理工具箱中的各种IIR数字滤波器设计函数都是采用双线性变换法。第六章介绍的滤波器设计函数butter、cheby1 、cheby2 和ellip可以分别被调用来直接设计巴特沃斯、切比雪夫1、切比雪夫2和椭圆模拟和数字滤波器。本实验要求同学调用如上函数直接设计IIR数字滤波器。 本实验的数字滤波器的MATLAB实现是指调用MATLAB信号处理工具箱函数filter对给定的输入信号x(n)进行滤波,得到滤波后的输出信号y(n)。 三、实验内容及步骤 (1)调用信号产生函数mstg,产生由三路抑制载波调幅信号相加构成的复合信号st,该函数还会自动绘图显示st的时域波形和幅频特性曲线,如图1-1所示。由图可见,三路信号时域混叠无法在时域分离。但频域是分离的,所以可以通过滤波的方法在频域分离,这就是本实验的目的。 图1-1 三路调幅信号st 的时域波形和幅频特性曲线 (2)要求将st 中三路调幅信号分离,通过观察st 的幅频特性曲线,分别确定可以分离st 中三路抑制载波单频调幅信号的三个滤波器(低通滤波器、带通滤波器、高通滤波器)的通带截止频率和阻带截止频率。要求滤波器的通带最大衰减为0.1dB,阻带最小衰减为60dB 。 提示:抑制载波单频调幅信号的数学表示式为 0001()cos(2)cos(2)[cos(2())cos(2())]2 c c c s t f t f t f f t f f t ππππ==-++ 其中,cos(2)c f t π称为载波,f c 为载波频率,0cos(2)f t π称为单频调制信号,f 0为调制正弦波信号频率,且满足0c f f >。由上式可见,所谓抑制载波单频调幅信号,就是2个正弦信号相乘,它有2个频率成分:和频0c f f +和差频0c f f -,这2个频率成分关于载波频率f c 对称。所以,1路抑制载波单频调幅信号的频谱图是关于载波频率f c 对称的2根谱线,其中没有载频成分,故取名为抑制载波单频调幅信号。容易看出,图1-1中三路调幅信号的载波频率分别为250Hz 、500Hz 、1000Hz 。如果调制信号m(t)具有带限连续频谱,无直流成分,则()()cos(2)c s t m t f t π=就是一般的抑制载波调幅信号。其频谱图是关于载波频率f c 对称的2个边带(上下边带),在专业课通信原理中称为双边带抑制载波 (DSB-SC) 调幅信号,简称双边带 (DSB) 信号。如果调制信号m(t)有直流成分,则()()cos(2)c s t m t f t π=就是一般的双边带调幅信号。其频谱图是关于载波频率f c 对称的2个边带(上下边带),并包含载频成分。 数字信号处理课程设计 设计题目: 姓名: 学号: 院系班级: 组次: 指导教师: 时间:2015年11月21日——2015年12月6日 摘要 基于 MATLAB 的图像边缘检测算法的研究和实现 图像边缘是图像的最基本的特征。所谓边缘,就是指图像局部强度变化最明显的部分,存在于区域与区域、目标与目标、目标与背景、基元与基元之间,包含有图像处理中用于识别的关键信息。边缘检测是数字图像处理中,最基础也是最重要的环节之一。本文介绍了六种经典的边缘检测算子,包括 Roberts 算子,Sobel 算子,Canny算子,Prewitt 算子,LOG 算法。并且利用 MATLAB 系统所提供的相关函数等,对同一副图像结合用这些不同的算子分别进行处理,分析并得到他们处理图像的特点。比较传统的边缘检测算子,因为是基于图像函数的一阶导数进行考察的,因而它们具有共同的特点是计算简单、速度较快,但是对噪声都比较敏感。LOG 算法和 Canny算法,都是先对图像进行平滑去噪,抗噪性能较好,但是会损失一些边缘信息,其中 LOG算法比较适合处理渐变灰度图像,而 Canny 算子更适合处理阶跃型边缘图像。小波变换边缘检测法,则能够很好的保留图像的边缘信息,更适合处理小阵列图像。 关键词: MATLAB;图像处理;边缘检测;微分算子 目录 第一章绪论 (4) 1.1设计目的与要求 (4) 1.2叙述国内外研究动态 (5) 第二章软件设计- 基于MatLab的边缘检测算法 (6) 2.1 MatLab简介 (6) 2.2边缘检测算法原理 (7) 2.2.1 Roberts 边缘算子 (7) 2.2.2 Sobel 边缘算子 (8) 2.2.3 Prewitt 边缘算子 (8) 2.2.4 Log 边缘算子 (8) 2.2.5 Canny 边缘算子 (8) 2.3边缘检测算法--测试程序 (9) 第三章实验结果及分析 (13) 3.1 Roberts算子检测图像边缘的实现 (13) 3.2 Sobel算子检测图像边缘的实现 (14) 3.3 Prewitt算子检测图像边缘的实现 (15) 3.4高斯一拉普拉斯LOG算子检测图像边缘的实现 (16) 3.5 Canny算子检测图像边缘的实现 (17) 第四章总结与心得体会 (20) 参考文献 (21) 致谢 (22) 实验一 MATLAB 仿真软件的基本操作命令和使用方法 实验容 1、帮助命令 使用 help 命令,查找 sqrt (开方)函数的使用方法; 2、MATLAB 命令窗口 (1)在MATLAB 命令窗口直接输入命令行计算3 1)5.0sin(21+=πy 的值; (2)求多项式 p(x) = x3 + 2x+ 4的根; 3、矩阵运算 (1)矩阵的乘法 已知 A=[1 2;3 4], B=[5 5;7 8],求 A^2*B (2)矩阵的行列式 已知A=[1 2 3;4 5 6;7 8 9],求A (3)矩阵的转置及共轭转置 已知A=[1 2 3;4 5 6;7 8 9],求A' 已知B=[5+i,2-i,1;6*i,4,9-i], 求B.' , B' (4)特征值、特征向量、特征多项式 已知A=[1.2 3 5 0.9;5 1.7 5 6;3 9 0 1;1 2 3 4] ,求矩阵A的特征值、特征向量、特征多项式; (5)使用冒号选出指定元素 已知:A=[1 2 3;4 5 6;7 8 9];求A 中第3 列前2 个元素;A 中所有列第2,3 行的元素; 4、Matlab 基本编程方法 (1)编写命令文件:计算1+2+…+n<2000 时的最大n 值; (2)编写函数文件:分别用for 和while 循环结构编写程序,求 2 的0 到15 次幂的和。 5、MATLAB基本绘图命令 (1)绘制余弦曲线 y=cos(t),t∈[0,2π] (2)在同一坐标系中绘制余弦曲线 y=cos(t-0.25)和正弦曲线 y=sin(t-0.5), t∈[0,2π] (3)绘制[0,4π]区间上的 x1=10sint 曲线,并要求: (a)线形为点划线、颜色为红色、数据点标记为加号; (b)坐标轴控制:显示围、刻度线、比例、网络线 (c)标注控制:坐标轴名称、标题、相应文本; >> clear; 数字信号处理软件实验 MATLAB 仿真 2015年12月16日 实验一:数字信号的 FFT 分析 ● 实验目的 通过本次实验,应该掌握: (a) 用傅立叶变换进行信号分析时基本参数的选择。 (b) 经过离散时间傅立叶变换(DTFT )和有限长度离散傅立叶变换(DFT )后信号频谱上的区别,前者 DTFT 时间域是离散信号,频率域还是连续的,而 DFT 在两个域中都是离散的。 (c) 离散傅立叶变换的基本原理、特性,以及经典的快速算法(基2时间抽选法),体会快速算法的效率。 (d) 获得一个高密度频谱和高分辨率频谱的概念和方法,建立频率分辨率和时间分辨率的概念,为将来进一步进行时频分析(例如小波)的学习和研究打下基础。 (e) 建立 DFT 从整体上可看成是由窄带相邻滤波器组成的滤波器组的概念,此概念的一个典型应用是数字音频压缩中的分析滤波器,例如 DVD AC3 和MPEG Audio 。 ● 实验内容及要求 ? 离散信号的频谱分析 设信号 此信号的0.3pi 和 0.302pi 两根谱线相距很近,谱线 0.45pi 的幅度很小,请选择合适的序列长度 N 和窗函数,用 DFT 分析其频谱,要求得到清楚的三根谱线。 ? DTMF 信号频谱分析 用计算机声卡采用一段通信系统中电话双音多频(DTMF )拨号数字 0~9的数据,采用快速傅立叶变换(FFT )分析这10个号码DTMF 拨号时的频谱。 00010450303024().*cos(.)sin(.)cos(.)x n n n n ππππ=+-- ●MATLAB代码及结果 ?离散信号的频谱分析 clf; close all; N=1000; n=1:1:N; x=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4); y=fft(x,N); mag=abs(y); w=2*pi/N*[0:1:N-1]; stem(w/pi,mag); axis([0.25 0.5 0 2]); xlabel('频率'); ylabel('X(k)'); grid on; 《数字信号处理》复习题 一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。每小题2分) 1.在对连续信号均匀采样时,若采样角频率为Ωs,信号最高截止频率为Ωc,则折叠频率为( D)。 A. Ωs B. Ωc C. Ωc/2 D. Ωs/2 2. 若一线性移不变系统当输入为x(n)=δ(n)时输出为y(n)=R3(n),则当输入为u(n)-u(n-2)时输出为( C)。 A. R3(n) B. R2(n) C. R3(n)+R3(n-1) D. R2(n)+R2(n-1) 3. 一个线性移不变系统稳定的充分必要条件是其系统函数的收敛域包含( A)。 A. 单位圆 B. 原点 C. 实轴 D. 虚轴 4. 已知x(n)=δ(n),N点的DFT[x(n)]=X(k),则X(5)=( B)。 A. N B. 1 C. 0 D. - N 5. 如图所示的运算流图符号是( D)基2 FFT算法的蝶形运算流图符号。 A. 按频率抽取 B. 按时间抽取 C. 两者都是 D. 两者都不是 6. 直接计算N点DFT所需的复数乘法次数与( B)成正比。 A. N B. N2 C. N3 D. Nlog2N 7. 下列各种滤波器的结构中哪种不是I I R滤波器的基本结构( D)。 A. 直接型 B. 级联型 C. 并联型 D. 频率抽样型 8. 以下对双线性变换的描述中正确的是( B)。 A. 双线性变换是一种线性变换 B. 双线性变换可以用来进行数字频率与模拟频率间的变换 C. 双线性变换是一种分段线性变换 D. 以上说法都不对 9. 已知序列Z变换的收敛域为|z|>1,则该序列为( B)。 A. 有限长序列 B. 右边序列 C. 左边序列 D. 双边序列 10. 序列x(n)=R5(n),其8点DFT记为X(k),k=0,1,…,7,则X(0)为( D)。 A. 2 B. 3 1. 矩形窗: 程序代码: wp=0.2*pi; wst=0.3*pi; tr_width=wst-wp; N(1)=ceil(1.8*pi/tr_width)+1; w_boxcar=boxcar(N(1))'; N(2)=ceil(6.2*pi/tr_width)+1; w_hanning=hanning(N(2))'; N(3)=ceil(6.6*pi/tr_width)+1; w_hamming=hamming(N(3))'; N(4)=ceil(11*pi/tr_width)+1; w_blackman=blackman(N(4))'; N(5)=ceil((50-7.95)/(2.285*tr_width)+1); w_kaiser=kaiser(N(5),0.1102*(50-8.7))'; n=0:(N(1)-1); wc=(wp+wst)/2; alpha=(N(1)-1)/2; hd=(wc/pi)*sinc(wc/pi*(n-alpha)); h=hd.*w_boxcar; figure(1); subplot(221);stem(n,hd,'filled'); axis tight;xlabel('n');ylabel('hd(n)'); [Hr,w1]=zerophase(h); subplot(222);plot(w1/pi,Hr); axis tight;xlabel('\omega/\pi');ylabel('H(\omega)'); subplot(223);stem(n,h,'filled'); axis tight;xlabel('n');ylabel('h(n)'); [H,w]=freqz(h,1); subplot(224);plot(w/pi,20*log10(abs(H)/max(abs(H)))); xlabel('\omega/\pi');ylabel('db'); grid on 程序结果: DSP运行实验报告 一、实验目的 熟悉CCS软件仿真下,DSP程序的下载和运行;熟悉借助单片机的DSP程序下载和运行; 熟悉借助仿真器的DSP程序下载和运行;熟悉与DSP程序下载运行相关的CCS编程环境。 二、实验原理 CCS软件仿真下,借用计算机的资源仿真DSP的内部结构,可以模拟DSP程序的下载和运行。 如果要让程序在实验板的DSP中运行、调试和仿真,可以用仿真器进行DSP程序下载和运行。初学者也可以不用仿真器来使用这款实验板,只是不能进行程序调试和仿真。 在本实验板的作用中,单片机既是串口下载程序的载体,又是充当DSP 的片外存储器(相对于FLASH),用于固化程序。 三、实验设备、仪器及材料 安装有WINDOWS XP操作系统和CCS3.3的计算机。 四、实验步骤(按照实际操作过程) 1、CCS软件仿真下,DSP程序的下载和运行。 第一步:安装CCS,如果不使用仿真器,CCS 的运行环境要设置成一个模拟仿真器(软仿真)。 第二步:运行CCS,进入CCS 开发环境。 第三步:打开一个工程。 将实验目录下的EXP01目录拷到D:\shiyan下(目录路径不能有中文),用[Project]\[Open]菜单打开工程,在“Project Open”对话框中选 EXP01\CPUtimer\CpuTimer.pjt,选“打开”, 第四步:编译工程。 在[Project]菜单中选“Rebuild All”,生成CpuTimer.out文件。 第五步:装载程序。 用[File]\[Load Program]菜单装载第四步生成CpuTimer.out文件,在当前工程目录中的Debug 文件夹中找到CpuTimer.out文件,选中,鼠标左键单击“打开”。 数字信号处理练习题 一、填空题 1、一个线性时不变因果系统的系统函数为()11 111-----=az z a z H ,若系统稳定则a 的取值范围为 。 2、输入()()n n x 0cos ω=中仅包含频率为0ω的信号,输出()()n x n y 2 =中包含的频率为 。 3、DFT 与DFS 有密切关系,因为有限长序列可以看成周期序列的 ,而周期序列可以看成有限长序列的 。 4、对长度为N 的序列()n x 圆周移位m 位得到的序列用()n x m 表示,其数学表达式为()n x m = ,它是 序列。 5、对按时间抽取的基2—FFT 流图进行转置,即 便得到按频率抽取的基2—FFT 流图。 6、FIR 数字滤波器满足线性相位条件()()0,≠-=βτωβωθ时,()n h 满足关系式 。 7、序列傅立叶变换与其Z 变换的关系为 。 8、已知()113--= z z z X ,顺序列()n x = 。 9、()()1-z H z H 的零、极点分布关于单位圆 。 10、序列()n R 4的Z 变换为 ,其收敛域为 ;已知左边序列()n x 的Z 变换是()()()2110--= z z z z X ,那么其收敛域为 。 11、使用DFT 分析模拟信号的频谱时,可能出现的问题有 、栅栏效应和 。 12、无限长单位冲激响应滤波器的基本结构有直接型, 和 三种。 13、如果通用计算机的速度为平均每次复数乘需要s μ5,每次复数加需要s μ1,则在此计算机上计算210点的基2FFT 需要 级蝶形运算,总的运算时间是 s μ。 14、线性系统实际上包含了 和 两个性质。 15、求z 反变换通常有围线积分法、 和 等方法。 16、有限长序列()()()()()342312-+-+-+=n n n n n x δδδδ,则圆周移位()()()n R n x N N 2+= 。 17、直接计算L N 2=(L 为整数)点DFT 与相应的基-2 FFT 算法所需要的复数乘法次数分别为 和 。 实验一熟悉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。 实验程序: A=[1 2 3 4]; B=[3 4 5 6]; n=1:4; C=A+B;D=A-B;E=A.*B;F=A./B;G=A.^B; subplot(4,2,1);stem(n,A,'fill');xlabel ('时间序列n');ylabel('A'); subplot(4,2,2);stem(n,B,'fill');xlabel ('时间序列n ');ylabel('B'); subplot(4,2,3);stem(n,C,'fill');xlabel ('时间序列n ');ylabel('A+B'); subplot(4,2,4);stem(n,D,'fill');xlabel ('时间序列n ');ylabel('A-B'); subplot(4,2,5);stem(n,E,'fill');xlabel ('时间序列n ');ylabel('A.*B'); subplot(4,2,6);stem(n,F,'fill');xlabel ('时间序列n ');ylabel('A./B'); subplot(4,2,7);stem(n,G,'fill');xlabel ('时间序列n ');ylabel('A.^B'); 运行结果:数字信号处理期末论文
数字信号处理实验程序2.
数字信号处理实验二报告
数字信号处理实验五
数字信号处理书上实验1.2.3.4
数字信号处理的步骤与注意事项,并编写1024个采样点的FFT C语言程序
数字信号处理实验及参考程序
什么是数字信号处理
数字信号处理实验一
数字信号处理实验一 IIR数字滤波器设计及软件实现
数字信号处理程序课程设计
数字信号处理实验报告(实验1_4)
2015年北邮数字信号处理软件实验报告
《数字信号处理》复习题及答案
数字信号处理窗函数程序
DSP运行实验报告
数字信号处理练习及答案
数字信号处理实验全部程序MATLAB