资源描述:
《数字信号多采样率设计报告材料.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验名称:多采样率数字信号处理一.实验原理:多采样率数字信号处理共分为3方面的问题:信号的整数倍抽取、信号的整数倍插值和信号的有理数倍速率转换。Matlab信号处理工具箱提供了抽取函数decimate用于信号整数倍抽取,其调用格式为:y=decimate(x,M)y=decimate(x,M,n)y=decimate(x,M,’fir’)y=decimate(x,M,n,’fir’)其中y=decimate(x,M)将信号x的采样率降低为原来的,抽取前缺省地采用8阶ChebyshevⅠ型低通滤波器
2、压缩频带。y=decimate(x,M,n)指定所采用ChebyshevⅠ型低通滤波器的阶数,通常。y=decimate(x,M,’fir’)指定用FIR滤波器来压缩频带。y=decimate(x,M,n,’fir’)指定所用FIR滤波器的阶数。Matlab信号处理工具箱提供了插值函数interp用于信号整数倍插值,其调用格式为:y=interp(x,L)y=interp(x,L,n,alpha)[y,b]=interp(x,L,n,alpha)其中y=interp(x,L)将信号的采样率提高到原
3、来的L倍。y=interp(x,L,n,alpha)指定反混叠滤波器的长度和截止频率alpha,缺省值为4和0.5。[y,b]=interp(x,L,n,alpha)在插值的同时,返回反混叠滤波器的系数向量。信号的有理数倍速率转换是使信号的采样率经由一个有理因子来改变,可以通过插值和抽取的级联来实现。Matlab信号处理工具箱提供了重采样函数resample用于有理倍数速率转换,其调用格式为:y=resample(x,L,M);y=resample(x,L,M,n);y=resample(x,L,
4、M,n,beta);y=resample(x,L,M,b);[y,b]=y=resample(x,L,M);其中,y=resample(x,L,M);将信号x的采样率转换为原来的倍,所用的低通滤波器为kaiser窗的FIR滤波器。y=resample(x,L,M,n)指定用x左右两边各n个数据作为重采样的邻域。y=resample(x,L,M,n,beta)指定Kaiser窗的FIR滤波器的设计参数,缺省值为5。y=resample(x,L,M,b)指定用于重采样的滤波器系数向量。[y,b]=re
5、sample(x,L,M)除了得到重采样信号外,还返回所使用的滤波器系数向量。二.实验容:1、令,,实现以下采样率的转换:(1)作倍的插值;(2)作倍的抽取;(3)作倍的采样率转换。给出相对每一种情况下的数字滤波器的频率特性和频率转换后的信号波形。2、录制一段语音信号,对录制的信号进行采样,画出采样前后语音信号的时域波形和频谱图,改变信号的采样率,输出改变采样率后信号的频谱,对比前后语音信号的变化。三.程序:(1)n=0:30;x=cos(2*pi*n/12);y=interp(x,3);figu
6、re;subplot(2,2,1),stem(x);title('原始信号时域图');xlabel('(a)');subplot(2,2,2);plot(abs(fft(x)));title('原始信号频域图');xlabel('(b)');subplot(2,2,3);stem(y);title('插值后的信号时域图');xlabel('(c)');subplot(2,2,4);plot(abs(fft(y)));title('插值后的信号频域图');xlabel('(d)');(2)t=0:.
7、00025:1;x=cos(2*pi*t/12);y=decimate(x,3);figure,subplot(2,2,1),stem(x(1:120));title('原始信号时域图'),xlabel('(a)');subplot(2,2,2),plot(abs(fft(x))),title('原始信号频域图'),xlabel('(b)');subplot(2,2,3),stem(y(1:30));title('抽取后的信号时域图'),xlabel('(c)');subplot(2,2,4),p
8、lot(abs(fft(y)));title('抽取后的信号频域图'),xlabel('(d)');(3)n=0:38;x=cos(2*pi*n/12);[y,b]=resample(x,2,3);figure,subplot(2,2,1),stem(x);title('原始信号时域图'),xlabel('(a)');subplot(2,2,2),plot(b,'.'),title('滤波器的单位脉冲响应'),xlabel('(b)');subplot(2,2,3),stem(y)