信号与系统-信号DFT的计算-一个作业的记录

一、实验内容

例题题目:

 

 

 

二、实验目的

  1. 掌握对连续时间、离散频率和离散时间、离散频率的DFT计算
  2. 掌握N、L对信号频谱的影响

三、实验原理

对于连续时间的信号,首先以抽样频率fs对其进行抽样,将其时域频域离散化,然后进行fft运算。

记抽样后的序列或者离散序列的长度为L,fft(x,N)计算N点的DFT。

  • 若L>N,则将原序列截短为N点序列,在计算N点的DFT;
  • 若L<N,则将原序列补零至N点,然后计算N点的DFT。

fftshift()以fs/2为中心左右互换,横坐标范围为-fs/2~fs/2.

四、实验结果与分析

作业一

实验代码:

由于需要计算不同大小的L对频谱分析的影响,多次重复使用fft函数计算,故将其包装成以下函数(fftnyf.m):

function [x,y] = fftnyf(N,L)

fs=600;

f1=100;

f2=120;

t=(0:N-1)*1/fs;                                                    

x=cos(2*pi*f1*t)+cos(2*pi*f2*t);

F=fft(x,L);

x=(-L/2:L/2-1)*fs/L;

y = fftshift(abs(F)*2/min(N,L));

end

脚本代码(f_analysis.m)(绘制了五种大小L的频谱图):

clear

[x,y]=fftnyf(128,16);

figure

subplot(511)

plot(x,y);

title('N=128,L=16');

axis([-300,300,0,1.2]);



[x,y]=fftnyf(128,32);

subplot(512)

plot(x,y);

title('N=128,L=32');

axis([-300,300,0,1.2]);



[x,y]=fftnyf(128,64);

subplot(513)

plot(x,y);

title('N=128,L=64');

axis([-300,300,0,1.2]);



[x,y]=fftnyf(128,128);

subplot(514)

plot(x,y);

title('N=128,L=128');

axis([-300,300,0,1.2]);



[x,y]=fftnyf(128,256);

subplot(515)

plot(x,y);

title('N=128,L=256');

axis([-300,300,0,1.2]);

实验结果:

分析:

N为给出的数据点,L为fft数据个数

  1. 当L<N时,对数据点数截断,频谱泄露现象明显,且当L很小时,FFT数据点太少,频率分辨率低,很难分辨信号的频谱成分。
  2. 当L=N时,没有添零而导致的其他频率成分。
  3. 当L>N时。对数据点补零,由于在时间域内信号加零,致使振幅谱中出现很多其他成分,谱的密度提高,但分辨率没有提高。

总之,fft数据点数L影响频谱频谱的成分和密度。

作业二

实验代码:

由于在第二问中,需要绘出不同L的信号频谱,故将以下复用代码包装成为函数(fftQ2):

function [x,y] = fftQ2(L)

N=64;

k=0:N-1;

x=cos(2*pi/15*k)+0.75*cos(2.3*pi/15*k);

X=fft(x,L);

x=(-L/2:L/2-1)*1/L;

y=abs(fftshift(X))*2/min(N,L);

end

主函数(Q2_draw.m):

clear

%64个点的fft

[n1,F1]=fftQ2(64);

figure

subplot(311)

plot(n1,F1)

title("N=64,L=64");



[n2,F2]=fftQ2(128)

subplot(312)

plot(n2,F2);

title("N=64,L=128");



[n3,F3]=fftQ2(256)

subplot(313)

plot(n3,F3);

title("N=64,L=256");

实验结果:

X[k]64点fft的信号频谱

 

问题二:

不能通过对这64点信号补零而分辨出两个谱峰,因为补零不能提高信号的频率分辨率,但是可以提高信号加窗后的合成信号的分辨细节,提高谱密度,使振幅谱中出现很多其他成分。

代码已附在上方,运行的会图结果如下:

 

五、总结(实验中遇到的问题、取得的经验、感想等)

对于实验的一些操作的感想和经验总结:

虽然matlab软件自带函数fft函数实现快速傅里叶变换算法,但是光使用fft并不能直接得到信号的频谱,还需要解决以下问题:

  • 幅值变换

X(k)序列的幅值大小与参与变换的时域序列x(n)长度N(min(N,L))有关,变换后的幅值|X(k)|需要乘以2/N得到真实幅值

  • 有效频率区域

X(k)序列由两部分共轭复数序列组成(复数共轭表示幅值相等、相位相反),相当于只有一半的复数序列是独立有效的,这部分复数序列对应0~fs/2的频率区域(fs为时域离散采样序列x(n)的采样频率)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值