失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 数字信号处理实验1:线性卷积与圆周卷积的计算 利用FFT快速卷积

数字信号处理实验1:线性卷积与圆周卷积的计算 利用FFT快速卷积

时间:2022-04-01 13:20:18

相关推荐

数字信号处理实验1:线性卷积与圆周卷积的计算 利用FFT快速卷积

杭电_数字信号处理课程设计_实验1

一、实验目的

实验一目的:

1、掌握计算机的使用方法和常用系统软件及应用软件的使用。

2、通过MATLAB编程,上机调试程序,进一步增强使用计算机解决问题的能力。

3、掌握线性卷积与循环卷积软件实现的方法,并验证二者之间的关系。

实验三目的:

1、通过这一实验,加深理解FFT在实现数字滤波(或快速卷积)中的重要作用,更好的利用FFT进行数字信号处理。

2、进一步掌握循环卷积和线性卷积两者之间的关系。

二、实验要求及内容

实验一:

实验一代码:

clear allx1 = [1 2 3 4 5];x2 = [1 2 1 2];N = 5;ycn1=circonv(x1,x2,N);ny1=[0:1:length(ycn1)-1];subplot(3,2,1);stem(ny1,ycn1);ylabel("循环卷积1:N=5")axis([0,9,0,25]);N = 6;ycn2=circonv(x1,x2,N);ny2=[0:1:length(ycn2)-1];subplot(3,2,2);stem(ny2,ycn2);ylabel("循环卷积2:N=6")axis([0,9,0,25]);N = 9;ycn3=circonv(x1,x2,N);ny3=[0:1:length(ycn3)-1];subplot(3,2,3);stem(ny3,ycn3);ylabel("循环卷积3:N=9")axis([0,9,0,25]);N = 10;ycn4=circonv(x1,x2,N);ny4=[0:1:length(ycn4)-1];subplot(3,2,4);stem(ny4,ycn4);ylabel("循环卷积4:N=10")axis([0,9,0,25]);y1n=conv(x1,x2);L_length = length(x1)+length(x2)-1-1;ny5 = [0:1:L_length];subplot(3,2,5);stem(ny5,y1n);ylabel("线性卷积")axis([0,9,0,25]);

实验一循环卷积通用程序:

function yc = circonv(x1,x2,N)if length(x1)>Nerror('N must not be less than length of x1');endif length(x2)>Nerror('N must not be less than length of x1');end%以上语句判断两个序列的长度是否小于Nx1 = [x1,zeros(1,N-length(x1))]; %填充序列x1(n)使其长度为N1+N2-1x2 = [x2,zeros(1,N-length(x2))]; %填充序列x2(n)使其长度为N1+N2-1n = [0:1:N-1];x2 = x2(mod(-n,N)+1); %生成序列x2((-n))NH = zeros(N,N);for n = 1:1 :NH(n,:) = cirshiftd(x2,n-1,N); %该矩阵的k行为x2((k-1-n))Nendyc = x1 * H'; %计算循环卷function y = cirshiftd(x,m,N)if length(x)>Nerror('length of x must be less than N');endx = [x,zeros(1,N-length(x))];n = [0:1:N-1];y = x(mod(n-m,N)+1);

实验三:

实验三代码:

clear all;N1 = 16;N2 = 17;N = N1 + N2 - 1;n = [0:1:N1-1];h = [0:1:N2-1];nx = [0:1:N-1];xn1 = ones(1,N1);xn2 = cos(2*pi/N1*n);xn3 = (1/3).^n;hn = (1/2).^h;yn1 = fft_conv(xn1,hn,N);yn2 = fft_conv(xn2,hn,N);yn3 = fft_conv(xn3,hn,N);subplot(3,1,1);stem(nx,yn1);ylabel("序列1")axis([0,32,0,2.5]);subplot(3,1,2);stem(nx,yn2);ylabel("序列2")axis([0,32,-2,2]);subplot(3,1,3);stem(nx,yn3);ylabel("序列3")axis([0,32,0,1.1]);

实验三FFT数字滤波器通用程序:

function yn = fft_conv(xn,hn,N)if length(xn)>Nerror('N must not be less than length of x1');endif length(hn)>Nerror('N must not be less than length of x1');endif rem(log2(N),1)~=0error('N must be the power of 2');endxn = [xn,zeros(1,N-length(xn))];hn = [hn,zeros(1,N-length(hn))];XK = fft(xn,N);HK = fft(hn,N);YK = XK.*HK;yn = ifft(YK,N);if (all(imag(xn)==0)) && (all(imag(hn)==0))yn = real(yn);elseerror('xn,hn may not be real array');end

三、实验结果与分析:

实验一结果:

该实验结果与笔算结果相同,符合题目要求。

实验三结果:

该实验结果与笔算结果相同,符合题目要求。

四、实验总结:

本次实验使我认识到了用工具解决DSP问题的方便性,专业性及快捷性,使我对matlab的认识更加深入,对于数字信号处理的相关知识的领悟更加明白,但是我在编写代码的过程同样遇到了一些问题,比如定义函数的时候,文件名要和函数名相同,否则无法调用函数而运行报错。而且自定义的函数,和编写的主程序最好放在同一个文件夹,以免因为路径不同而导致运行出错。

如果觉得《数字信号处理实验1:线性卷积与圆周卷积的计算 利用FFT快速卷积》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。