选频滤波器 matlab,MATLAB低通滤波器选频实现

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

%频率不同的三个正弦波信号相加,分别输出时域波形和频域频谱three_cos.m

%设计低通滤波器,改变低通滤波器截止频率,输出不同波形

%1.波形产生程序three_cos(t);

%2.傅里叶正变换[f, sf]=FFT_SHIFT(t, st);

%3.傅里叶反变换[t,st]=IFFT_SHIFT(f,Sf);

%4.低通滤波器[t,st]=RECT_LPF(f,Sf,B);

% Signal

dt=0.01; %时间采样间隔

T=5; %信号持续时间

N=floor(T/dt); %点数

t=[0:N-1]*dt; %t

f1=1;f2=5;f3=10; %信号不同频率值

m1=cos(2*pi*f1*t);

m2=cos(2*pi*f2*t);

m3=cos(2*pi*f3*t);

mt1=m1+m2+m3;

[f,mt1f]=FFT_SHIFT(t,mt1); %2.傅里叶正变换

%输出:f-抽样频率;mt1f-频率;输入:t-时间;mt1-输入波形

fmax=2;

f=1;f2=5;f3=10; %信号不同频率值

B1=fmax %设置低通滤波器带宽,准备调用低通滤波器

[t,mt1_t]=RECT_LPF(f,mt1f,B1); %低通滤波器滤除高频,由B1决定

[f,mt1_tf]=FFT_SHIFT(t,mt1_t); %2.傅里叶正变换

%时域、频域显示

subplot(511);

plot(t,m1);

ylabel('m1(t)');

title('三个不同频率正弦波合成波和频谱');

subplot(512);

plot(t,m2);

ylabel('m2(t)');

subplot(513);

plot(t,m3);

ylabel('m3(t)');

subplot(514);

plot(t,mt1);

ylabel('m(t)');

subplot(515);

plot(f,mt1f);

ylabel('m(f)');

axis([-40,40,0,3]);

figure(2)

subplot(511);

plot(t,m1);

ylabel('m1(t)');

title('低通滤波器选频合成波和频谱');

subplot(512);

plot(t,m2);

ylabel('m2(t)');

subplot(513);

plot(t,m3);

ylabel('m3(t)');

subplot(514);

plot(t,mt1_t);

ylabel('m(t)');

subplot(515);

plot(f,mt1_tf);

ylabel('fmax=2');

axis([-40,40,0,3]);

%=======================================

% 调用函数傅里叶变换

function [f, sf]=FFT_SHIFT(t, st)

%This function is FFT to calculate a signal’s Fourier transform

%Input: t: sampling time , st : signal data. Time length must greater than 2

%output: f : sampling frequency , sf: frequency

%output is the frequency and the signal spectrum

dt=t(2)-t(1);

T=t(end);

df=1/T;

N=length(t);

f=[-N/2:N/2-1]*df;

sf=fft(st);

sf=T/N*fftshift(sf);

% 傅里叶反变换

function [t,st]=IFFT_SHIFT(f,Sf)

df=f(2)-f(1);

fmax=(f(end)-f(1)+df);

dt=1/fmax;

N=length(f);

t=[0:N-1]*dt;

Sf=fftshift(Sf);

st=fmax*ifft(Sf);

st=real(st);

% 赵鸿图-低通滤波器

function [t,st]=RECT_LPF(f,Sf,B)

df=f(2)-f(1);

fN=length(f);

RectH=zeros(1,fN);

BN=floor(B/df);

BN_SHIFT=[-BN:BN-1]+floor(fN/2);

RectH(BN_SHIFT)=1;

Yf=RectH.*Sf;

[t,st]=IFFT_SHIFT(f,Yf);

%参考书: 赵鸿图 茅艳通信原理MATLAB仿真教材[M].人民邮电出版社

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值