数字信号处理实验~~~~快速傅里叶变换及其应用

  • 格式:docx
  • 大小:460.08 KB
  • 文档页数:13

1. 实验目的及原理

1.1实验目的:

(1)在理论学习的基础上,通过本实验,加深对FFT的理解,熟悉MATLAB中的有关函数。

(2)应用FFT对典型的信号进行频谱分析。

(3)了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT。

(4)应用FFT实现序列的线性卷积和相关。

1.2实验原理:

快速傅氏变换(FFT),是离散傅里叶变换的快速算法,它是根据离散傅氏变换的奇,偶,虚,实等特性,对离散傅里叶变换的算法进行改进获得的,根据不同的情况又分为按时间抽取的FFT和频率抽取的FFT,同时还包括N为任意复合数的算法以及Chirp-z变化算法。

2. 实验步骤和内容

(2)衰减的正弦序列

观察衰减正弦序列xb(n)的时域和幅频特性,a=0.1,f=0.0625,检查谱峰出现位置是否正确,注意频谱的形状,绘出幅频特性曲线,改变f,使f分别等于0.4375和0.5625,观察这两种情况下,频谱的形状和谱峰出现位置,有无混叠和泄漏现象?说明产生现象的原因。

MATLAB代码:

clear

x=0:15

a=0.1

f=0.5625

y=exp(-(a.*x)).*sin(2.*pi.*f.*x)

subplot(1,2,1)

stem(x,y)

xk=fft(y,16)

subplot(1,2,2)

stem(x,abs(xk))

f=0.0625

f=0.4375 f=0.5625

(4)一个连续信号含两个频率分量,经采样得

x(n)=sin[2π*0.125n]+cos[2π*(0.125+f)*n] n=0,1,……,N-1

已知N=16,f分别为1/16和1/64,观察其频谱;当N=128时,Δf不变,其结果有何不同,为什么?

MATLAB代码:

N=16

f=1/16

x=0:N-1

y=sin(2*pi*0.125*x)+c os(2*pi*(0.125+f)*x)

xk=fft(y,N)

stem(x,abs(xk))

将N=16,f=1/16依次改为N=16,f=1/64和N=128,f=1/16和N=128,f=1/64。

图:

N=16,f=1/16

N=16,f=1/64

N=128,f=1/16

N=128,f=1/64

(5)用FFT分别计算xa(n)(p=8,q=2)和Xb(n)(a=0.1,f=0.0625)的16点循环卷积和线性卷积。

MATLAB代码:

clear

N=16

x=0:N-1

p=8

q=2

y1=exp(-(x-p).^2/q)

n=0:N-1

a=0.1

f=0.0625

y2=exp(-(a.*n)).*sin(2.*pi.*f.*n)

y3=conv(y1,y2)

subplot(1,2,1)

r=0:2*N-2;

stem(r,y3)

title('线性卷积');

y4=fft(y1)

y5=fft(y2)

rm=real(ifft(y4.*y5));

m=0:N-1

subplot(1,2,2)

stem(m,rm)

title('循环卷积');

图:

(6)产生一512点的随机序列xe(n),并用xe(n)和xe(n)作线性卷积,观察卷积前后xe(n)频谱的变化。要求将xe(n)分成8段,分别采用重叠相加法和重叠保留法。

MATLAB代码:

重叠相加法

Xe=randn(1,512);

output(1:700)=0;

temp2(1:71)=0;

temp1(1:71)=0;

N=8;

for i=1:N if i<5 Xb(i)=i-1;

else

Xb(i)=8-i+1;

end

end

Xbk=fft(Xb,71);

for j=1:8

for k=1:71

if k<65

temp2(k)=Xe(k+64.*(j-1));

else

temp2(k)=0;

end

end

tempk=fft(temp2,71);

temp2=real(ifft(tempk.*Xbk));

output((64*(j-1)+1):64*j)=[temp1(8:64),temp1(65:71)+temp2(1:7)];

temp1=temp2;

if j==8

output((64*j+1):64*(j+1))=temp1(8:71);

end

end

output1(1:519)=output(58:576);

m=0:518;

Xek=fft(Xe,519);

outputk=fft(output1,519);

subplot(2,1,1);

plot(m,Xek(1:519))

title('原频谱图')

subplot(2,1,2);

plot(m,outputk(1:519))

title('卷积后谱图')

图:

重叠保留法

Xe=randn(1,512);

output(1:700)=0;

temp2(1:71)=0;

temp1(1:71)=0;

N=8;

for i=1:N if i<5 Xb(i)=i-1;

else

Xb(i)=8-i+1;

end

end

Xbk=fft(Xb,71);

for j=1:8

for k=1:71

if k<8

if j==1

temp2(k)=0;

else

temp2(k)=Xe(k+64.*(j-1)-8);

end

else

if j==9

temp2(k)=0;

else

temp2(k)=Xe(k-7+64.*(j-1));

end

end

end

tempk=fft(temp2,71);

temp2=real(ifft(tempk.*Xbk));

output((64*(j-1)+1):64*j)=[temp2(8:71)];

end

output1(1:519)=output(1:519);

m=0:518;

Xek=fft(Xe,519);

outputk=fft(output1,519);

subplot(2,1,1);

plot(m,Xek(1:519))

title('原频谱图')

subplot(2,1,2);

plot(m,outputk(1:519))

title('卷积后谱图')

图:

数字信号处理(Digital Sigral Processing)

实验三:

快速傅里叶变换及其应用