ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:67.59KB ,
资源ID:20849968      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20849968.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(用MATLAB实现线性卷积运算北邮Word文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

用MATLAB实现线性卷积运算北邮Word文档格式.docx

1、在这种情况下,将序列y(n)分为长为N的若干段(如图3所示),每个输入段和前一段有M-1个重叠点 。此时只需要将发生重叠的前M-1个点舍去,保留重叠的部分并输出,则可获得序列y(n),算法如图4所示。 二、流程图设计 1、重叠相加法 2、重叠保留法三、MATLAB源代码 1、重叠相加源码function y = overlap_add(x,h,N)%重叠相加法实现%核心为将高点数DFT转化为低点数DFT,且用循环卷积计算线性卷积M = length(h); %获得h(n)的长度if N M %为N选择合适的值保证运算正确 N = M+1;endL = M+N-1; %循环卷积与线性卷积结果相同

2、时需要进行运算的最少点数Lx = length(x); %获得x(n)的长度T = ceil(Lx/N); %确定分段数Tt = zeros(1,M-1); %初始化序列t(n)x = x,zeros(1, (T+1)*N-Lx); %不足的分段补零y = zeros(1, (T+1)*N); %生成输出序列y(n),长度足够长for i=0:1:T xi=i*N+1; x_seg = x(xi:xi+N-1); %选择低点数计算时的分段x(n) y_seg = circular_conv(x_seg,h,L); %调用循环卷积计算线性卷积 y_seg(1:M-1) = y_seg(1:M-1

3、)+t(1:M-1);%完成重叠相加 t(1:M-1) = y_seg(N+1:L); %重新对t(n)赋值为保留的后M-1点 y(xi:xi+N-1) = y_seg(1:N); %直接输出前N个点y=y(1:Lx+M-1); %取出最终的输出序列function y = circular_conv( x1,x2,L)% 利用循环卷积计算线性卷积% 循环卷积采用频域计算方法,已FFT代替DFT,降低运算量X1k = fft(x1,L); %x1做L点FFTX2k = fft(x2,L);Yk = X1k.*X2k; %频域相乘 y = ifft(Yk); %FFT反变换得循环卷积结果 2、重

4、叠保留源码function y = overlap_save(x,h,N)%重叠保留法实现 %获得x(n)的长度 %获得h(n)的长度M %为N选择合适的值保证运算正确L = N+M-1; %为降低点数,取M+N-1点循环卷积即可 %确定分段数 %为不足的分段补零 xi = i*N+1; x_seg = t,x(xi:xi+N-1); %确定每个低点数卷积的分段x(n) t = x_seg(N+1:N+M-1); %为t(n)重新赋值为后M-1个点的值 %循环卷积计算线性卷积xi+N-1)=y_seg(M:%直接取出后N个点作为一次计算的输出 %取出实际的输出序四、实验结果与分析对两种算法采用

5、同一序列进行测试分析。设 。计算调用conv()计算首先利用Matlab对两序列直接运算,得出正确结果。代码为:x=1:10,h=-2,0,+2,conv(x,h)结果为: -2 -4 -4 -4 -4 -4 -4 -4 -4 -4 18 20 测试重叠相加算法overlap_add(x,h,6)结果为: -2.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 18.0000 20.0000 测试重叠保留算法overlap_save(x,h,4) -2.0000 -4.0000 -4.000

6、0 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 18.0000 20.0000 由此可见,两种算法运行正常,计算正确。更多的测试也正确。算法正确。五、讨论与总结1、算法效率分析:A.重叠相加法 分段长度序列长度4101001000100000.0131510.0002660.0189630.0273780.0748340.0011730.0006050.0003190.0009170.0100070.0099360.0028240.000920.0007460.0139270.0741810.0271210.0066820.0

7、04060.0099221000000.6069330.2654760.0528520.0301060.04824510000006.0335282.4835260.3962060.2460520.333871000000059.9377625.104663.8974442.3281223.231499由上表和图1可以看出,随着数据规模增大,运算耗时呈线性增长,因而算法的时间复杂度为O(n),其中n为数据规模。因而重叠相加算法具有可行性和实用性。再从算法的空间复杂度来看,由于分配的缓存空间只由分段长度确定,不随数据规模的变化而变化,因而空间复杂度为O(1)。综合考察,重叠相加法具有较好的时间和

8、空间复杂度。当数据量达到千万量级时,运算延时最少大约为2.328s,可运用于对信号的实时处理。B.重叠保留法 分段长度0.0005120.0002250.0012490.0008810.0084540.0010140.0005140.0002720.0008360.0088020.0092970.0024020.0007870.0006870.0111070.056740.0231940.0061220.0039410.0110830.5588650.2168180.0391750.0260440.0426435.2218792.1440890.3574280.2362770.32753952

9、.246422.022153.5932822.3357253.251762由上表和图2可以看出,同重叠相加法类似,随着数据规模的增大,运算耗时呈线性增长,算法的时间复杂度为O(n),其中n为数据规模。同样由于分配的缓存空间只由分段长度确定,空间复杂度为O(1)。综合考察,重叠保留法也具有较好的时间和空间复杂度。当数据量达到千万量级时,运算延时最少大约为2.335s,可运用于对信号的实时处理。C.调用conv()运算耗时(s)0.0001130.0000810.0001170.0002750.0024920.0321550.32588由上表和图3可以看出,调用系统自带的线性卷积运算函数conv(

10、)计算线性卷积,运算时间和序列长度也有线性关系。时间复杂度为O(n)。但此时的信号处理延时很小,当数据达到千万量级时,延时仅为0.325s,实时性非常好!D.综合对比分析 分段长度平均耗时(s)重叠相加9.525273.9834970.6247690.3767690.531758重叠保留 8.2992433.4870560.5711880.3720560.523056调用conv() 0.051630.05163重叠保留法和重叠相加法运行效率与分段长度相关性较强。分段数和卷积运算的序列长度为非线性关系,且当分段长度维持在大约1000点左右时,获得最高的平均运行效率。内置函数conv()运行效率

11、与分段数无关。重叠相加和重叠保留两者效率几乎一致。在实际应用中,重叠保留和重叠相加主要用于实施信号处理,因而输入序列是连续输入,在保证实时性的要求下,输入序列的分段不能太长。设想实际情况如下:设语音信号采样率为8KHz,相当于每秒输入8000点序列,由重叠相加法处理(重叠保留法类似)。如若分段为1000点,考虑实际系统中为实时输出(Matlab算法模拟里面是将所有序列保存之后再输出),因而每分段处理延时0.00406/8s,又接收1000点延时为1/8s,故处理总延时为0.1255075s。此时接收延时起主要作用,影响实时性。减小接收延时则需要减小分段点数,同时使得处理延时增加。接收延时和处理

12、延时两者是不可调和的矛盾。实际处理时,可根据实时性要求,折中选择分段点数,既满足实时性要求,又降低系统开销。2、故障和问题分析分段问题初始时没有考虑到分段长度的限制,导致用户输入分段小于系统冲击响应h(n)的长度时运算出错。后增加一个判断语句,当出现前述情况时,自动提升分段点数,问题解决。运算完整性问题在写好代码之后的测试中,出现了一个十分奇怪的现象,即:当输入点数为1000、10000或者更大时卷积运算最后M-1个结果为0。反复测试发现,不仅1000和10000,只要是分段数N的倍数的输入点数都存在同样问题,而其他非倍数的输入,运算与conv() 函数运算结果完全一致。通过设置断点,逐句调试

13、,最终发现问题的症结,当输入序列为N的倍数时,最后的一段卷积实际上没有做。因而将循环次数增加1,将最后一次保留的M-1个点补全N个0,做最后一次分段卷积。修改后,测试结果正确。算法硬件实现第一,重叠保留和重叠相加算法在硬件实现时将算法中的临时变量都化为缓存,所以考虑缓存的大小限制,不能将输入序列分段过长,否则所需的缓存将加大,成本加大。第二,接收延时和处理延时两者存在矛盾,减少分段长度,可减少接收延时但会增加处理延时,同理,增大分段长度,可减少处理延时,但将增加接收延时。具体实现时需要综合考虑两者的作用,去最优化值。第三,算法实际实现时,可实时输出处理过的分段序列,与直接线性卷积相比,实时性大大增强,需要的计算单元特别是系统缓存明显减少。因而实用性很强。第四,分段卷积能灵活计算长输入序列对IIR滤波器的响应,且延时较小,因而很常用。从硬件实现角度讲,重叠保留和重叠相加法效率几乎一致。第五,测试算法性能时采用较短的h(n)序列,主要考虑到分段卷积应用在单位冲击响应较短的IIR滤波器。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1