DSP数字信号处理课程设计单片机红绿灯|DSP课程设计及总结|数字信号处理课程设计课程设计|计算机课程设计|精品课程网站设计
一、 设计目的
熟悉filter的设计及作用
傅氏变换后的应用情况
二、 内容
1、 产生100、200、300Hz的正弦信号并叠加,前后情况对比
2、 设计在150—250之间的带通
3、 合成信号在通过filter前后的情况对比
三、 设计内容
(一)、设计思路
1、产生100Hz、200Hz、300Hz的正弦信号
y1=A*sin(2*pi*f1*t);
y2=A*sin(2*pi*f2*t);
y3=A*sin(2*pi*f3*t);
2、将三个正弦信号叠加
y123=y1+y2+y3;
3、通过fft函数进行傅立叶变换,转换成频域函数
y1_fft=fft(y1);
y2_fft=fft(y2);
y3_fft=fft(y3);
y123_fft=fft(y123);
4、带通滤波器的设计
f_N=3000; %取样频率
f_P=[150,250]; %通带截止频率
f_S=[100,300]; %通带起始频率
R_p=3; %通带内波动
R_s=25; %阻带内最小衰减
Ws=f_S/(f_N/2); %阻带起始角频率
Wp=f_P/(f_N/2); %阻带截止角频率
[n,Wn]=buttord(Wp,Ws,R_p,R_s); %利用巴特沃斯滤波器设计函数求出滤波器阶数和截至频率
[b,a]=butter(n,Wn); %利用butter函数计算滤波器系数
freqz(b,a,1000,3000); %计算幅频响应
5、合并信号经过带通滤波器后的时域和频域
y_filter=filter(b,a,y123); %计算合并信号通过滤波器后的时域信号
y_filter_fft=fft(y_filter); %计算合并信号通过滤波器后的频域信号
(二)、程序代码分析
clear;
%定义参数及函数方程
fs=1800;
t=1/fs:1/fs:0.05
f1=100;
f2=200;
f3=300;
A=1;
y1=A*sin(2*pi*f1*t);
y2=A*sin(2*pi*f2*t);
y3=A*sin(2*pi*f3*t);
y123=y1+y2+y3;
%时域图
figure(1);
subplot(4,2,1);
plot(t,y1,'b');
title('y1的时域波形图');
xlabel('时间t');
ylabel('幅度A');
subplot(4,2,2);
plot(t,y2,'b');
title('y2的时域波形图');
xlabel('时间t');
ylabel('幅度A');
subplot(4,2,3);
plot(t,y3,'b');
title('y3的时域波形图');
xlabel('时间t');
ylabel('幅度A');
axis([1/fs 0.05 -A A]);
subplot(4,2,4);
plot(t,y123,'b');
title('合成信号的时域波形图');
axis([1/fs 0.05 -3*A 3*A]);
%频域图
w=100;
y1_fft=fft(y1);
y2_fft=fft(y2);
y3_fft=fft(y3);
y123_fft=fft(y123);
subplot(4,2,5);
stem(abs(y1_fft),'r');
title('y1的频域波形图');
xlabel('频率');
ylabel('幅度A');
subplot(4,2,6);
stem(abs(y2_fft),'r');
title('y2的频域波形图');
xlabel('频率');
ylabel('幅度A');
subplot(4,2,7);
stem(abs(y3_fft),'r');
title('y3的频域波形图');
xlabel('频率');
ylabel('幅度A');
subplot(4,2,8);
stem(abs(y123_fft),'r');
title('合成信号的频域波形图');
xlabel('频率t');
ylabel('幅度A');
%带通滤波器
figure(2);
f_N=3000;
f_P=[150,250];
f_S=[100,300];
R_p=3;R_s=25;
Ws=f_S/(f_N/2);
Wp=f_P/(f_N/2);
[n,Wn]=buttord(Wp,Ws,R_p,R_s);
[b,a]=butter(n,Wn);
freqz(b,a,1000,3000);
subplot(2,1,1);
axis([0,500,-40,2]);
%合并信号经过带通滤波器后的时域和频域波形图
figure(3);
y_filter=filter(b,a,y123);
y_filter_fft=fft(y_filter);
subplot(2,2,1);
plot(t,y123,'b');
title('合成信号的时域波形图');
subplot(2,2,2);
plot(t,y_filter,'b');
title('通过滤波器以后的时域波形图');
xlabel('时间');
ylabel('幅度A');
subplot(2,2,3);
stem(abs(y123_fft),'r');
title('合成信号的频域波形图');
xlabel('频率t');
ylabel('幅度A');
subplot(2,2,4);
stem(abs(y_filter_fft),'r');
title('通过滤波器以后的频域波形图');
xlabel('频率');
ylabel('幅度A');
(三)、程序运行效果图
1、3个正弦信号及其合成信号的时域和频域的波形图
2、滤波器的波形图
3、合成信号通过滤波器前后的时域和频域图
一、 总结
通过本次课程设计,我对数字信号处理课程有了更深一步的掌握,对利用matlab软件编程的数字信号处理方法有了进一步的了解。在理论课的基础上进行实验实习,是对本门课程的深入学习和掌握,在以后的工作学习中,数字信号的处理都是采用计算机仿真的方法进行测试,跟真实欢迎是一样的,因此,掌握基于计算机的数字信号处理方法对以后的工作和学习有很大的帮助。
本次课程设计用到的主要是数字信号的产生以及数字信号的基本处理过程-----------滤波,可以说,数字信号处理离不开滤波器。程序中主要使用到了2个重要函数:fft(快速傅立叶变换)、filter(滤波器)。其它的还有绘图函数plot(连续函数绘图)、stem(离散函数绘图)。通过这些函数的组合应用,设置适当的参数值,使本设计能够完成数字信号的产生、叠加、频域转换、带通滤波等功能。
综合上述,本次课程设计我对数字信号处理的方法有了直观的认识,掌握了matlab处理的方法,对以后的学习有了很大的帮助