当前位置:首页>开发>正文

带通滤波器matlab代码 如何用MATLAB进行高通FIR滤波器仿真

2023-05-06 22:43:21 互联网 未知 开发

 带通滤波器matlab代码 如何用MATLAB进行高通FIR滤波器仿真

带通滤波器matlab代码

% 用切比雪夫最佳一致逼近设计线性相位FIR带通滤波器;
%信号为0.5hz, 0.9hz, 1.1hz和1.5hz的正统信号叠加组成
%通带为[0.9,1.1]
%频谱分辨率与信号实际长度N成正比
clear all
f1=0.5f2=0.9f3=1.1f4=1.5t=0:1203N=length(t)fs=10M=512
x1=sin(2*pi*(f1/fs)*t) sin(2*pi*(f2/fs)*t) sin(2*pi*(f3/fs)*t) sin(2*pi*(f4/fs)*t)
figure(1)
subplot(211)plot(t,x1)title(原信号)
y=fft(x1)
f=(0:1/N:1/2-1/N)*fs
subplot(212)plot(f,abs(y(1:N/2)))gridxlabel(hz)%处理前频谱
wc1=2*f2/fswc2=2*f3/fswc3=2*f4/fs%归一化角频率,用于下面的ff1=[0 wc1-0.05 wc1 wc2 wc2 0.05 1]
A=[0 0 1 1 0 0]%设置带通或带阻,1为带通,0为带阻
weigh=[1 1 1 ]%设置通带和阻带的权重
b=remez(60,f1,A,weigh)%传函分子
h1=freqz(b,1,M)%幅频特性
figure(2)
f=(0:1/M:1-1/M)*fs/2
subplot(211)plot(f,abs(h1))gridtitle(带通)
x2=filter(b,1,x1)
S1=fft(x2)
f=(0:1/N:1/2-1/N)*fs
subplot(212)plot(f,abs(S1(1:N/2)))gridxlabel(hz)%处理后频谱

如何用MATLAB进行高通FIR滤波器仿真

实际应用背景:一个信号由5Hz余弦信号与15Hz余弦信号相加构成,如何滤除15Hz分量,得到5Hz分量。
产生原始信号:y=cos(2π*5t) cos(2π*15t);
Matlab程序:
f1=5%第一个点频信号分量频率
f2=15%第二个点频信号分量频率
fs=100%采样率
T=2%时宽
B=10%FIR截止频率
n=round(T*fs)%采样点个数
t=linspace(0,T,n)
y=cos(2*pi*f1*t) cos(2*pi*f2*t)

观察原始信号时域与频谱:
频谱中可以观察到信号的5Hz分量和15Hz分量
Matlab程序:
figure
plot(t,y)
title(原始信号时域)
xlabel(t/s)
ylabel(幅度)
figure
fft_y=fftshift(fft(y))
f=linspace(-fs/2,fs/2,n)
plot(f,abs(fft_y))
title(原始信号频谱)
xlabel(f/Hz)
ylabel(幅度)
axis([ 0 50 0 100])

生成高通FIR滤波器冲击响应:
MATLAB程序:
b=fir1(80, B/(fs/2),high) %滤波产生指定带宽的噪声信号
figure
freqz(b)

原始信号经过高通滤波器:
MATLAB程序:
y_after_fir=filter(b,1,y)
滤波后信号时域及频谱:
滤波后得到15Hz的信号,5Hz信号被滤除。
MATLAB程序:
figure
plot(t,y_after_fir)
title(滤波后信号时域)
xlabel(t/s)
ylabel(幅度)

fft_y1=fftshift(fft(y_after_fir))
f=linspace(-fs/2,fs/2,n)
figure
plot(f,abs(fft_y1))
title(滤波后信号频谱)
xlabel(f/Hz)
ylabel(幅度)
axis([ 0 50 0 100])

最新文章