逐行分析代码n1 = 0:1:12; x1 =0.9.^n1; h = ones(1,12); N =length(x1)+length(h)-1; n = 0:N-1; ny = 0:20; y1 = circonvt(x1,h,21); y2 = circonvt(x1,h,N); x1 = [x1 zeros(1,N-length(x1))]; h = [h zeros(1,N-length(h))]; X1 = fft(x1,N); H = fft(h,N); X = X1.*H; x = ifft(X); x = real(x); subplot(2,2,1);stem(n,x1);title('x1(n)');axis([0,33,0,1]); subplot(2,2,2);stem(n,h);title('h(n)');axis([0,33,0,1]); subplot(2,2,3);stem(ny,y1,'fill');title('21点循环卷积 ');axis([0,33,0,8]); hold on;subplot(2,2,4);stem(n,x);title('线性卷积');axis([0,33,0,8]); subplot(2,2,3);stem(n,x,'r','--'); axis([0,33,0,8]); hold off
时间: 2024-03-31 14:36:15 浏览: 96
1. n1 = 0:1:12; - 定义一个从0到12,步长为1的等差数列n1。
2. x1 =0.9.^n1; - 将x1定义为0.9的n1次方。
3. h = ones(1,12); - 将h定义为长度为12的全1向量。
4. N =length(x1)+length(h)-1; - 计算x1和h的长度之和再减去1,得到线性卷积结果的长度。
5. n = 0:N-1; - 定义一个从0到N-1,步长为1的等差数列n。
6. ny = 0:20; - 定义一个从0到20,步长为1的等差数列ny。
7. y1 = circonvt(x1,h,21); - 调用circonvt函数,计算x1和h的21点循环卷积结果y1。
8. y2 = circonvt(x1,h,N); - 调用circonvt函数,计算x1和h的线性卷积结果y2。
9. x1 = [x1 zeros(1,N-length(x1))]; - 将x1补零,使其长度为N。
10. h = [h zeros(1,N-length(h))]; - 将h补零,使其长度为N。
11. X1 = fft(x1,N); - 对x1进行N点FFT变换。
12. H = fft(h,N); - 对h进行N点FFT变换。
13. X = X1.*H; - 计算X1和H的乘积。
14. x = ifft(X); - 对X进行IFFT变换。
15. x = real(x); - 取x的实部。
16. subplot(2,2,1);stem(n,x1);title('x1(n)');axis([0,33,0,1]); - 绘制x1的图像。
17. subplot(2,2,2);stem(n,h);title('h(n)');axis([0,33,0,1]); - 绘制h的图像。
18. subplot(2,2,3);stem(ny,y1,'fill');title('21点循环卷积 ');axis([0,33,0,8]); hold on; - 绘制21点循环卷积结果y1的图像。
19. subplot(2,2,4);stem(n,x);title('线性卷积');axis([0,33,0,8]); - 绘制线性卷积结果x的图像。
20. subplot(2,2,3);stem(n,x,'r','--'); axis([0,33,0,8]); hold off - 在y1的图像上添加线性卷积结果x的图像。
阅读全文