找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2563|回复: 0
打印 上一主题 下一主题
收起左侧

Matlab傅里叶算法及数字滤波

[复制链接]
跳转到指定楼层
楼主
ID:411901 发表于 2018-10-18 19:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

实验一
用Matlab进行信号的一维快速傅立叶变换
一、 实验目的
1、了解傅立叶变换的物理意义:序列的离散傅立叶变换就是序列的离散频谱; 2、了解FFT,掌握FFT的函数调用格式;
3、应用FFT计算信号的频谱。
二、 实验原理:?
1、离散傅立叶变换(DFT)及其主要性质
DFT表示离散信号的离散频谱,DFT的主要性质中有奇偶对称特性,虚实特性等。通过实验可以加深理解。
对于单一频率的三角序列来说他的DFT谱线也是单一的。
2、利用DFT对信号进行频谱分析
DFT的重要应用之一是对时域连续信号的频谱进行分析,称为傅立叶分析,时域连续信号离散傅立叶分析的基本步骤如图2。1所示。
Sc(t)?LPF?A/D?X?DFT?y(k)
?
W(n)
其中混叠低通滤波LPF的引入,是为了消除或减少时域连续信号转换成序列时可能出现的频谱混叠的影响。实际工作中,时域离散信号x(n)的时宽是很长的甚至是无限长的。由于DFT之前,用一个时域有限的窗函数W(n)加到X(n)上是非常重要的。
3、 快速傅立叶变换
快速傅立叶变换是计算离散傅立叶变换的一种快速算法,为了提高运算速度,FFT将DFT的计算逐次分解成较小点数的DFT。按时间抽取的FFT算法把输入序列x(n)按其n值为偶数或奇次分解成越来越短的序列。按频率抽取的FFT算法把输入序列x(n)按其k为偶数或奇次分解成越来越短的序列。
三、 实验用MATLAB语言工具函数简介
MATLAB中计算序列的离散傅立叶变换和逆变换是采用快速算法,利用fft 和ifft函数实现。调用格式分别为[Xk]=fft(Xn,N)和[XN]=ifft(X,N)。
四、 实验要求与实验内容

1、 clear all
>> fs=1000;N=200;
>> n=0:N-1;t=n/fs;
>> x=sin(2*pi*50*t)+sin(2*pi*120*t); >> x=x+randn(1,length(t));
>> y=fft(x,N);
>> f=n*fs/N;
>> mag=abs(y);
>> subplot(2,2,1),plot(f,mag); >> xlabel('t');ylabel('x(t)'); >> title('x(t) N=200');
实验3。(1)

N=100;
n=0:N-1;
xn=3*(0.9+0.3*j).^n; XK=fft(xn,N);
magXK=abs(XK);
phaXK=angle(XK); subplot(3,2,1)
plot(n,xn)
xlabel('n');ylabel('x(n)');
title('x(n) N=100'); subplot(2,2,2)
k=0:length(magXK)-1; stem(k,magXK,'.'); xlabel('k');ylabel('|X(k)|');
title('X(k) N=100'); 实验3。(2)

clear all
close all
N=100;
FS=1;
n=0:1/FS:N-1; x=cos((2*pi/N)*n); subplot(3,1,1) plot(x);
title('x=cos((2*pi/N)*n)');
xlabel('序列x(n)')
grid on
number=512;
y=fft(x,number); z=0:length(y)-1; f=FS*z/length(y); subplot(3,1,3) plot(f,abs(y)); title('信号的FFT');
xlabel('频率Hz')
grid on
实验3。(3)

clear all
close all
FS=1;
n=100;
w=boxcar(n);
subplot(3,1,1) plot(w)
title('R(n)'); xlabel('序列x(n)')
grid on
number=512;
y=fft(w,number); z=0:length(y)-1; f=FS*z/length(y); subplot(3,1,3) plot(f,abs(y)); title('信号的FFT');
xlabel('频率Hz')
grid on
实验二
用Matlab设计IIR数字滤波器
五、 实验目的
熟悉模拟Batterworth滤波器设计和用双线性变换法设计数字IIR滤波器的方法。
六、 实验原理:
利用双线性变换法设计IIR滤波器。首先要设计出满足指标要求的模拟滤波器的传递函数Ha(s),r然后由Ha(s)通过双线性变换可得到所要设计的 IIR滤波器的系统函数H(z).如果给定的指标为数字滤波器的指标,则首先要转换为模拟域的指标。
1、低通数字滤波器的设计
2、高通数字滤波器的设计
3、带通数字滤波器的设计
4、带阻数字滤波器的设计
七、 实验用MATLAB语言工具函数简介
用双线性变换法设计IIR滤波器是IIR滤波器设计的经典方法,首先根据模拟滤波器的指标设计出相应的模拟滤波器,然后将设计好的模拟滤波器转化成满足给定技术指标的数字滤波器。在MATLAB的数字信号处理语言工具箱中提供了相应的设计函数,常用的有:
1、 Batterworth滤波器阶数选择函数
[N,Wn]=buttord(Wp,Ws,Rs)
2、 零极点增益模型到传递函数模型的转换
[num,den]=zp2tf(Z,P,K);
3、从低通到低通的转换
[b,a]=lp21p(Bap,Aap,Wn);
4、双线形变换函数
[bz,az]=bilinear(b,a,Fs);
八、 实验要求与实验内容
1、用双线性变换法设计Batterworth低通数字IIR滤波器,要求通带内频率低于0.2rad时,容许的幅度误差在1dB之内,频率在0.3rad到pi rad之间的阻带衰减大于10dB.
>> clear all
>> Wp=0.2*pi;
>> Ws=pi;
>> Rp=1;
>> Rs=10;
>> Fs=0.5;
>> Ts=1/Fs;
>> [N,Wn]=buttord(Wp,Ws,Rp,Rs,'s'); >> [Z,P,K]=buttap(N);
>> [Bap,Aap]=zp2tf(Z,P,K);
>> [b,a]=lp2lp(Bap,Aap,Wn); >> [bz,az]=bilinear(b,a,Fs);
>> [H,W]=freqz(bz,az);
>> plot(W*Fs/(2*pi),abs(H)); >> grid
>> xlabel('频率/Hz')
>> ylabel('幅度')
>> clear all

实验三
用窗口法设计FIR数字滤波器
一、 实验目的
了解一个实际滤波器设计过程,加深掌握窗口法设计FIR数字滤波的原理和窗函数对滤波器的性能的影响。
二、 实验原理:
设所希望得到的滤波器的理想频率响应为Hd(e^jw).那么我们要寻找一个传递函数去逼近Hd(e^jw)。在这种逼近中最直接的一种方法是从单位取样的响应序列h(n)着手,使h(n)逼近理想的单位取样响应Hd(n),我们知道Hd(n)可以从理想频率响应Hd(e^jw)通过傅立叶反变换来得到。
三、 实验用MATLAB语言工具函数简介
1、矩形序列Rn(n)
调用格式:w=boxcar(n)
2、三角窗函数triang
调用格式:W=triang(n)
四、 实验要求与实验内容

clear all
close all
n=21;
w=triang(n); b=fir1(20,0.5,w) freqz(b,1)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表