当前位置:文档之家› 华南理工大学数字信号处理第三四次试验答案

华南理工大学数字信号处理第三四次试验答案

实验3 FFT算法的应用
一、实验目的
1、加深对离散信号的DFT的理解;
2、在MATLAB中实现FFT算法。

二、实验内容
1、2N点实数序列
N=64。

用一个64点的复数FFT程序,一次算出,并绘出的图形。

程序代码如下: N=64;
n1=0:2:(2*N-1);n2=1:2:(2*N-1);
x1=cos(2*pi*7*n1/N)+1/2*cos(2*pi*9*n1/N); x2=cos(2*pi*7*n2/N)+1/2*cos(2*pi*9*n2/N); X1=fft(x1,N);X2=fft(x2,N); X=X1+X2; Y=abs(X); stem(Y);
10203040506070
2、已知某序列在单位圆上的N=64等分样点的Z 变换为:。

用N 点IFFT 程序计算出和。

程序代码如下: N=64; k=0:1:N-1;
X=1./(1-0.8*exp(-j*2*pi*k/N)); x=ifft(X,N); stem(abs(x));
0.20.40.60.811.21.4
三、利用至少两种频率估计方法编程求给定信号的频率(要求运算
过程中使用小于等于128点的FFT)
无噪声、20dB、15dB、10dB、5dB、0dB、-5dB
已知信号的采样率Fs= 4000 Hz
方法一:谱峰检测法
程序代码如下:
function f=wxk3
load signal;
N=128;
Fs=4000;
f=zeros(1,7);
y=abs(fft(x,N));
[m,n]=max(y);
f(1)=(n-1)*Fs/N;
SNR=[20 15 10 5 0 -5];
for i=1:6
x=awgn(x,SNR(i));
y=abs(fft(x,N));
[m,n]=max(y);
f(i+1)=(n-1)*Fs/N;
end
plot(f);hold;
plot(f,'.'); axis([0 8 593 595]);
xlabel('无噪声--> 20dB --> 15dB --> 10dB --> 5dB --> 0dB --> -5dB');
legend('谱峰估计法');
根据谱峰估计法的计算原理可知,所给信号的频率介于593.6到593.8之间
12345678593593.2593.4593.6593.8594594.2594.4594.6594.8595
无噪声 --> 20dB --> 15dB --> 10dB --> 5dB --> 0dB --> -5dB
方法二:导数法
程序代码如下:
function f=wxk4
Fs=4000;
N=128;
n=1;
delta=6;
SNR=[20 15 10 5 0 -5];
load signal;
signal=zeros(7,length(x));
signal(1,:)=x;
for i=1:6
signal(i+1,:)=awgn(x,SNR(i)); end
for j=1:7
F=abs(fft(signal(j,:),N));
[~,k0]=max(F);
En1=0;En2=0;
for k=k0-delta:k0+delta;
En1=En1+(k-1)^(2*n)*F(k)^2; En2=En2+F(k)^2;
end
f(j)=Fs/N*(En1/En2)^(1/(2*n));
end
plot(f,'r');hold;
plot(f,'.r');axis([0 8 570 620]);
xlabel('无噪声 --> 20dB --> 15dB --> 10dB --> 5dB --> 0dB --> -5dB');
legend('导数法');
无噪声 --> 20dB --> 15dB --> 10dB --> 5dB --> 0dB --> -5dB
根据导数法计算而来的所给信号的频率介于595到600之间
综合谱峰估计法和导数法可知,所给信号频率大概在600左右。

相关主题