作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/08/12 23:40:55
设计一个matlab带通滤波器代码
采样频率10Hz,滤除除0.9-1.1Hz之外的其他信号,信号输入为x1,输出为x2,不明白的问我可以追加条件,运行好使的追加分
设计一个matlab带通滤波器代码
% 用切比雪夫最佳一致逼近设计线性相位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为带阻\x09
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