武汉工程大学毕业设计(论文)说明书
相关Matlab程序如下
function [unbiased_variance,error]=daubcomp(t,y,n,r) %利用Daubechies系列小波做离散信号压缩 %输入时间t,原信号y,分解层数n,以及压缩率r
%输出原信号和压缩后重构信号的图像,以及重构均方差和相对l^2误差 if(r<0)|(r>1)
error('r应该介于0和1之间!'); end;
[c,l]=wavedec(y,n,'db1');
cc=compress(c,r); %调用压缩函数compress.m yc=waverec(cc,l,'db1'); plot(t,y,'r',t,yc,'b'); legend('原信号','重构信号');
unbiased_variance=norm(y-yc)/sqrt(length(t)); error=norm(y-yc)/norm(y); 输入以下Matlab命令: =(0:255)/256;
f=t+cos(4*pi*t)+1/2*sin(8*pi*t);
[unbiased_variance,error]=daubcomp(t,f,8,0.8) unbiased_variance = 0.0584 error = 0.0611
结论:在信号没有突变、快变化或者大致上具有周期性的信号,用FFT可以处理得很好(甚至比小波还要好)。 4. 4 利用FFT对离散信号进行滤波
利用FFT算法对信号进行滤波的步骤如下:1)通过采样将信号离散化;2)对离散化信号进行傅里叶变换;3)对变换后的系数进行处理,将绝对值大于某一阈值的系数置为0,保留剩余的系数;4)利用IFFT算法对处理后的信号进行
22
武汉工程大学毕业设计(论文)说明书
逆傅里叶变换[14]。
例4-4 对被白噪声污染的信S?2?3cos?100?t??/6??1.5cos?150?t??/2?进行频谱分析,从中鉴别出有用的信号。要求:将信号的幅度换算成实际的幅度,信号的频率换算成实际的频率。 相关Matlab程序如下
fs=1000;%采样频率 N=512;%数据点数 n=0:N-1; randn(1,N);
t=0:1/fs:(N-1)/fs;%采样时间序列 f0=100;%信号频率
x=2+3*cos(100*pi*t-pi/6)+(3/2)*cos(150*pi*t+pi/2); subplot(3,1,1); plot(t,x); xlabel('t');
ylabel('sin(2+3*cos(100*pi*t-pi/6)+(3/2)*cos(150*pi*t+pi/2))'); title('时域信号');
Y=fft(x,N);%对信号进行FFT变换 magY=abs(Y);%求得FFT变换后的幅度
angY=angle(Y)*180/pi;%求得FFT变换后的相位 f=n*fs/N;%频率序列 subplot(3,1,2);
plot(f,magY);%画出幅频响应 xlabel('f'); ylabel('幅度'); title('N=512'); grid;
subplot(3,1,3);
plot(f,angY);%画出相频响应
23
武汉工程大学毕业设计(论文)说明书
xlabel('f'); ylabel('相位') title('N=512'); grid;
图4-8 滤波信号的相位,幅度
4.5 利用FFT提取离散信号中的最强正弦分量
这里最强是指在信号x[n],n?0,1,,N?1中某个正弦分量的振幅远大于其
它正弦分量的振幅。可以对x[n]求N点DFT来确定信号中是否有最强的正弦分量。如果信号x(t)是连续时间形式的,首先还要对其进行抽样,得到离散时间形式的信号x[n]?x(t)|t?nT?x(nT),根据Nyquist定理,抽样间隔T应满T??/?max,其中?max是x(t)中的最大频率分量。要判断信号x[n]中是否包含最强正弦分量,采样数据至少要包含该分量一个完整周期的数据[15]。
例4-5 太阳耀斑数据的分析
太阳耀斑活动的周期是11年,这个事实可以通过提取耀斑数据的最强正弦 分量加以证实。耀斑数据可以从比利时皇家天文台(Royal Observatory of Belgium)太阳耀斑数据索引中心(Sunspot Index Data Center, SIDC)网站下载。网址是:http://sidc.oma.be/index.php3.
24
武汉工程大学毕业设计(论文)说明书
下载后的数据存放在文件“monthssn.dat”中,里面有四列数据,第一年是日期,第三列是太阳耀斑的平均数,第四列平滑后太阳耀斑的平均数,可以得到从1749年到当前年月(2006年4月)的耀斑数据。本次分析选择第三列1981年1月作为开始日期,2005年12月作为结束日期,共25年300个月份的数据。为此先把相关数据复制到Excel表格的第一列中,然后保存到Matlab所在目录下,并命名为“sunspotdata.csv”。然后输入以下命令,得到耀斑曲线如图9所示[16]。
spd=csvread('sunspotdata.csv',0,0,[0 0 299 0]); plot(spd); grid;
xlabel('月数');ylabel('耀斑平均数'); axis([0 300 0 200])
图4-9 1981年1月至2005年12月太阳耀斑的平均数
由上图可见,太阳耀斑的活动确实具有周期性,但周期的准确值不明显。可以通过数第一个峰值和第二个峰值之间的月份来估计周期的值。查验表中的数据得,第一个峰值为200.3,出现在第116个月(1990年8月),第二个峰值为170.1,出现在第235个月(2000年7月),所以周期是235-116=119月,和实际值132月比较接近。
25
武汉工程大学毕业设计(论文)说明书
下面利用DFT来分析spd[n]。首先,从图4-9中可以看出spd[n]从n?0到
n?300整个区间的平均值不为0,为了更方便地分析spd[n],需要减去该均值,
得到结果如下:
1300 x[n]?spd[n]??spd[i] (4-12)
300i?1然后对x[n]进行傅里叶变换,得到X[k]。在Matlab中输入以下命令,得到
x[n]的幅度谱X[k]的图形如图10所示。
x=spd-sum(spd)/300;X=fft(x); k=0:299;
plot(k,abs(X));grid;
xlabel('k');ylabel('|X[k]|')
图4-10 x[n]的幅度谱
由图4-10可见,x[n]的幅度谱中有一个清晰的尖峰,这就证实x[n]中确实包含一个最强正弦分量。为了确定尖峰所对应的频率,用火柴棒图重画当k?0,
26
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库毕业论文-快速傅里叶变换算法及其在信号处理中的应用(6)在线全文阅读。
相关推荐: