四、程序分析
所用到的函数:
(1)fft():求x的一维傅里叶变换,计算X(k);
使用方法Xk=fft(xn),例如: N=8; n=0:N-1; xn=[4 3
2
6
7
8
9
Xk=fft(xn)
(2)stem():显示函数图像。 (3)xlabel():横坐标轴的名称; (4)ylabel():纵坐标轴的名称;
五、程序设计
%x(n)=cos(0.48πn)+cos(0.52πn) n=0:15; %产生序列x(n) 取16点
x=cos(0.48*pi*n)+cos(0.52*pi*n);
subplot(231);stem(n,x);title('采集数据长度N=16'); %显示x(n) x1k=fft(x,16);%进行16点傅里叶变换
subplot(234);stem(0:15,abs(x1k),'.'); %显示X(k) xlabel('n');ylabel('X1(k)'); title('16点傅立叶变换频谱');
x=[x zeros(1,48)]; %取16点,补零到64点 x2k=fft(x,64);%进行64点傅里叶变换
subplot(232);stem(x);title('采集N=16,补零到64'); subplot(235);stem(0:63,abs(x2k),'.'); xlabel('n');ylabel('X2(k)'); title('64点傅立叶变换频谱');
n=0:63; %产生序列x(n),取64点
x=cos(0.48*pi*n)+cos(0.52*pi*n);
subplot(233);stem(n,x);title('采集数据长度N=64'); x3k=fft(x);%做64点傅里叶变换
subplot(236);stem(0:63,abs(x3k),'.'); xlabel('n');ylabel('X3(k)'); title('64点傅立叶变换频谱');
0];
六、运行结果
七.结果分析
N点DFT的频谱分辨率是2 π/N。一节指出可以通过补零观察到更多的频点,但是这并不意味着补零能够提高真正的频谱分辨率。这是因为x[n] 实际上是x(t) 采样的主值序列,而将x[n]补零得到的x'[n] 周期延拓之后与原来的序列并不相同,也不是x(t) 的采样。因此是不同离散信号的频谱。对于补零至M点的x'的DFT,只能说它的分辨率2 π/M仅具有计算上的意义,并不是真正的、物理意义上的频谱。频谱分辨率的提高只能通过提高采样频率实现。第三幅图形取样点数较多,分辨率最高,而第一幅图形则显得较为稀疏,主要是因为取样点数太少。
八.专题实习心得
离散傅里叶变换是一种快速算法,由于有限长序列在其频域也可离散化为有限长序列,因此离散傅里叶变换在数字信号处理中是非常有用的。DFT是重要的变换,在分析有限长序列的有用工具、信号处理的理论上有重要意义、运算方法上起核心作用,谱分析、卷积、相关都可以通DFT在计算机上实现。通过编程实践体会到了时域、频域信号的对应关系,也对采样频率的含义有了深刻的认识,同时也加深了对采样信号频谱周期性的理解。
题目三 IIR滤波器的设计
一、实验题目
1、设计一个Butterworth数字低通滤波器,设计指标如下: 通带截止频率:0.2π,幅度衰减不大于1分贝 阻带截止频率:0.3π,幅度衰减大于15分贝 2、分析不同滤波器的特点和结果。 3、编程设计实现IIR滤波器。
二、实验目的
1.理解和掌握不同IIR滤波器的性质、特点。
2.掌握用Matlab设计butterworth滤波器和椭圆滤波器的方法。
三、算法设计
1、滤波器类型
Butterworth滤波器: Butterworth滤波器的特点是在通带内的频率特性是平坦的,并且随着频率的增加而衰减。Butterworth滤波器又是最简单的滤波器。 N阶低通Butterworth滤波器的幅度平方函数为:
|Ha(j?)|2?11?(?/?C)2N
椭圆滤波器:椭圆滤波器在通带和阻带内都是等纹波振荡。 椭圆滤波器的特性函数为:
|Ha(j?)|2?121??2UN(?/?C)2N
2、变换方法
(a)冲激响应不变法
冲激响应不变法的基本原理是从滤波器的冲激响应出发,对模拟滤波器冲激响应h(t)进行取样,所得到的离散序列h(nT)作为数字滤波器的单位取样响应。 H(z)是由H(s)通过下式的对应关系得到。
11?s?sk1?espkTz?1
(b)双线性变换是在所得到满足性能指标要求的模拟滤波器的基础上,通过变换
11?z?1s?T1?z?1,从而得到相应的数字滤波器。
四、程序分析
所用到的函数:
(1)[N,wn]=buttord(Wp,Ws,ap,as,'s'):[阶数,截止频率]=buttord(通带截止频率,阻带截止频率,通带衰减,阻带衰减,模拟);
(2)[num,den]=bilinear(b,a,fs):双线性变换可选频率预畸变,在IIR数字滤波器设计中有把模拟的原型滤波器转变成相应的数字滤波器,即通过已知S变换中模拟滤波器的系数求数字滤波器的系数。其中有两种方法来进行这种变换,一种是激冲不变法,另一种是双线性Z变换法。bilinear 函数便是双线性Z变换法。函数中的b和a是原模拟滤波器S变换中的分子和分母系数,num和den是数字滤波器的系数。
(3)grid on:增加主要网格线为当前轴;
(4)[h,w]=freqz(num,den):求频率响应。函数的输出:a.滤波器的频率响应H(N点) b.频率向量W(N点,且单位为弧度),频率向量W是均匀分布在滤波器的上半区,即:0:pi,这些点上的频率响应都将通过此函数计算出来。;滤波器的系数:分子为num,分母为den。
五、程序设计
clc;
Rs=15; Rp=1; Wp1=0.2*pi; Ws1=0.3*pi;
Op1=tan(Wp1/2); %预畸变 Op2=tan(Ws1/2);
[N,Wn]=ellipord(Op1,Op2,Rp,Rs,'s'); %阶数及截止频率
[num1,den1]=ellip(N,Rp,Rs,Wn,'s'); %设计椭圆低通数字滤波器,返回传输函数 [num,den]=bilinear(num1,den1,0.5); %双线性变换 subplot(221);
zplane(num,den); %绘制零极点图 title('零极点图')
w=0:pi/256:pi; h=freqz(num,den,w); g=abs(h); g1=angle(h);
subplot(223); plot(w/pi,g);grid axis([0 1 0 2]);
xlabel('频率'); ylabel('幅度'); title('幅频响应'); subplot(224);
plot(w/pi,g1);grid on axis([0 1 -5 5]);
xlabel('频率'); ylabel('相位'); title('相频响应');
%测试1 t=1:300;
I=sin(0.1*pi*t)+sin(0.55*pi*t)+sin(0.9*pi*t);%设计正弦波 figure;subplot(311);
plot(I);title('原信号
x(n)=sin(0.1*pi*t)+sin(0.55*pi*t)+sin(0.9*pi*t)'); A=filter(num,den,I);%正弦波通过滤波器 subplot(312);
plot(A);title('滤波后y(n)'); w=(0:255)/256*(0.5/2); subplot(313)
plot(w,abs([S(1:256)' SF(1:256)']));title('傅里叶变换后频谱图对比');
%测试2 t=1:300;
I=sin(0.1*pi*t)+sin(0.8*pi*t)+sin(0.95*pi*t);%设计正弦波 figure;subplot(311);
plot(I);title('原信号
x(n)=sin(0.1*pi*t)+sin(0.8*pi*t)+sin(0.95*pi*t)'); A=filter(num,den,I);%正弦波通过滤波器 subplot(312);
plot(A);title('滤波后y(n)'); w=(0:255)/256*(0.5/2); subplot(313)
plot(w,abs([S(1:256)' SF(1:256)']));title('傅里叶变换后频谱图对比');
六、运行结果
(1)零极点图、幅频响应、相频响应