数字滤波器的设计及实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计二数字滤波器的设计及实现
代码:
%复合信号st产生函数mstg清单:
function st=mstg
figure(1)
%产生信号序列st,并显示st时域波形和频谱
%st=mstg返回三路调幅信号相加的形成的混合信号
%长度N=800
N=800;Fs=10000;T=1/Fs;Tp=N*T;%采样频率Fs=10kHz,Tp为采样时间
t=0:T:(N-1)*T;k=0:N-1;f=k/Tp;
fc1=Fs/10;fm1=fc1/10;%第1路调幅信号载波频率fc1=1000Hz,调制频fm1=100Hz fc2=Fs/20;fm2=fc2/10;%第2路调幅信号载波频率fc2=500Hz,调制频率fm2=50Hz fc3=Fs/40;fm3=fc3/10;%第3路调幅信号载波频率fc3=250Hz,调制频率fm3=25Hz xt1=cos(2*pi*fm1*t).*cos(2*pi*fc1*t);%产生第1路调幅信号
xt2=cos(2*pi*fm2*t).*cos(2*pi*fc2*t);%产生第2路调幅信号
xt3=cos(2*pi*fm3*t).*cos(2*pi*fc3*t);%产生第3路调幅信号
st=xt1+xt2+xt3;%3路信号相加得到复合信号
fxt=fft(st,N);%计算信号st的频谱
%下面为绘图命令
subplot(2,1,1);
plot(t,st);grid;xlabel('t/s');ylabel('s(t)');
axis([0,Tp,min(st),max(st)]);title('(a)s(t)的波形');
subplot(2,1,2);
stem(f,abs(fxt)/max(abs(fxt)),'.');grid;title('(b)s(t)的频谱')
axis([0,Fs/8,0,1.2]);
xlabel('f/Hz');ylabel('幅度');
figure(2)
fp=340;fs=370;Fs=10000;
Wp=2*fp/Fs;Ws=2*fs/Fs;
Rp=0.1;Rs=60;%低通滤波器指标
[N,Wpo]=ellipord(Wp,Ws,Rp,Rs);
[B,A]=ellip(N,Rp,Rs,Wpo);%计算滤波器系统函数系数
subplot(3,1,1);
W=0:0.01:pi;
[H,W]=freqz(B,A,W);%计算频率向量W上的滤波器频率响应
H=20*log(abs(H));%纵坐标单位取dB
plot(W/pi,H)%绘制幅频响应曲线
grid on%添加网格
axis([0,1,-200,10])
xlabel('\omega/\pi (rad/s)');
ylabel('|H(e^j^\omega)|/dB');
subplot(3,1,2);
y3=filter(B,A,st);
plot(t,y3);
axis([0,Tp,min(st),max(st)]);title('(a)S3(t)的波形');
subplot(3,1,3);
Y3=abs(fft(y3,800));
stem(f,Y3/max(Y3),'.');grid;title('(b)S3(t)的频谱')
axis([0,Fs/8,0,1.2]);
xlabel('f/Hz');ylabel('幅度');
figure(3)
%双线性变换法设计椭圆数字滤波器
fpl=445,fpu=580,fsl=360,fsu=670,Fs=10000;
Wpl=2*fpl/Fs;Wpu=2*fpu/Fs;Wsl=2*fsl/Fs;Wsu=2*fsu/Fs;
Rp=0.1;Rs=60;
Wp=[Wpl,Wpu];Ws=[Wsl,Wsu]%带通滤波器指标
[N,Wso]=cheb2ord(Wp,Ws,Rp,Rs);%计算椭圆数字滤波器的阶数N和通带边界频率[B,A]=cheby2(N,Rs,Wso);%用双线性变换法设计椭圆数字滤波器
subplot(3,1,1);
W=0:0.01:pi;
[H,W]=freqz(B,A,W);%计算频率向量W上的滤波器频率响应
H=20*log10(abs(H));%纵坐标单位取dB
plot(W/pi,H),grid on%绘制幅频响应曲线
axis([0,1,-100,10])
xlabel('频率/(rad/s)');
ylabel('幅度/dB');
subplot(3,1,2);
y2=filter(B,A,st);
plot(t,y2);
axis([0,Tp,min(st),max(st)]);title('(a)s(t)的波形');
subplot(3,1,3);
Y2=abs(fft(y2,800));
stem(f,Y2/max(Y2),'.');grid;title('(b)S2(t)的频谱')
axis([0,Fs/8,0,1.2]);
xlabel('f/Hz');ylabel('幅度');
figure(4)
%双线性变换法设计椭圆高通数字滤波器
fp=850,fs=800,Fs=10000;
Wp=2*fp/Fs;Ws=2*fs/Fs;
Rp=0.1;Rs=60;
[N,Wpo]=ellipord(Wp,Ws,Rp,Rs);%计算椭圆数字滤波器的阶数N和通带边界频率[B,A]=ellip(N,Rp,Rs,Wpo,'high');%用双线性变换法设计椭圆数字滤波器