
用切比雪夫最佳一致逼近设计线性相位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%归一化角频率,用于下面的f1
f1=[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做滤波器的大体思路都差不多,希望对你有用。(完全自创,要给分哦)f=8*10^3%信号频率
f1=30*10^3 %噪声频率
l=100 %信号的长度
fs=100*10^3%采样频率
%%%%%%%%%%%%%%%%生成信号
t=(0:l-1)/fs
s=0.5*sin(2*pi*f*t)+cos(2*pi*f1*t)
figure(1)
subplot(1,2,1)
plot(fs*t(1:60),s(1:60))
title('时域波形')
xlabel('时间')
ylabel('幅度')
grid on
nf=2^nextpow2(l)
Y=fftshift(fft(s,nf))
%k=-fs/2+(0:nf-1)*fs/nf
k=fs*linspace(0,1,nf)-fs/2
subplot(1,2,2)
plot(k,abs(Y)) %信号的频谱图
title('信号频谱')
xlabel('频率')
ylabel('幅度')
grid on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%滤波器设定
ws=10*10^3 %通带截止频率
ws1=20*10^3 %阻带起始频率
ds=50 %阻带衰减
wt=2*pi*ws/fs %经采样后的通带截止角频率
wz=2*pi*ws1/fs %阻带的
wc=(wt+wz)/2 %归一化后的滤波器截止频率
n=ceil(6.6*pi/(wz-wt)) %t=(n-1)/2
q=fir1(n-1,wc/pi,hanning(n))%滤波器时域函数
w=linspace(0,pi,512)
h1=freqz(q,1,512)%进行512个点的傅里叶变换
figure(2)
plot(w/pi,20*log10(abs(h1)))
title('滤波器频谱图')
xlabel('频率')
ylabel('幅度')
grid
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%经滤波器后的信号
signal=conv(s,q)
nx=(0:n+l-2)/fs
figure(3)
subplot(1,2,1)
plot(nx(n:60)*fs,signal(n:60))
title('经滤波后的信号时域图')
xlabel('时间')
ylabel('幅度')
grid on
lx=2^nextpow2(nx)
Y=fftshift(fft(signal,lx))
k=-fs/2+(0:lx-1)*fs/lx %
subplot(1,2,2)
plot(k,abs(Y)) %信号的频谱图
title('滤波后信号频谱')
xlabel('频率')
ylabel('幅度')
grid on
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)