📄 filtera.m
字号:
%频域低通和带通滤波
clear
close all hidden
fni=input('频域低通和带通滤波-输入数据文件名:','s');
fid=fopen(fni,'r');%以只读方式打开数据文件
sf=fscanf(fid,'%f',1);%读入采样频率值
fmin=fscanf(fid,'%f',1);%读入最小截至频率(低通=0)
fmax=fscanf(fid,'%f',1);%读入最大截至频率
sx=fscanf(fid,'%s',1);%读入横坐标标注
sy=fscanf(fid,'%s',1);%读入纵坐标标注
fno=fscanf(fid,'%s',1);%读入输出数据文件名
x=fscanf(fid,'%f',[1,inf]);%读入时程数据存成行向量
status=fclose(fid);%关闭数据文件
n=length(x);
%建立离散时间列向量
t=(0:1/sf:(n-1)/sf)';
%取大于并最接近n的2的幂次方作为FFT的长度
nfft=2^nextpow2(n);
%四舍五入取整球最小截止频率对应的数组元素
ni=round(fmin*nfft/sf+1);
%四舍五入取整球最大截止频率对应的数组元素
na=round(fmax*nfft/sf+1);
%进行FFT变换,结果存于y
y=fft(x,nfft);
%建立一个长度为nfft的全0向量
a=zeros(1,nfft);
%将y的正频率带通内的元素赋值给a
a(ni:na)=y(ni:na);
%将y的负频率带通内的元素赋值给a
a(nfft-na+1:nfft-ni+1)=y(nfft-na+1:nfft-ni+1);
%进行FFT逆变换,结果存于y
y=ifft(a,nfft);
%取逆变换的实部n个元素为滤波结果列向量
y=(real(y(1:n)))';
subplot(211);plot(t,x);xlabel(sx);ylabel(sy);grid on;
subplot(212);plot(t,y);xlabel(sx);ylabel(sy);grid on;
%打开文件输出滤波后的数据
fid=fopen(fno,'w');
for k=1:n
fprintf(fid,'%f%f\n',t(k),y(k));
end
status=fclose(fid);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -