Matlabは、DFT、線形畳み込み、および円形畳み込み操作を実装します

シーケンスのNポイントDFTを見つける

%计算矩形序列的4816点DFT
N1=4;N2=8;N3=16;
k1=0:N1-1;
k2=0:N2-1;
k3=0:N3-1;
n=0:N1-1;
w=2*pi*(0:2047)/2048;
Xw=(1-exp(-j*4*w))./(1-exp(-j*w));
xn=[(n>=0)&(n<4)];
X1K=dft(xn,N1); %dft为我定义的函数,可以用fft代替
X2K=dft(xn,N2);
X3K=dft(xn,N3);

subplot(2,2,1);
stem(k1,abs(X1K),'.');
xlabel('');ylabel('|X1K|');
title('N=4,DFT幅度');hold on
plot(N1/2*w/pi,abs(Xw));

subplot(2,2,2);
stem(k2,abs(X2K),'.');
xlabel('');ylabel('|X2K|');
title('N=8,DFT幅度');hold on
plot(N2/2*w/pi,abs(Xw));

subplot(2,2,3);
stem(k3,abs(X3K),'.');
xlabel('');ylabel('|X3K|');
title('N=16,DFT幅度');hold on
plot(N3/2*w/pi,abs(Xw));

2つのシーケンスの循環畳み込みを見つける

function y=circonv(x1,x2,N)
x1=[1,1,1];
N=7;   %输入卷积点N
nx1=0:length(x1)-1;
x2=[1,2,3,4,5];
nx2=0:length(x2)-1;
x_1=[x1 zeros(1,N-length(x1))]; 
h_1=[x2 zeros(1,N-length(x2))];
y1=conv(x_1,h_1);
z_1=[zeros(1,N) y1(1:(N-1))];
z_2=[y1((N+1):(2*N-1)) zeros(1,N)];
z=z_1(1:(2*N-1))+z_2(1:(2*N-1))+y1(1:(2*N-1));
y=z(1:N);
ny=0:N-1;
subplot(311);
stem(nx1,x1);
title('x1序列');
grid;
subplot(312);
stem(nx2,x2);
title('x2序列');
grid;
subplot(313);
stem(ny,y);
title('N=7圆周卷积序列');
grid;
end

2つのシーケンスの線形畳み込みを見つける

clc
clear all
x=[1,1,1];
nx=[0:length(x)-1];
h=[1,2,3,4,5];
nh=[0:length(h)-1];
y=circonv(x,h,5);
ny=[0:1:length(y)-1];
subplot(1,3,1)
stem(nx,x);
xlabel('n')
ylabel('幅度')
title('X')
subplot(1,3,2)
stem(nh,h)
xlabel('n')
ylabel('幅度')
title('h')
subplot(1,3,3)
stem(ny,y);
xlabel('n')
ylabel('幅度')
title('线性卷积') 

おすすめ

転載: blog.csdn.net/qq_45229168/article/details/109923625