matlab filter函数使用的滤波器是什么滤波器?

matlab filter函数使用的滤波器是什么滤波器?,第1张

说明:(1)为了使滤波器阶数尽可能低,每个滤波器的边界频率选择原则是尽量使滤波器过渡带宽尽可能宽。

(2)与信号产生函数mstg相同,采样频率Fs=10kHz。

(3)为了滤波器阶数最低,选用椭圆滤波器。(之后,再依次实现巴特沃斯、切比雪夫1、切比雪夫2数字滤波器)

按照图2 所示的程序框图编写的实验程序为exp1m。

2、实验程序清单

%实验1程序exp1m

% IIR数字滤波器设计及软件实现

clear all;close all

Fs=10000;T=1/Fs; %采样频率

%调用信号产生函数mstg产生由三路抑制载波调幅信号相加构成的复合信号st

st=mstg;

%低通滤波器设计与实现=========================================

fp=280;fs=450;

wp=2fp/Fs;ws=2fs/Fs;rp=01;rs=60; %DF指标(低通滤波器的通、阻带边界频)

[N,wp]=ellipord(wp,ws,rp,rs); %调用ellipord计算椭圆DF阶数N和通带截止频率wp

[B,A]=ellip(N,rp,rs,wp); %调用ellip计算椭圆带通DF系统函数系数向量B和A

y1t=filter(B,A,st); %滤波器软件实现

% 低通滤波器设计与实现绘图部分

figure(5);

subplot(2,1,1);

myplot(B,A); %调用绘图函数myplot绘制损耗函数曲线

yt='y_1(t)';

subplot(2,1,2);

tplot(y1t,T,yt); %调用绘图函数tplot绘制滤波器输出波形

%带通滤波器设计与实现====================================================

fpl=440;fpu=560;fsl=275;fsu=900;

wp=[2fpl/Fs,2fpu/Fs];ws=[2fsl/Fs,2fsu/Fs];rp=01;rs=60;

[N,wp]=ellipord(wp,ws,rp,rs); %调用ellipord计算椭圆DF阶数N和通带截止频率wp

[B,A]=ellip(N,rp,rs,wp); %调用ellip计算椭圆带通DF系统函数系数向量B和A

y2t=filter(B,A,st); %滤波器软件实现

% 带通滤波器设计与实现绘图部分

figure(3);

subplot(2,1,1);

myplot(B,A); %调用绘图函数myplot绘制损耗函数曲线

yt='y_2(t)';

subplot(2,1,2);

tplot(y2t,T,yt); %调用绘图函数tplot绘制滤波器输出波形

%高通滤波器设计与实现================================================

fp=890;fs=600;

wp=2fp/Fs;ws=2fs/Fs;rp=01;rs=60; %DF指标(低通滤波器的通、阻带边界频)

[N,wp]=ellipord(wp,ws,rp,rs); %调用ellipord计算椭圆DF阶数N和通带截止频率wp

[B,A]=ellip(N,rp,rs,wp,'high'); %调用ellip计算椭圆带通DF系统函数系数向量B和A

y3t=filter(B,A,st); %滤波器软件实现

% 高低通滤波器设计与实现绘图部分

figure(4);

subplot(2,1,1);

myplot(B,A); %调用绘图函数myplot绘制损耗函数曲线

yt='y_3(t)';

subplot(2,1,2);

tplot(y3t,T,yt); %调用绘图函数tplot绘制滤波器输出波形

function myplot(B,A)

%时域离散系统损耗函数绘图

%B为系统函数分子多项式系数向量

%A为系统函数分母多项式系数向量

[H,W]=freqz(B,A,1000);

m=abs(H);

plot(W/pi,20log10(m/max(m)));grid on;

xlabel('\omega/\pi');ylabel('幅度(dB)')

axis([0,1,-80,5]);title('损耗函数曲线');

function tplot(xn,T,yn)

%时域序列连续曲线绘图函数

% xn:信号数据序列,yn:绘图信号的纵坐标名称(字符串)

% T为采样间隔

n=0:length(xn)-1;t=nT;

plot(t,xn);

xlabel('t/s');ylabel(yn);

axis([0,t(end),min(xn),12max(xn)])

function st=mstg

N=2000

Fs=10000;T=1/Fs;Tp=NT;

t=0:T:(N-1)T;k=0:N-1;f=k/Tp;

fc1=Fs/10;

fm1=fc1/10;

fc2=Fs/20;

fm2=fc2/10;

fc3=Fs/40;

fm3=fc3/10;

xt1=cos(2pifm1t)cos(2pifc1t);

xt2=cos(2pifm2t)cos(2pifc2t);

xt3=cos(2pifm3t)cos(2pifc3t);

st=xt1+xt2+xt3;

fxt=fft(st,N);

subplot(3,1,1)

plot(t,st);grid;xlabel('t/s');ylabel('s(t)');

axis([0,Tp/8,min(st),max(st)]);title('(a) s(t)的波形')

subplot(3,1,2)

stem(f,abs(fxt)/max(abs(fxt)),'');grid;title('(b) s(t)的频谱')

axis([0,Fs/5,0,12]);

xlabel('f/Hz');ylabel('幅度');

我理解是求反函数,就按反函数答了

默认自变量是x ,若反函数唯一,则用finverse()即可答出,若有多个自变量,反函数不唯一,则用

finverse(f,v)给出,其中v是保存原来自变量的向量,并给出警告。

1、中值滤波的原理:对于一串连续输入的信号(量化后是一组数据)。如下图所示,是输入的原信号。中值滤波的原理为,重新计算每一个x的输出值(y),新的输出值。

相当于y=new(x),new的 *** 作是,从在以x为中心,长度为2k的原信号中(区间为[x-k+1,x+k]),提取出这段区间内中间的那个值,作为y=new(x)的结果。

2、举例来说,输入:Y[1-10]:1,2,3,4,5,6,7,8,9,10取区间2k=4,所以k=2;执行中值滤波K=中值滤波(Y)、由x-k+1>=1,所以当k=2时,x>=2、滤波时:

K[1]=Y[1]

K[2]=(Y[1]、Y[2]、Y[3]、Y[4])的中间值,即为2或3。

3、matlab的中值滤波实现方式:调用函数:A=medfilt1(B,n)、B为输入信号,A为滤波后的信号,即结果。

4、对于输入信号(最开头的图),以下分别为设置区间n=8和n=16得到的滤波图像。中值滤波可以过滤尖峰脉冲。目的在于我们对于滤波后的数据更感兴趣。滤波后的数据保留的原图像的变化趋势,同时去除了尖峰脉冲对分析造成的影响。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11673314.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存