数字信号课程报告.docx

上传人:b****6 文档编号:7158017 上传时间:2023-01-21 格式:DOCX 页数:24 大小:251.99KB
下载 相关 举报
数字信号课程报告.docx_第1页
第1页 / 共24页
数字信号课程报告.docx_第2页
第2页 / 共24页
数字信号课程报告.docx_第3页
第3页 / 共24页
数字信号课程报告.docx_第4页
第4页 / 共24页
数字信号课程报告.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

数字信号课程报告.docx

《数字信号课程报告.docx》由会员分享,可在线阅读,更多相关《数字信号课程报告.docx(24页珍藏版)》请在冰豆网上搜索。

数字信号课程报告.docx

数字信号课程报告

数字信号处理实验报告分析与总结

044_陈增贤电子二班

1、实验一

1.编写程序验证卷积定律。

(1)卷积定律:

时域圆周卷积在频域上相当于两序列分别做傅立叶变换之积的傅立叶反变换。

(2)程序:

x=[11011];%原始序列

y=[12021];

%直接计算线性卷积(或线性卷积)

z=conv(x,y);

figure

(1),subplot(311),stem(x);

title('x序列');axis([0904]);

subplot(312),stem(y);

title('y序列');axis([0904]);

subplot(313),stem(z);

title('z序列,x卷积y');axis([010010]);

%利用fft算法计算

N=10;%N取10时

x1=[xzeros(1,N-length(x))];%在x1向量后面补充0,使其长度变为N

y1=[yzeros(1,N-length(y))];%在y1向量后面补充0,使其长度变为N

X1=fft(x1);%对x1作傅立叶变换

Y1=fft(y1);%对y1作傅立叶变换

Z1=X1.*Y1;%求矩阵乘积

z1=ifft(Z1);%对乘积作傅立叶反变换

figure

(2),

subplot(321),stem(x1);title('x1序列');

subplot(322),stem(real(X1));title('X1实部序列');

subplot(323),stem(y1);title('x1序列');

subplot(324),stem(real(Y1));title('Y1实部序列');

subplot(325),stem(z1);title('z1实部序列');

subplot(326),stem(real(Z1));title('Z1实部序列');

N=6;%N取6时

x2=[xzeros(1,N-length(x))];

y2=[yzeros(1,N-length(y))];

X2=fft(x2);

Y2=fft(y2);

Z2=X2.*Y2;

z2=ifft(Z2);

figure(3),

subplot(321),stem(x2);title('x2序列');

subplot(322),stem(real(X2));title('X2实部序列');

subplot(323),stem(y2);title('y2序列');

subplot(324),stem(real(X2));title('Y2实部序列');

subplot(325),stem(z1);title('z2实部序列');

subplot(326),stem(real(Z1));title('Z2实部序列');

(3)运行结果

分析与总结:

以上三个图依次为序列x,序列y卷积图,N=10的FFT图,N=6的FFT图,对比可知对序列x、序列y分别进行傅立叶变换后在进行反变换的结果与系列x、序列y卷积结果完全相同,这就是著名的卷积定律。

2、实验二

1.编写matlab程序,完成输入倒位序,输出自然顺序,按照时间抽选的基2-

(1)FFT算法程序的编写;

程序1:

%把N个数据进行倒序

N=8;

A=[04261537];

NV2=N/2;NM1=N-1;

J=0;I=0;

whileI

ifI

T=A(J+1);

A(J+1)=A(I+1);

A(I+1)=T;

end

K=NV2;

whileK<=J

J=J-K;

K=K/2;

end

J=J+K;

I=I+1;

End

A

程序2:

%基2按时间抽选

forM=1:

3%将DFT做m次基2分解,从左到右,对每次分解作DFT运算

Nmr=2^M;

U=1;%旋转因子u初始化

WN=exp(-j*2*pi/Nmr);%本次分解的基本DFT因子WN=exp(-i*2*pi/Nmr)

forn=1:

Nmr/2%本次跨越间隔内的各次碟形运算

fork=n:

Nmr:

N%本次碟形运算的跨越间隔为Nmr=2^mm

kp=k+Nmr/2;%确定碟形运算的对应单元下标(对称性)

t=A(kp)*U;%碟形运算的乘积项

A(kp)=A(k)-t;%碟形运算的加法项

A(k)=A(k)+t;

end

U=U*WN;%修改旋转因子,多乘一个基本DFT因子WN

end

end

(2)调试程序,运行结果:

程序1结果:

输入倒位序,输出自然序

程序2调试结果:

按时间抽选基2-FFT

分析与总结:

(1)输入是倒位序0、4、2、6、1、5、3、7,输出自然序1、2、3、4、5、6、7,在编写程序时注意换址的处理,否则程序不能成功。

(2)进行一次蝶形运算需要

次复数乘法和N次复数加法,因此一个人完整的基-2FFT算法需要

次复数乘法和

次复数加法,本来应该需要N^2次复数乘法和加法,这样就大大减少了运算量。

2.已知周期信号为

,试用DFT法分析其频谱。

(1)程序:

N=input('N=');T=0.025;n=1:

N;D=2*pi/(N*T);%原始数据

xa=cos(20*n*T);Xa=T*fftshift(fft(xa,N));%计算分辨率

Xa

(1);k=floor(-(N-1)/2:

(N-1)/2);

TITLLE=sprintf('N=%i,L=%i',N,N*T);

plot(k*D,abs(Xa));axis([-20,20,0,max(abs(Xa))+2]);

xlabel('\omega');ylabel('|X(j\omega)|');title(TITLE);

(2)程序流图

(3)

输入原始数据

计算分辨率

求DFT,移位

绘制频谱图图

(3)运行结果

N=200,L=5

N=400,L=10

分析与总结:

此信号的最高频率为fh=20\(2*pi),因此抽样频率fs>=2fh=20/pi,即取抽样时间间隔T=1/fs<=pi/20,由于截断的影响,频谱会扩散,所以需要采用更高的采样频率,取T=0.025。

因为抽样后的序列不是周期性序列,因而截断长度不可能恰好是周期的整数倍,所以不能得到准确的频谱峰值,只能去较大的L=NT,使得到数据更多一些,频谱更接近真实情况。

3、实验五

1.语音信号的采集

(1)程序:

[y,fs,bits]=wavread('C:

\Users\winodws7\Desktop\数字信号处理实验\陈增贤录音.wav');

sound(y,fs,bits);Y=fft(y,4096);figure

(1);

plot(y);title('原时域波形');

ylabel('amplitude');xlabel('n');

figure

(2);plot(abs(Y));

axis([0,4096,0,3]);title('原频谱特性');

ylabel('amplitude');xlabel('frequency\HZ');

(2)结果图:

分析与总结:

注意wavread函数的使用方法,读入wav格式的语音信号,该语音信号可由cooledit软件将mp3格式的文件转换为wav格式的,刚开始编译程序时老是命令窗口老是显示我的文件不能被打开,后来经过查找各种资料才知道,wav格式也可以分成好几种,matlab只能读取cooledit中windowspcm.wav格式的语音,如果保存成其他wav格式的则读取时会出现error。

编译出现波形的那一刹那我真的特别开心!

用滤波器对信号滤波,比较滤波前后语音信号波形频谱

2.1巴特沃斯低通滤波器滤波

clear;closeall;

[y,fs,bits]=wavread('C:

\Users\winodws7\Desktop\数字信号处理实验\陈增贤录音.wav');

sound(y,fs,bits);Y=fft(y,4096);

FS=8000;Fl=1000;Fh=1200;

wp=(Fl/FS)*2*pi;ws=(Fh/FS)*2*pi;

OmegaP=2*FS*tan(wp/2);OmegaS=2*FS*tan(ws/2);

[n,wn]=buttord(OmegaP,OmegaS,1,100,'s');

[b,a]=butter(n,wn,'s');[bz,az]=bilinear(b,a,FS);

freqz(bz,az,4096,FS,'whole');

x=filter(b,a,y);X=fft(x,4096);figure

(2);

sublpo(211),plot(abs(Y));axis([0,4096,0,3]);

title('滤波器前信号');

sublpoy(211),plot(abs(Y));axis([0,4096,0,3]);

title('双线性巴特沃斯低通滤波器信号');

2.2巴特沃斯低通滤波器滤波

程序:

clear;closeall;

[y,fs,bits]=wavread('C:

\Users\winodws7\Desktop\数字信号处理实验\陈增贤录音3.wav');

sound(y,fs,bits);Y=fft(y,4096);

FS=8000;Fl=1000;Fh=1200;

wp=(Fl/FS)*2*pi;ws=(Fh/FS)*2*pi;

OmegaP=2*FS*tan(wp/2);OmegaS=2*FS*tan(ws/2);

[n,wn]=buttord(OmegaP,OmegaS,1,100,'s');

[b,a]=butter(n,wn,'s');[bz,az]=bilinear(b,a,FS);

freqz(bz,az,4096,FS,'whole');

x=filter(b,a,y);X=fft(x,4096);figure

(2);

subplot(211),plot(abs(Y));axis([0,4096,0,3]);

title('双线性巴特沃斯低通滤波前的信号频谱');

subplot(212),plot(abs(X));axis([0,4096,0,3]);

title('双线性巴特沃斯低通滤波后的信号频谱');

2.3巴特沃斯高通滤波器滤波

程序:

clear;closeall;

[y,fs,bits]=wavread('C:

\Users\winodws7\Desktop\数字信号处理实验\陈增贤录音3.wav');

sound(y,fs,bits);Y=fft(y,4096);FS=000;

Fl=4800;Fh=5000;

wp=(Fh/FS)*2*pi;ws=(Fl/FS)*2*pi;

OmegaP=2*FS*tan(wp/2);OmegaS=2*FS*tan(ws/2);

[n,wn]=buttord(OmegaP,OmegaS,1,100,'s');

[b,a]=butter(n,wn,'s');[bz,az]=bilinear(b,a,FS);

freqz(bz,az,4096,FS,'whole');

x=filter(b,a,y);X=fft(x,4096);figure

(2);

subplot(211),plot(abs(Y));axis([0,4096,0,3]);

title('双线性巴特沃斯高通滤波前的信号频谱');

subplot(212),plot(abs(X));axis([0,4096,0,3]);

title('双线性巴特沃斯高通滤波后的信号频谱');sound(x,fs,bits);

2.4切比雪夫带通滤波器滤波

程序:

clear;closeall;

[y,fs,bits]=wavread('C:

\Users\winodws7\Desktop\数字信号处理实验\陈增贤录音3.wav');

sound(y,fs,bits);Y=fft(y,4096);

wp1=1200/8000*2*pi;wp2=3000/8000*2*pi;

ws1=1000/8000*2*pi;ws2=3200/8000*2*pi;

Rp=1;Rs=100;Wp1=tan(wp1/2);Wp2=tan(wp2/2);

Ws1=tan(ws1/2);Ws2=tan(ws2/2);

BW=Wp2-Wp1;W0=Wp1*Wp2;W00=sqrt(W0);

WP=1;WS=WP*(W0^2-Ws1^2)/(Ws1*BW);

[N,Wn]=cheb1ord(WP,WS,Rp,Rs,'s');

[B,A]=cheby1(N,Rp,Wn,'s');[BT,AT]=lp2bp(B,A,W00,BW);

[num,den]=bilinear(BT,AT,0.5);

figure

(1);[h,omega]=freqz(num,den,32);

subplot(221);stem(omega/pi,abs(h));

xlabel('\omega/\pi');ylabel('|H(z)|');

subplot(222);stem(omega/pi,20*log10(abs(h)));

xlabel('\omega/\pi');ylabel('增益.dB');

x=filter(B,A,y);X=fft(x,4096);figure

(2);

subplot(211),plot(abs(Y));axis([0,4096,0,3]);

title('切比雪夫带通滤波前的信号频谱');

subplot(212),plot(abs(X));axis([0,4096,0,3]);

title('切比雪夫带通滤波后的信号频谱');sound(x,fs,bits);

2.5窗函数设计低通滤波器滤波

程序:

clear;closeall;

[y,fs,bits]=wavread('C:

\Users\winodws7\Desktop\数字信号处理实验\陈增贤录音3.wav');

sound(y,fs,bits);Y=fft(y,4096);fs=8000;

fc=1200;wc=2*fc/fs;wn=kaiser(49);

b=fir1(48,wc,wn);freqz(b,1)

figure;x=fftfilt(b,y);X=fft(x,4096);

subplot(211),plot(abs(Y));axis([0,4000,0,3]);

title('窗函数低通滤波前的信号频谱');

subplot(212),plot(abs(X));axis([0,4000,0,3]);

title('窗函数低通滤波后的信号频谱');sound(x,fs,bits);

2.6凯泽窗函数高通滤波器滤波

程序:

clear;closeall;

[y,fs,bits]=wavread('C:

\Users\winodws7\Desktop\数字信号处理实验\陈增贤录音3.wav');

sound(y,fs,bits);Y=fft(y,4096);fs=22050;

fc=4800;wc=2*fc/fs;wn=kaiser(49);

b=fir1(48,wc,'high',wn);

freqz(b,1)figure;

x=fftfilt(b,y);X=fft(x,4096);

subplot(211),plot(abs(Y));axis([0,4000,0,3]);

title('窗函数高通滤波前的信号频谱');

subplot(212),plot(abs(X));axis([0,4000,0,3]);

title('窗函数高通滤波后的信号频谱');sound(x,fs,bits);

2.7凯泽窗函数带通滤波器滤波

程序:

clear;closeall;

[y,fs,bits]=wavread('C:

\Users\winodws7\Desktop\数字信号处理实验\陈增贤录音3.wav');

sound(y,fs,bits);Y=fft(y,4096);fs=8000;

fc1=1000;fc2=3200;wc1=2*fc1/fs;wc2=2*fc2/fs;

wn=kaiser(49);b=fir1(48,[wc1wc2],wn);

freqz(b,1)figure;

x=fftfilt(b,y);X=fft(x,4096);

subplot(211),plot(abs(Y));axis([0,4000,0,3]);

title('窗函数带通滤波前的信号频谱');

subplot(212),plot(abs(X));axis([0,4000,0,3]);

title('窗函数带通滤波后的信号频谱');sound(x,fs,bits);

2.8FIR和IIR滤波效果的比较

2.8.1低通滤波比较:

分析:

由图可知,窗函数的低通滤波后,信号在阻带的波动非常小,效果相对较好一些。

2.8.2高通滤波比较:

分析与总结:

由图对比可知,窗函数高通滤波后信号在阻带的波动较大,所以效果不如巴特沃斯滤波器。

但是巴特沃斯高通滤波后信号竟然全被滤除了,刚开始还以为是因为程序逻辑问题,后来才知道不是这样的,分析大致原因是我录的音频不在老师给的高通频率参数范围。

前面的低通滤波也出现了同样的现象,原因都是一样的。

由于时间有限,不能再重新录音分析了,但是还是能够做到了比较判断滤波器的优劣程度。

2.8.3带通滤波比较:

分析与总结:

对比两图可知,切比雪夫滤波频谱比较尖锐,只能通过很小频段的波形,而窗函数能通过适当范围的频率波形,且滤波效果较为理想。

4、实验六

1.如何获取信号

(1)建立如图所示仿真模型:

(2)Sinewave参数设置如下图所示:

(3)仿真图:

2.设信号

,试利用Simulink计算

点的离散傅立叶变换。

(1)建立仿真模型:

(2)设置sinefromworkspace的参数:

(3)仿真结果:

分析与总结:

(1)在Simulink中可产生连续信号和离散信号,正弦连续信号可用模块sinewave,设置参数即可调节相角和频率,以及幅值。

在产生离散正弦信号时,要使用DSPsinewave模块和buffer模块。

还可以通过命令窗口输入产生任意序列,这就需要用到signalfromworkspace模块。

(2)在simulink中可对离散信号进行离散傅立叶变换,其中要用到buffer模块和fft模块,可通过设置buffer模块的参数改变离散傅立叶变换的点数。

(3)个人觉得simulink仿真比编程要简单,方便一些,特别是在进行信号傅立叶变换的时候,编程容易产生不能很快被查找出来的错误。

五、心得体会

《数字信号处理》这门课程是沈老师带的我们最后一门课了,这门课结合了之前我们所学的《信号与系统》、《MATLAB教程》的知识,使我们的动手能力和思维创新能力得到了新的提升,当然,这也是最难的一个实验,所花费的时间比以前我们做的《自动控制原理》实验所花的时间要多得多,从算法的流程设计,程序编写,调试和修改,到最后的仿真都需要我们认真仔细,不可马虎,因为代码非常长,一不小心就出现error,实验课三次就上完了,可到最终大报告的完成我一共花了三周多吧。

可能是我太追求完美了,在语音信号处理那一块花的时间比较多,老是想用cooledit录一段非常适合做滤波处理的语音,最后的结果还算差强人意。

总的来说,这次的实验效果还是非常不错的,整个过程,有疑惑,抱怨,也有惊喜,快乐,所以这是一段很神奇的体验,老师,以后我还会继续努力的!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

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

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