设计一个matlab带通滤波器代码

采样频率10Hz,滤除除0.9-1.1Hz之外的其他信号,信号输入为x1,输出为x2,谢谢,不明白的问我可以追加条件,运行好使的追加分

% 用切比雪夫最佳一致逼近设计线性相位FIR带通滤波器
%信号为0.5hz, 0.9hz, 1.1hz和1.5hz的正统信号叠加组成
%通带为[0.9,1.1]
%频谱分辨率与信号实际长度N成正比
clear all;
f1=0.5;f2=0.9;f3=1.1;f4=1.5;t=0:1203;N=length(t);fs=10;M=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)));grid;xlabel('hz');%处理前频谱
wc1=2*f2/fs;wc2=2*f3/fs;wc3=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));grid;title('带通');
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)));grid;xlabel('hz');%处理后频谱追问

不是,输入信号是已知的,不用模拟

追答

那就把x1换成你所已知的输入信号。用模拟信号,是为了验证滤波器的正确性。

追问

f1=0.5;f2=0.9;f3=1.1;f4=1.5;t=0:1203;N=length(t);fs=10;M=512;,f1,f4分别是什么啊?

能QQ问吗,谢谢

追答

f1,f4分别是是除0.9-1.1Hz之外的其他信号,根据所得结果可知,f1,f4已经被滤除。如果你的x1已知,前面一段程序可写为:
clear all;
M=512;
x1=你的信号
N=length(x1);
t=(0:N-1)/fs
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)));grid;xlabel('hz');%处理前频谱
qq:56372540

温馨提示:答案为网友推荐,仅供参考
相似回答