设计一
2.1.1 MATLAB程序
clear;clf;clc;%清除上一次运行的记录
M=32;%实际滤波器长度
N=81;%信号长度,影响过渡带长度
R=1024;%理想滤波器长度
x=cos(5/16*pi*(0:N-1))+2*cos(9/16*pi*(0:N-1));%原信号
x1=cos(5/16*pi*(0:N-1));%直接取需要的信号,将在后面与滤波结果做对比
wc=7/16*pi;%穿越频率
K=wc/(2*pi)*R;%穿越频率对应R中的位数,224位
hdf=[zeros(1,R/2-K),ones(1,2*K),zeros(1,R/2-K)];%在频域构造理想滤波器,前288位为0,中间448位为1,后288位为0
hd=ifftshift(ifft(hdf));%将理想滤波器转换到时域,并做平移
h=hd((R-M)/2+1R+M)/2);%取时域理想滤波器的中间32位,使其物理可实现
y=conv(h,x);%将信号与实际滤波器在时域做卷积,时域的卷积=频域的乘积
G=length(y);%卷积结果的长度,112位
xf=fftshift(fft(x));%x做傅里叶变换,并做平移
hf=fft(h);%h做傅里叶变换
yf=fft(y);%y做傅里叶变换
w2=(0:N-1)/N*2*pi-pi;%设置图(2)的x轴
w4=(0:R-1)/R*2*pi-pi;%设置图(4)的x轴
w6=(0:M-1)/M*2*pi-pi;%设置图(6)的x轴
w7=(0:G-1);%设置图(7)的一个x轴
w77=(0:N-1);%设置图(7)的另一个x轴
w8=(0:G-1)/G*2*pi-pi;%设置图(8)的x轴
subplot(421),plot(x,'k'),ylabel('原信号'),title('时域'),xlabel('(1) x');
subplot(422),plot(w2,abs(xf),'k'),title('频域'),xlabel('(2) xf');
subplot(423),plot(abs(hd),'k'),ylabel('理想滤波器'),xlabel('(3) hd');
subplot(424),plot(w4,hdf,'k'),xlabel('(4) hdf'),axis([-4 4 -0.1 1.1]);
subplot(425),plot(abs(h),'k'),ylabel('实际滤波器'),xlabel('(5) h');
subplot(426),plot(w6,abs(hf),'k'),xlabel('(6) hf'),axis([-4 4 -0.1 1.1]);
subplot(427),plot(w7,real(y),'k',w77,x1,'k-.'),ylabel('处理后信号'),xlabel('(7) y x1');
subplot(428),plot(w8,abs(yf),'k'),xlabel('(8) yf');
文章评论(0条评论)
登录后参与讨论