信号处理的应用与实现实验报告Word文档格式.docx

上传人:b****2 文档编号:14006447 上传时间:2022-10-16 格式:DOCX 页数:13 大小:118.64KB
下载 相关 举报
信号处理的应用与实现实验报告Word文档格式.docx_第1页
第1页 / 共13页
信号处理的应用与实现实验报告Word文档格式.docx_第2页
第2页 / 共13页
信号处理的应用与实现实验报告Word文档格式.docx_第3页
第3页 / 共13页
信号处理的应用与实现实验报告Word文档格式.docx_第4页
第4页 / 共13页
信号处理的应用与实现实验报告Word文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

信号处理的应用与实现实验报告Word文档格式.docx

《信号处理的应用与实现实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《信号处理的应用与实现实验报告Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

信号处理的应用与实现实验报告Word文档格式.docx

可以用函数H=Freqz(num,den,w)计算;

可以用函数U=fft(u,N)和u=ifft(U,N)计算N点序列的DFT正、反变换。

因此,设置产生一个正弦波信号,该信号有含有50Hz和100Hz和200Hz三种频率,如:

y=cos(2*pi*50*ns*ts)+cos(2*pi*100*ns*ts)+cos(2*pi*200*ns*ts),

对此信号可进行时域和频域的显示和分析,通过对其进行傅里叶变换,可得到其的频谱图,并在处理分离显示出这三个独立的频谱分量。

2.程序设计如下:

%实验一DFT频谱分析

clc;

fs=500;

%设抽样频率为500Hz

ts=1/fs;

%抽样周期

T=1;

%时间

ns=1:

T/ts;

%序列长度

y=cos(2*pi*50*ns*ts)+cos(2*pi*100*ns*ts)+cos(2*pi*200*ns*ts);

%产生含三不同频率的信号

N=length(y);

%计算N点DFT

n=0:

1:

N-1;

k=n;

WN=exp(-j*2*pi/N);

nk=n'

*k;

WNnk=WN.^nk;

xk=y*WNnk;

figure;

%绘图

subplot(2,1,1)

plot(ns*ts,y);

title('

图一 该信号波形'

);

xlabel('

Time/s'

ylabel('

幅度'

%figure;

subplot(2,1,2)

plot(1:

N/2,xk(1:

N/2));

图二 各频率分量(50Hz&

100Hz&

200Hz)'

频率/Hz'

3.产生图形如下:

4.试验总结:

通过本次实验采用的抽样频率为600hz,本次实验图形主要是对信号y=cos(2*pi*50*ns*ts)+cos(2*pi*100*ns*ts)+cos(2*pi*200*ns*ts)进行时域和频域(傅里叶变换后的频谱图和三个频率分量50hz、100hz、200hz的频谱绝对值)进行图形显示,通过它们,我们可以认识到该正弦波信号的时域、频域特征。

 

【2】实验二

设计一个实验,利用Chrip-z变换,分析信号任意指定频带之间的频谱。

(1)待分析信号为现实中的信号,如语音信号;

也可以用MATLAB仿真产生;

(2)要分析的频带可以任意指定。

1.实验设计

(1)实验目的:

设计一个利用czt变换对原信号进行任意指定频率细化的实验,获得比整个频率范围的频率分辨率更高的频率分辨率,从而观察频谱中的细微部分。

(2)实验内容:

用MATLAB仿真产生一个信号,然后显示该信号,对该信号90-120Hz的范围内的频谱进行细化,输出直接FFT变换所得的图像和czt细化后的图像。

(3)实验原理:

Chirp-Z变换是一种在Z平面上沿着螺旋线轨道计算有限时宽的Z变换方法。

基本原理是在折叠频率范围内,任意选择起始频率和结束频率分辨率,在这有限带宽里对样本信号进行Z变换。

Chirp-Z变换原理:

已知有限长序列x(n)(0≤n≤N-1)的z变换为:

  

为适应z变换可以沿z平面更一般的路径取值,现沿z平面的一段螺线作等分角的采样,采样点为zk,可表示为

  zk=AW-k,k=0,1…M-1

其中

  ,

M为采样点的总数,不一定与x(n)的长度N相等。

A为采样轨迹的起始点位置,由它的半径A0及相角θ0确定。

通常A0≤1,否则z0将处于单位圆|z|=1的外部。

W为螺线参数,W0表示螺线的伸展率,W0>

1时,随着k的增加螺线内缩,W0<

1则随k的增加螺线外伸。

φ0是采样点间的角度间隔。

由于φ0是任意的,减小φ0就可提高频率分辨率,这对分析具有任意起始频率的高分辨率窄带频谱是很有用的。

  z变换在这些采样点的值为

  ,k=0,1…M-1

将zk=AW-k代入,则得

直接计算这一公式,与直接计算DFT相似,当N和M数值很大时,运算量会很大。

为了提高运算速度,可对上式做进一步分析处理,首先把kn变成求和项,即

  kn=1/2[n2+k2-(k-n)2]

于是

  ,n=0,1…N-1

fs=256;

%抽样频率

N=600;

%点数

M=256;

f1=90;

%频率展开起始点

f2=120;

%频率展开结束点

e=fs/N;

%%抽样时间间隔

n1=0:

e:

(fs/2)-e;

x=2*cos(2*pi*100*n/fs)+5*cos(2*pi*101.45*n/fs)+3*cos(2*pi*102.3*n/fs);

subplot(3,1,1);

plot(n,x);

Time/t'

value'

MATLAB产生的信号的时域波形'

XK=abs(fft(x));

%FFT变换

subplot(3,1,2);

stem(n1,XK(1:

(N/2)));

axis([f1,f2,0,1500]);

Frequency/Hz'

原信号直接FFT变换后的频谱'

w=exp(-j*2*pi*(f2-f1)/(fs*M));

a=exp(j*2*pi*f1/fs);

xk=czt(x,M,w,a);

h=0:

M-1;

f0=(f2-f1)/M*h+f1;

subplot(3,1,3);

stem(f0,abs(xk));

利用CZT进行细化后的频谱'

3.所得图形如下:

4.实验总结

通过本次实验,很好的掌握了CZT的原理和应用,特别是使用CZT对频率区域的细化以提高分辨率有了很好的理解。

【1】实验三

编写基-2按时间抽选的FFT算法程序。

并将之与直接算法的运算时间进行比较。

(1)用x=[1234]的DTF验证所编程序的正确性。

(2)产生一个10000个点的序列,求其DFT。

比较所编程序、matlab自带的FFT程序以及用直接计算所用的时间。

1.试验原理

本实验目的主要目的为比较DFT和FFT算法之间的计算量的大小,故主要原理在于分析怎么实现FFT算法,并且验证其是否正确。

然后比较FFT和DFT直接计算以及系统自带的FFT三者计算耗时,以检验FFT的优越性!

由于Matlab语言掌握不好,本实验在Linux下用C语言自行编写了DFT和FFT两个算法的实现,并对比两者之间的计算耗时。

2.程序设计

/*DFT直接算法与按时抽选FFT算法的比较*/

#include<

stdlib.h>

stdio.h>

time.h>

math.h>

#definePI3.1415927

voidtest_fft(void);

//用x=[1234]的DFT验证所实现的FFT算法正确性

voidtest_time(void);

//两种算法的用时

voiddft(intnpt,floatxr[],floatxi[],floatXR[],floatXI[],intinv);

//DFT变换的实现(直接计算)

voidfft(intn,floatx[],floaty[]);

//FFT算法的实现

intmain(void)

{

printf("

测试x=[1234]的FFT和DFT:

\n"

);

test_fft();

printf("

测试1000点的FFT与DFT时间对比:

test_time();

return0;

}

voidtest_fft(void)

inti;

floatxr[4],xi[4],Xr[4],Xi[4];

for(i=0;

i<

4;

i++)//生产x=[1234]

{

xr[i]=i+1;

xi[i]=0;

}

printf("

fft:

//计算FFT

fft(4,xr,xi);

i++)

%6.1f%6.1f\n"

xr[i],xi[i]);

ifft:

dft:

//计算DFT

dft(4,xr,xi,Xr,Xi,0);

Xr[i],Xi[i]);

idft:

dft(4,Xr,Xi,xr,xi,1);

voidtestTime(void)

inti,start,end;

float*xr,*xi,*Xr,*Xi;

xr=malloc(1000,sizeof(float));

xi=malloc(1000,sizeof(float));

Xr=malloc(1000,sizeof(float));

Xi=malloc(1000,sizeof(float));

1000;

xr[i]=i;

//fft要求N为2的幂

start=clock();

fft(1000,xr,xi);

end=clock();

1000点FFT用时:

t=%fs\n"

(float)(end-start)/CLK_TCK);

dft(10000,x

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1