目录
2、已知某序列编辑在单位圆上的N=64等分样点的Z变换为:
4、用FFT实现有限长序列的线性卷积,给定两个序列x=[2,1,1,2],h=[1,-1,-1,1]
一,实验原理
N点序列的DFT和IDFT变换定义式如下:
利用旋转因子具有周期性,可以得到快速算法(FFT)。
在MATLAB中,可以用函数和计算N点序列的DFT正、反变换。
二,实验内容
1、实现2N点实数序列
N=64。用一个64点的复数FFT程序,一次算出,并绘出 的图形。
N=64;
n=0: N-1;
n1=2*n;%n为偶数时
n2=2*n+1;%n为奇数时
n3=0:2*N-1;%信号的长度
%拆分时间域信号为奇部和偶部(2n/2n+1)
xn1=cos (2*pi*7*n1/N)+1/2*cos (2*pi*19*n1/N); %偶部
xn2=cos (2*pi*7*n2/N)+1/2*cos (2*pi*19*n2/N); %奇部
x1=fft(xn1); %对偶部进行FFT变换
x2=fft(xn2); %对奇部进行FFT变换
Xk1=x1+exp(-1j*pi*n/N).*x2;%
Xk2=x1-exp(-1j*pi*n/N).*x2;%
Xk1=[Xk1 zeros(1,64)];%
Xk2=[ zeros(1,64) Xk2];%
Xk=Xk1+Xk2;%将两部分拼起来
Xk=abs(Xk); %求取信号振幅
stem(n3,Xk); %绘出随频率变化的振幅
xlabel('频率');
ylabel('振幅');
title('N=64时的|X(k)|');%绘图标题
grid on;%显示网格线
2、已知某序列在单位圆上的N=64等分样点的Z变换为:
。
用N点IFFT程序计算。
k=0:63;
N=64;
X=1./(1-0.8*exp(-j*2*pi*k/N));
xn=ifft(X,N);
subplot(2,1,1);%分屏
stem(k,real(xn));
xlabel('n');
ylabel('re');
subplot(2,1,2);%分屏
stem(k,imag(xn),'r');
xlabel('n');
ylabel('im');
3、周期为N的余弦序列:
X[n]=cos(2πn/N),N=20
1,求该序列N点FFT
N=20;
n=0: N-1;
xn=cos(2*pi*n/N);
x1=fft(xn);
Xk=abs(x1); %求取信号振幅
stem(n,Xk);
xlabel('频率');
ylabel('振幅');
title('N点时的|X(k)|');%绘图标题
grid on;%显示网格线
2,求该序列2N点FFT
N=20;
n=0: 2*N-1;
xn=cos(2*pi*n/N);
x1=fft(xn);
Xk=abs(x1); %求取信号振幅
stem(n,Xk); %绘出随频率变化的振幅
xlabel('频率');
ylabel('振幅');
title('2N点时的|X(k)|');%绘图标题
grid on;%显示网格线
3,求该序列N/2点FFT
N=20;
n=0: N/2-1;
xn=cos(2*pi*n/N);
x1=fft(xn);
Xk=abs(x1); %求取信号振幅
stem(n,Xk); %绘出随频率变化的振幅
xlabel('频率');
ylabel('振幅');
title('N/2点时的|X(k)|');%绘图标题
grid on;%显示网格线
4、用FFT实现有限长序列的线性卷积,给定两个序列x=[2,1,1,2],h=[1,-1,-1,1]
1,直接计算两个序列的线性卷积
h = [2,1,1,2];
x = [1,-1,-1,1];
y = conv(h,x);%conv函数执行两个向量的卷积
n = 0:6;
stem(n,y);%绘制散点图
xlabel('Time index n');
ylabel('Amplitude');
title('Output Obtained by Convolution');
grid;%显示坐标的网格线
2,用FFT实现序列的线性卷积
在使用FFT进行线性卷积时,需要补零,具体原理请参考:
MATLAB实现 利用FFT和IFFT计算线性卷积_timerring的博客-CSDN博客_fft实现线性卷积
h = [2,1,1,2,0,0,0];
x = [1,-1,-1,1,0,0,0];
n=0:6;
Hn=fft(h);
Xn=fft(x);
Yn=Hn.*Xn;
y=ifft(Yn);
stem(n,y);%绘制散点图
xlabel('Time index n');
ylabel('Amplitude');
title('Output Obtained by Convolution');