信号处理之FFT与CZT变换

FFT与CZT变换

FFT

用FFT算法计算序列x(n)=[2,1,3,2,1,5,1]与h(n)=[1,2,-1,-3]的线性卷积,画出输入、输出序列的波形图。

x=[2 1 3 2 1 5 1];  
h=[1 2 -1 -3];  
N=length(x)+length(h)-1;
n=0:N-1;
x=[x,zeros(1,N-length(x))];
h=[h,zeros(1,N-length(h))];
X=fft(x);
H=fft(h);
Y=X.*H;
y=ifft(Y);
subplot(1,3,1);
stem(n,x,'.');
xlabel('n');
ylabel('x(n)');
title('x(n)');
grid;
 
subplot(1,3,2);
stem(n,h,'.');
xlabel('n');
ylabel('h(n)');
title('h(n)');
grid;
subplot(1,3,3);
stem(n,y,'.');
xlabel('n');
ylabel('y(n)');
title('y(n)');
grid;

结果如图:

在这里插入图片描述

已知模拟信号xa(t)如下所示,试用FFT算法求xa(t)的频谱。
在这里插入图片描述

要求:
采样时间间隔T分别取0.05s、0.02s、0.01s和0.01s,采样点数分别取200、500、1000和2000,试用FFT算法分别画出这四种情况的频谱图(幅度谱)。

T0=[0.05,0.02,0.01,0.01];
L0=[10,10,10,20];
for i=1:4
    T=T0(i);
    N=L0(i)/T0(i);
    D=2*pi/(N*T);
    n=0:N-1;
    x=exp(-0.02*n*T).*cos(6*pi*n*T)+2*cos(14*pi*n*T);
    k=floor(-(N-1)/2:(N-1)/2);
    X=T*fftshift(fft(x));
    [i,X(i)]
    subplot(2,2,i);
    plot(k*D,abs(X));
    axis([min(k*D),max(k*D),0,inf]);
    str=['T=',num2str(T),'N=',num2str(N)];
    title(str);
end

结果如图:

在这里插入图片描述

CZT变换

已知N=128,f1=8Hz,f2=8.22Hz,f3=9Hz,fs=40Hz,序列x(n)如下:
在这里插入图片描述

要求:
(1) 用CZT来求x(n)的DFT频谱(A=1时的CZT变换);
(2) 直接用FFT来求x(n)的频谱;
(3) 用CZT求x(n)的频谱,分析的起始频率点为7.2Hz,频率间隔为0.05Hz,M=60;

画出这三种情况下的频谱图,并进行分析。

N=128;
f1=8;f2=8.22;f3=9;fs=40;
stepf=fs/N;
n=0:N-1;
t=2*pi*n/fs;
n1=0:stepf:fs/2-stepf;
x=sin(f1*t)+sin(f2*t)+sin(f3*t);
M=N;
W=exp(-j*2*pi/M);
 
% A=1ʱµÄczt±ä»»
A=1;
Y1=czt(x,M,W,A);
subplot(311)
plot(n1,abs(Y1(1:N/2)));grid on;
 
% DTFT
Y2=abs(fft(x));
subplot(312)
plot(n1,abs(Y2(1:N/2)));grid on;
 
% Ïêϸ¹¹ÔìAºóµÄczt 
M=60;
f0=7.2;
DELf=0.05;
A=exp(j*2*pi*f0/fs);
W=exp(-j*2*pi*DELf/fs);
Y3=czt(x,M,W,A);
n2=f0:DELf:f0+(M-1)*DELf;
subplot(313);plot(n2,abs(Y3));grid on;

结果如图:

在这里插入图片描述

分析:频率为8Hz和8.22Hz的两个正弦的频谱不易分辨,第三个图中分点较细,三个正弦的谱线都可以分辨出来。

猜你喜欢

转载自blog.csdn.net/qq_36587495/article/details/108165920