求一篇文章,以前能百度到,现在那个网页不知道为什么打不开了
发布网友
发布时间:2022-05-11 10:59
我来回答
共1个回答
热心网友
时间:2023-08-04 09:10
按照题目1的要求找到自己的地震资料,找到一个地震记录波形被干扰的波形,对地震数据进行滤波,设计FIR数字滤波器,比较运用线性相位校正和不运用相位校正的区别。可采用各种窗函数。
首先,用运EDSP-IAS软件选取地震波记录,如,云南地震记录文件:yn9705080600.ev2
选择bss台站记录地震,波形如下所示:
然后,截取记录,形成文件bssud.txt。然后利用MATLAB语言编写程序对信号进行分析滤波。由于此地震记录存在高频和低频两种干扰,所以我采用了带通滤波以达到最优效果
FIR带通滤波器设计:
用运fir1滤波,程序代码如下:
load bssud.txt %读取数据序列
Xt=bssud; %把数据赋值给变量
Fs=50; %设定采样率
dt=1/Fs; %计算采样间隔
n=1:length(Xt);
Nn=length(Xt); %序列长度
t=n/Fs; %时间序列
Fcp=0.6; Fcs=1.5; %设置的通带和阻带边界频率,
Wp=Fcp/(Fs/2); Ws=Fcs/(Fs/2); %转换为标准频率
Wn=[Wp Ws]; %通带、阻带频率(为标准频率)
wdelta=Ws-Wp;
N=ceil(8*pi/wdelta); %求最小阶数
pa=(N-1)/2/Fs; %计算相位延迟
b=fir1(N,Wn); % 设计FIR带通滤波器
figure(1);
freqz(b,1,Nn,Fs); %绘制滤波器幅频相频特性
figure(2);
subplot(2,1,1),plot(t,Xt); %绘制原始波形序列
xlabel('Tims/s');ylabel('Ampltude/Counts');title('滤波前信号') %title('滤波前波形');
grid on;
Yt=filtfilt(b,1,Xt); %对信号进行滤波零相位输出
YYt=filter(b,1,Xt); %对信号进行滤波非零相位输出
t=t-pa; %计算相位延迟
subplot(2,1,2),plot(t,Yt,'r',t,YYt,'b'); %绘制滤波后波形序列
xlabel('Tims/s');ylabel('Ampltude(Counts)');title('滤波后信号');
xlim([0 max(t)+1]);
legend('filtfilt','filter'); %给出图例
grid on;
运行结果如下:
上图为滤波器的幅频和相频特性分析。
下图是滤波的结果,并且做了线性相位校正和非相位校正的比较。
结果在图中明显的显示。
同样,我们用firls 和 remez函数设计滤波器,对上述信号进行滤波,以加深对FIR滤波器设计的理解和学习。
firls 和 remez滤波,程序代码如下:
load bssud.txt %加载数据
x=bssud; %输入信号
n=320; %滤波器阶数
dt=0.02; %中国数字地震台网的采样间隔为0.02s,采样频率为50Hz
f=[0 0.5/25 0.6/25 1.5/25 1.6/25 1]; %频率向量
a=[0 0 1 1 0 0]; %振幅向量
b=firls(n,f,a); %采用 firls 设计滤波器
[h,w]=freqz(b); %计算其频率响应
bb=remez(n,f,a); %采用 remez 设计滤波器
[hh,w]=freqz(bb);
figure(1)
subplot (2,1,1),plot (t,x),title ('Input signal') %绘出输入信号波形
subplot (2,1,2),plot(w/pi,abs(h),w/pi,abs(hh),'r'); %绘制滤波器的幅频响应
xlabel('Normalized frequency');ylabel('Magnitude');
legend('firls','remez'); %给出图例
%滤波
y1=filtfilt(b,1,x); %产生零相位输出,采用filtfilt 对输入信号滤波
y2=filtfilt(bb,1,x); %产生零相位输出,采用filtfilt 对输入信号滤波
t=[0:length(x)-1]*dt;
figure(2)
subplot (2,1,1),plot (t,y1,'b') %绘出输出信号波形
title('Output signal'),xlabel('Time/s')
legend('firls'); %给出图例
subplot (2,1,2),plot (t,y2,'r') %绘出输出信号波形
title('Output signal'),xlabel('Time/s')
legend('remez'); %给出图例
运行结果如下:
以上原始信号波形以及滤波器幅频响应,可以看出原始记录中存在较为较为明显的高频干扰和低频干扰,运用带通滤波会达到最优效果。其中需要注意的是f的值介于0到1之间,wp和 ws必须统一为归一化频率。
下图是滤波后的输出信号:
一点体会:
通过运用FIR滤波器三种设计函数设计滤波器,并且对实际地震记录信号进行滤波,很好的理解了FIR滤波器设计方法,并且能够较好的用于滤波。同时也对MATLAB数字信号处理有了更进一步的理解。
参考资料:http://blog.163.com/sunfaming_2003/blog/static/521516672009526105930473/