Matlab滤波器设计整理

fir1函数:设计FIR滤波器

fir1 基于窗函数的FIR滤波器设计

b = fir1(n,Wn,ftype)
b = fir1(滤波器阶数,截止频率,滤波器种类)

1)截止频率是归一化的截止频率

Wn的所有元素必须严格大于0且严格小于1,其中1对应于奈奎斯特频率:0 <Wn <1。奈奎斯特频率是采样率或πrad / sample的一半。

2)函数会根据截止频率的维度,设计不同的滤波器

如果Wn是标量,则fir1设计一个截止频率为Wn的低通或高通滤波器。 截止频率是滤波器的归一化增益为–6 dB的频率。

如果Wn是二元素矢量[w1 w2],其中w1 <w2,则fir1设计一个具有较低截止频率w1和较高截止频率w2的带通或带阻滤波器。

如果Wn是多元素矢量[w1 w2 … wn],其中w1 <w2 <…<wn,则fir1返回带0 <ω<w1,w1 <ω<w2,…的n阶多频带滤波器。 ,wn <ω<1。

fs=48e3;%采样频率48k fs>=2fc
fc=10e3;%中心频率10kHz
fl=8e3;fh=12e3;
filter_n=1024;%滤波器的阶数
b=fir1(filter_n,2*5e3/fs);%低通滤波器,截止频率为5k
b1=fir1(filter_n,2*5e3/fs);
b2=fir1(filter_n,2*5e3/fs);
c=fir1(filter_n,[fl fh]/(fs/2));%带通滤波器,[8e3,12e3]

作出滤波器的幅频响应曲线

[h,w] = freqz(b,a,n)返回具有存储在b和a中的传递函数系数的数字滤波器的n点频率响应矢量h和相应的角频率矢量w

n —评估点数
512(默认)| 正整数标量
指定为不小于2的正整数标量的评估点数。如果不存在n,则默认为512。为获得最佳结果,请将n设置为大于过滤器阶数的值。

f0=12e3;%中心频率10kHz
fl=10e3;fh=14e3;
filter_n=1024;%滤波器的阶数
c=fir1(filter_n,[fl fh]/(fs/2));%带通滤波器,[8e3,12e3]
freqz(c,1,2048);

经过低通滤波器

数字滤波器用filter函数实现
通过滤波器的传递函数直接可以对输入信号x进行滤波
y = filter(b,a,x)
y = filter(分子,分母,输入参数)

b:分子系数
a:分母系数
x:输入信号
y:输出信号,滤波后信号

b、a的顺序是从0次幂、-1次幂……
根据分子和分母的系数可以直接确定滤波器的有理传递函数。

sig_lowpass=filter(b,1,[sig_ss zeros(1,filter_n/2)]);%经过低通滤波器  
sig_ss=sig_lowpass(filter_n/2+1:end);%取后面的点

注意:
1)滤波后不会改变信号的长度
y - 滤波后的数据
向量 | 矩阵 | 多维数组
滤波后的数据,以向量、矩阵或大小与输入数组 x 相同的多维数组的形式返回

2021-09-29 更新

clc;clear all;close all;
load ('receive_demodulate.mat');

%% 设计与通过滤波器
%% 

% 设计(1)fir1 
filter_order = 128;
w1 = [1/10000 1/10]; % 带通滤波,频率归一化
b1 = fir1(filter_order,w1); % 带通滤波器系数
fvtool(b1,'impulse')

% 设计(2)待补充完善...

%% 通过滤波器
%% 

% 通过(1)conv
receive_lowpass1 = conv(b1,receive_demodulate);
receive_lowpass1 = receive_lowpass1(filter_order/2+1:end-filter_order/2);% 前后都去除滤波器阶数的一半


% 通过(2)filter函数
receive_lowpass2 = filter(b1,1,[receive_demodulate ; zeros(fix(length(b1)/2),1)]); % 过低通滤波器
receive_lowpass2 = receive_lowpass2(fix(length(b1)/2)+1:end);
isequal(receive_lowpass1,receive_lowpass2)


% 总结
% (1)conv后,前后都去除滤波器阶数的一半点数,总共将滤波器的长度都不要了
% (2)filter与conv的结果,出来的是一样的!!
% (3)去除卷积中引入的系统长度,都是将输出信号的前系统长度/2与后系统长度/2都丢掉了。

% 根升余弦
receive_shape=conv(receive_lowpass,rh);
% 抽样判决
receive_downsampling = receive_shape(length(rh): N_pn :end-length(rh)-1); % 这里的抽样判决,把2倍的升余弦滤波器的长度减掉了。因为经过了两次升余弦的滤波器。
scatterplot(receive_downsampling);title('降采样的复基带信号');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值