数字信号处理实验-用DFT计算连续信号的谱

时间:2024.3.31

西安交通大学实验报告

第   页    共   页

课  程    数字信号处理    

系    别              实  验 日 期      年   月   日

专业班级     组别            交报告 日 期      年   月   日

姓    名    学号      报  告 退 发     (订正、重做)

同 组 者                         教师审批签字

  实验名称        用DFT计算连续信号的谱  

一、实验目的:

1.学习用Matlab完成信号的DFT计算。

2.了解用DFT对连续周期信号进行谱分析可能产生的误差。

二、实验内容及要求:

1. 有一单频信号x(t)=sin(2πft)

若 ①f=f1=15Hz ②f=f2=2Hz

分别用DFT求x(t)的谱。

要求:①抽样频率fs以不发生混叠为宜。

②记录长度tp应取整数周期。

③用stem语句绘出幅度谱,横坐标为模拟频率f。用plot画出时域波形。

2. 有一复频信号x(t)=sin(2πf1t)+ sin(2πf2t)

其中 f1=15Hz ,f2=2Hz

当 T=0.01s时,求:

① N=100时x(t)的幅度谱并图示;(用stem语句绘出幅度谱)

② N=50时x(t)的幅度谱并图示。(用stem语句绘出幅度谱)

请分别预测①与②是否逼近真实的谱?如有误差,请分析原因。

三、实验内容程序及结果

1、运行程序如下:

n=0:5;

n1=0:0.01:6;

n1=n1./45;

fs1=45;T1=1/fs1;

x=sin(2*pi*15*n.*T1);

x1=sin(2*pi*15*n1);

subplot(221);plot(n1,x1)

xlabel('时间');ylabel('信号');

y=abs(fft(x));

y=y(1:4);

f=(0:3)*15/2;

subplot(222);stem(f,y)

xlabel('频率(Hz)');ylabel('幅值');

n=0:5;

n1=(0:0.01:6)/6;

fs2=6;T2=1/fs2;

x=sin(2*pi*2*n.*T2);

x1=sin(2*pi*2*n1);

subplot(223);plot(n1,x1)

xlabel('时间');ylabel('信号');

y=abs(fft(x));

y=y(1:4);

f=(0:3)*2/2;

subplot(224);stem(f,y)

xlabel('频率(Hz)');ylabel('幅值');

运行结果如下图所示:

实验结果分析:

①要使得在抽样过程中不发生混叠现象,那么根据抽样定理,抽样频率fs应大于2*f,故取fs=3*f,即fs1=45 Hz ,fs2=6 Hz,这样抽样后就不会发生混叠的问题。

② 记录长度tp取了2个整周期,因取抽样频率为原始频率的3倍,因此每个周期应该含有3个点,2个周期含有6个点,故设置n=0:5。如果tp不为整数个周期,则会出现频谱泄漏现象。

③ 要求横坐标为模拟频率f,因为由DFT运算出来的结果为时域、频域都是离散周期的序列,所以要求把频域横坐标化为模拟频率。设计算出来的模拟频率里每个样点间的间隔为f0,取的样点个数为N, 则有:2*pi*f/fs=2*pi*k/N,

可得:f= fs* k/N,其中N=6,fs=3f0,所以f=k* f0/2

2、运行程序如下:

N1=0:99;

N2=0:49;

T=0.01;

f1=15;

f2=2;

x=sin(2*pi*f1*T*N1)+sin(2*pi*f2*T*N1);

y=fft(x);

y=abs(y);

subplot(121);stem(N1,y)

xlabel('频率');ylabel('幅值');

x=sin(2*pi*f1*T*N2)+sin(2*pi*f2*T*N2);

y=fft(x);

y=abs(y);

subplot(122);stem(N2,y)

xlabel('频率');ylabel('幅值')

运行结果如下图所示:

问题:请分别预测①与②是否逼近真实的谱?如有误差,请分析原因。

:由已知的时域t轴上的最小间隔T和采样点数N,即可确定抽样频率和记录长度。由实验结果可得,①与②之间有较大的区别,其中①更符合真真实的谱子。因为当N=100时,取的为复频信号的整数个周期,而当N=50时不为整数周期,因此会产生频谱泄漏现象,所以①的结果逼近真实的谱,而②则不逼近真实情况。

实验结果分析:这道题目很直观的表现出频谱泄漏的现象,让我明白了这种现象出现的原因,和应该避免的措施。

四、实验心得体会

通过本次实验,我熟悉了进行DFT运算中的常用指令,掌握了运用MATLAB语言快速实现信号的DFT运算的命令程序,也更加深入的领会了频谱泄漏现象的表现。处理信号转换中繁琐的过程通过Matlab的简便语句就能得出完美的结果,从其中可以很明显地感觉到Matlab的强大之处,也更加促使我进一步掌握Matlab的兴趣和信心。


第二篇:数字信号处理实验报告


数字信号处理实验报告

(基于MATLAB的DFT频谱分析)

学 院:通信与信息工程学院

班 级:通信工程1104班

姓 名:杨 文 刚

学 号:1107020420

20##年11月20日

一、 实验目的

1.掌握DFT函数的用法。

2. 利用DFT进行信号检测及谱分析。

3.了解信号截取长度对谱分析的影响。

二、 实验内容

1.利用DFT计算信号功率谱。

实验程序:

t=0:0.001:0.6;

x=sin(2*pi*50*t)+sin(2*pi*120*t)+randn(1,length(t));

Y=dft(x,512);

P=Y.*conj(Y)/512;

f=1000*(0:255)/512;

plot(f,P(1:256))

bu
运行截图

2. 进行信号检测,分析信号频谱所对应频率轴的数字频率和频率之间的关系。

模拟信号,以   进行取样,求N点DFT的幅值谱。

实验程序:

subplot(2,2,1)

N=45;n=0:N-1;t=0.01*n;

q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t);

y=dft(x,N);

plot(q,abs(y));title('DFT N=45')

subplot(2,2,2)

N=50;n=0:N-1;t=0.01*n; q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t);

y=dft(x,N);

plot(q,abs(y));title('DFT N=50')

subplot(2,2,3)

N=55;n=0:N-1;t=0.01*n;

q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t);

y=dft(x,N);

plot(q,abs(y));title('DFT N=55')

subplot(2,2,4)

N=60;n=0:N-1;t=0.01*n;

q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t);

y=dft(x,N);

plot(q,abs(y));title('DFT N=60')

2
运行截图

3. 对2,进一步增加截取长度和DFT点数,如N加大到256,观察信号频谱的变化,分析产生这一变化的原因。在截取长度不变的条件下改变采样频率,观察信号频谱的变化,分析产生这一变化的原因。

N加大到256时的程序:

N=256;n=0:N-1;t=0.01*n;

q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t);

y=dft(x,N);

plot(q,abs(y));title('DFT N=256')

2-256
运行截图

分析原因:在T=0.01s的情况下,第一个序列的周期是100,第二个序列的周期是50,所以当取样点数小于100时,频率分辨率不够,不能够区分出两个信号。当采样点数足够多(256)时,频率分辨率增加,能够区分出两个频率的信号。

将采样间隔变为T=0.1s时,N仍为45的程序:

2-0N=45;n=0:N-1;t=0.1*n;

q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t);

y=dft(x,N);

plot(q,abs(y));title('DFT N=45')

运行图如右图

分析原因:在T=0. 1s的情况下,第一个序列的周期是10,第二个序列的周期是5,所以当取样点数为45时,能够区分出两个信号。

参数同上,N取64,并在信号中加入噪声w(t)。

figure(2)

subplot(2,1,1)

N=64;n=0:N-1;t=0.01*n;

q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t); y=dft(x,N);

plot(q,abs(y));title('DFT N=64')

subplot(2,1,2)

N=64;n=0:N-1;t=0.01*n;

q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t)+0.8*randn(1,N); y=dft(x,N);

3
plot(q,abs(y));title('DFT N=64(with noise)')

由图可以看出这种噪音不影响信号检测。

4. 对3,加大噪声到2*randn(1,N)和8*randn(1,N),画出并比较不同噪声下时域波形和频谱。

subplot(2,1,1)

N=64;n=0:N-1;t=0.01*n;

q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t)+2*randn(1,N); y=dft(x,N);

plot(q,abs(y));title('DFT N=64(with noise2)')

subplot(2,1,2)

N=64;n=0:N-1;t=0.01*n;

q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t)+8*randn(1,N); y=dft(x,N);

plot(q,abs(y));title('DFT N=64(with noise8)')

3-2-8

subplot(3,2,1)

N=64;n=0:N-1;t=0.01*n;

q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t)+0.8*randn(1,N);

plot(x);title('噪声为0.8*w的信号')

y=dft(x,N);

subplot(3,2,2)

plot(q,abs(y));title('噪声为0.8*w时的频谱')

subplot(3,2,3)

N=64;n=0:N-1;t=0.01*n;

q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t)+2*randn(1,N);

plot(x);title('噪声为2*w时的信号')

y=dft(x,N);

subplot(3,2,4)

plot(q,abs(y));title('噪声为2*w时的频谱')

subplot(3,2,5)

N=64;n=0:N-1;t=0.01*n;

q=n*2*pi/N;

x=2*sin(4*pi*t)+5*cos(8*pi*t)+8*randn(1,N);

plot(x);title('噪声为8*w时的信号')

y=dft(x,N);

subplot(3,2,6)

plot(q,abs(y));title('噪声为8*w时的频谱')

3-3

实验分析:当噪声较小时,不影响信号的检测,但当噪声较大时,就看不出原信号的频率成分了,可以继续加大噪声,可看到其频谱杂乱无章了。

5. 用一个N点DFT计算两个长度为N的实序列N点离散傅里叶变换,并将结果和直接使用两个N点DFT得到的结果进行比较。

x=[1 2 3 4 5 6];

y=[6 5 4 3 2 1];

[a,b]=dft_2(x,y)

a =

Columns 1 through 3

21.0000     -3.0000 + 5.1962i     -3.0000 + 1.7321i

Columns 4 through 6

-3.0000     -3.0000 - 1.7321i      -3.0000 - 5.1962i

b =

Columns 1 through 3

21.0000     3.0000 - 5.1962i     3.0000 - 1.7321i

Columns 4 through 6

3.0000     3.0000 + 1.7321i     3.0000 + 5.1962i

函数文件如下:

function [y1,y2]=dft_2(a,b)

N=length(a);

x=zeros(1,N);

x=a+j*b;

X=dft(x,N);

X0=conj(fliplr(X));

X0=[X0(N) X0(1:N-1)];

y1=(X+X0)./2;

y2=(X-X0)./2./j;

直接运行计算 :

dft(x)

ans =

Columns 1 through 3

21.0000     -3.0000 + 5.1962i     -3.0000 + 1.7321i

Columns 4 through 6

-3.0000     -3.0000 - 1.7321i     -3.0000 - 5.1962i

dft(y)

ans =

Columns 1 through 3

21.0000     3.0000 - 5.1962i     3.0000 - 1.7321i

Columns 4 through 6

3.0000     3.0000 + 1.7321i     3.0000 + 5.1962i

6.比较DFT和DFT的运算时间。(计时函数 tic, toc)

N分别取256,512,1024,2048,4096,…

程序如下:

N=256;

N=4096;

x=randn(1,N);

tic

y=dft(x,N);

toc

tic

z=dft(x);

toc

N=256:Elapsed time is 0.172000 seconds.

       Elapsed time is 0.015000 seconds.

N=512:Elapsed time is 0.687000 seconds.

       Elapsed time is 0.000000 seconds.

N=1024:Elapsed time is 3.031000 seconds.

        Elapsed time is 0.047000 seconds.

N=2048:Elapsed time is 13.375000 seconds.

        Elapsed time is 0.063000 seconds.

N=4096:Elapsed time is 59.250000 seconds.

        Elapsed time is 0.125000 seconds.

7.对给定语音信号进行谱分析,写出采样频率,画出语音信号的波形及频谱,并分析语音信号的频率分布特点。

(1)画时域波形并对整个语音序列做DFT

[x,fs]=wavread('C:\ai1.wav');

subplot(2,1,1)   

N=length(x);

n=0:N-1;

plot(n,x);

xlabel('n');

ylabel('x');

title('时域波形');

subplot(2,1,2);

N=length(x);

n=0:N-1;

t=0.01*n;

q=n*2*pi/N;

y=dft(x,N);

plot(q,abs(y));

xlabel('n');

ylabel('ai1');

title('DFT');  

12

(2)并分别求出k=300,3500所对应的信号频率(Hz)

[x,fs]=wavread('C:\ai1.wav')

N=length(x);

n=0:N-1;

t=n*(1/fs);

q=n*2*pi/N;

n1=300;

q1=n1*2*pi/N;

f1=q1*fs/(2*pi);

n2=3500;

q2=n2*2*pi/N;

f2=q2*fs/(2*pi);

fs =

       16000

(3)从语音中截取一段语音(256点)做DFT,得出频谱,画出时域波形及频谱。

程序如下:

[x,fs]=wavread('C:\ai1.wav');

subplot(2,1,1);

N=256;

n=0:N-1;

x=x(1:256);

plot(n,x);

xlabel('n');

ylabel('x');

title('256点时域波形');

subplot(2,1,2);

N=256;

n=0:N-1;

t=0.01*n;

q=n*2*pi/N;

x=x(1:256);

y=dft(x,N);

plot(q,abs(y));

xlabel('n');

ylabel('ai1');

title('DFT-256');

13

三、 实验心得

    本次数字信号处理实验,我使用matlab工具做了对于一些DFT信号的频谱分析,由于我们并没有学习过matlab的使用方法,对这个工具软件的使用我并不熟悉。我在网上查找了用matlab做DFT频谱分析的一些相关资料,去图书馆借阅了相关的书籍,作为参考,做了这次实验。通过这次实验,首先我对matlab这个软件有了初步的了解,同时也感受到了这个软件的强大,是一个很好的数学工具。同时,我也对离散傅里叶变换有了更进一步的认识。由于这学期我们的课程是英文版的,对我们平时的学习带来了一定的困难,本次实验我认为是一个很好的机会去实际动手利用工具来操作和实践,认识和理解数字信号处理的一些方法。

更多相关推荐:
数字信号处理实验报告

南京信息工程大学数字信号处理实验报告学院:电子与信息工程学院班级:11通信1班学号:XXX姓名:XX指导教师:XX20XX/12/6实验一Matlab基本知识和信号处理工具箱一、实验目的1、了解Matlab的基…

数字信号处理实验报告

数字信号处理实验报告专业电子信息工程学号111308336姓名张强伟实验一数字滤波器的结构一实验目的1加深对数字滤波器分类与结构的了解2明确数字滤波器的基本结构及其相互间的转换方法3掌握用MATLAB进行数字滤...

数字信号处理实验报告一

西南大学学生实验报告姓名杨剑学号2220xx3220xx058班级1班专业电科实验日期20xx年9月29日实验学时2学时实验名称基本信号的产生和序列的基本运算实验目的学习使用MATLAB产生基本信号绘制信号波形...

数字信号处理实验报告实验十

数字信号处理实验报告实验名称学生姓名学生学号学生班级上课时间周三上午一实验目的1掌握数字滤波器的计算机仿真方法2通过观察对实际心电图信号的滤波作用获得数字滤波器的感性知识二实验内容及其要求1编写FIR数字滤波器...

中南大学数字信号处理实验报告

中南大学数字信号处理实验报告学生姓名学号指导教师学院专业班级完成时间2目录实验一实验二常见离散时间信号的产生和频谱分析3实验结果与分析5数字滤波器的设计14实验结果与分析173实验一常见离散时间信号的产生和频谱...

数字信号处理实验报告

实验一信号系统及系统响应1实验目的熟悉连续信号经过理想抽样前后的频谱变化关系加深对时域抽样定理的理解熟悉时域离散系统的时域特性利用卷积方法观察分析系统的时域特性掌握序列傅里叶变换的计算机实验方法利用序列的傅里叶...

数字信号处理实验报告

北京信息科技大学实验报告课程名称数字信号处理实验项目IIR数字滤波器设计实验仪器计算机MATLAB软件学院信息与通信工程学院班级姓名学号实验日期指导老师实验成绩实验二IIR数字滤波器设计一实验目的1熟悉用双线性...

数字信号处理实验八

数字信号处理实验报告实验名称用窗口法设计FIR数字滤波器姓名周云杰学号120xx437指导老师杨萌黄怡实验时间20xx1222选课时间周一35节实验目的了解一个实际滤波器的设计过程加深掌握窗口法设计FIR数字滤...

数字信号处理实验报告

实验报告课程名称姓名学号实验二基于MATLAB的数字滤波器的设计1实验目的1熟悉IIR数字滤波器设计的原理与方法2熟悉用窗函数法设计FIR数字滤波器设计的原理与方法3掌握IIR和FIR数字滤波器的计算机仿真方法...

数字信号处理实验四报告

实验四IIR数字滤波器设计及软件实现一实验目的1熟悉用双线性变换法设计IIR数字滤波器的原理与方法2学会调用MATLAB信号处理工具箱中滤波器设计函数或滤波器设计分析工具fdatool设计各种IIR数字滤波器学...

数字信号处理第二次实验报告

数字信号处理实验报告第二次实验IIR数字滤波器的设计姓名陈桐学号04004316实验日期20xx年11月14日一实验目的1掌握双线形变换法及脉冲响应不变法设计IIR数字滤波器的具体设计方法及其原理熟悉用双线形变...

哈工程数字信号处理实验报告5

数字信号处理实验实验五谱分析班级姓名学号指导老师年10月20xx实验五谱分析1实验原理2实验内容1w1boxcar20subplot221stemw1title39boxcar39xlabel39t39ylab...

数字信号处理实验总结(34篇)