信号处理的应用与实现实验报告.docx
- 文档编号:1086405
- 上传时间:2022-10-16
- 格式:DOCX
- 页数:13
- 大小:118.64KB
信号处理的应用与实现实验报告.docx
《信号处理的应用与实现实验报告.docx》由会员分享,可在线阅读,更多相关《信号处理的应用与实现实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
信号处理的应用与实现实验报告
《信号处理的应用与实现》实验报告
一、实验目的
(1)理解和学会DFT频谱的分析。
(2)学会利用Chrip-z变换,对信号频谱进行分析。
(3)掌握时间抽选的FFT算法程序的设计。
二、实验环境
硬件环境:
PC一台
开发环境:
matlab2007
三、实验内容
【1】实验一
某信号含有50Hz和100Hz和200Hz三种频率。
设计一个实验,将这三个频率分量找出来。
要求:
(1)产生该信号;
(2)用DFT进行频谱分析并作图;(3)对结果进行简要分析。
1.实验原理与分析
根据序列x[n]的DTFT定义:
以及N点序列x[n]的DFT定义:
在MATLAB中,对如下形式为的DTDFT
可以用函数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));
title('图二 各频率分量(50Hz&100Hz&200Hz)');
xlabel('频率/Hz');
ylabel('幅度');
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代入,则得
,k=0,1…M-1
直接计算这一公式,与直接计算DFT相似,当N和M数值很大时,运算量会很大。
为了提高运算速度,可对上式做进一步分析处理,首先把kn变成求和项,即
kn=1/2[n2+k2-(k-n)2]
于是
令
,n=0,1…N-1
则
,k=0,1…M-1
2.程序设计如下:
clc;
fs=256;%抽样频率
N=600;%点数
M=256;
f1=90;%频率展开起始点
f2=120;%频率展开结束点
n=0:
1:
N-1;
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);
figure;
subplot(3,1,1);
plot(n,x);
xlabel('Time/t');
ylabel('value');
title('MATLAB产生的信号的时域波形');
XK=abs(fft(x));%FFT变换
subplot(3,1,2);
stem(n1,XK(1:
(N/2)));
axis([f1,f2,0,1500]);
xlabel('Frequency/Hz');
ylabel('value');
title('原信号直接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:
1:
M-1;
f0=(f2-f1)/M*h+f1;
subplot(3,1,3);
stem(f0,abs(xk));
axis([f1,f2,0,1500]);
xlabel('Frequency/Hz');
ylabel('value');
title('利用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
#include
#include
#include
#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时间对比:
\n");
test_time();
printf("\n");
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:
\n");//计算FFT
fft(4,xr,xi);
for(i=0;i<4;i++)
{
printf("%6.1f%6.1f\n",xr[i],xi[i]);
}
printf("ifft:
\n");
for(i=0;i<4;i++)//生产x=[1234]
{
xr[i]=i+1;
xi[i]=0;
}
printf("dft:
\n");//计算DFT
dft(4,xr,xi,Xr,Xi,0);
for(i=0;i<4;i++)
{
printf("%6.1f%6.1f\n",Xr[i],Xi[i]);
}
printf("idft:
\n");
dft(4,Xr,Xi,xr,xi,1);
for(i=0;i<4;i++)
{
printf("%6.1f%6.1f\n",xr[i],xi[i]);
}
printf("\n");
}
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));
for(i=0;i<1000;i++)
{
xr[i]=i;
xi[i]=0;
}
//fft要求N为2的幂
start=clock();
fft(1000,xr,xi);
end=clock();
printf("1000点FFT用时:
\n");
printf("t=%fs\n",(float)(end-start)/CLK_TCK);
for(i=0;i<1000;i++)
{
xr[i]=i;
xi[i]=0;
}
start=clock();
dft(10000,x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信号 处理 应用 实现 实验 报告