求助关于matlab滤波功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助关于matlab滤波功能相关的知识,希望对你有一定的参考价值。
现有一组拉索振动的实验数据,每隔0.002s在拉索中间点出测量位移值,得到txt文件,其中一部分数据如下:
0.0000000(时间) 6.0159998(位移值)
0.0020000 5.8280001
0.0040000 5.6399999
0.0060000 5.3920002
0.0080000 5.0939999
0.0100000 4.8660002
0.0120000 4.5679998
0.0140000 4.2519999
0.0160000 3.9200001
0.0180000 3.5139999
0.0200000 3.1500001
0.0220000 2.7460001
0.0240000 2.3239999
0.0260000 1.9040000
0.0280000 1.3900000
0.0300000 0.9140000
0.0320000 0.4040000
0.0340000 0.0000000
0.0360000 -0.4720000
0.0380000 -0.9740000
0.0400000 -1.3099999
为了消除其他频率波或者噪音的影响,现在希望通过滤波将杂质除去,小弟以前没有用过matlab滤波功能,请问高手具体如何操作啊?感激不尽
请问heaventian,能稍微详细一点吗
但是,也可以简单点,直接用fft将数据变换到频率域,然后令相应频率域的振幅为零就可以了。
第一个不说了,要用的的知识比较多。说下第二种方法:
比方说,你本来有个时间序列:x
你用快速富士变换函数fft便可得到x的振幅谱和相位谱
y=fft(x);
y1=abs(y);%y1就是振幅谱。
其对应频率可以有采样时间间隔和采样个数算出来。
假设为0:df:F
而你要其中的
频率范围【a,b】以外的给滤掉,只要使其相应的y为零就可以了。
然后用
x1=ifft(y)
便可本回答被提问者采纳 参考技术B 滤波既是卷积,可以使用fdatool工具即可 参考技术C 低通滤波器参数:Fs=8000,fp=2500,fs=3500,Rp=1dB,As=30dB,其他滤波器可以通过与低通之间的映射关系实现。
%%模拟滤波器
%巴特沃斯——滤波器设计
wp=2*pi*2500;ws=2*pi*3500;Rp=1;As=30;
[N,wc]=buttord(wp,ws,Rp,As,'s')%计算率波器的阶数和3dB截止频率
[B,A]=butter(N,wc,'s');%计算滤波器系统函数分子分母多项式
fk=0:800/512:8000;wk=2*pi*fk;
Hk=freqs(B,A,wk);
figure
plot(fk/1000,20*log10(abs(Hk)));
grid on,xlabel('频率(kHz)'),ylabel('幅度(dB)')
title('巴特沃斯模拟滤波器')
axis([0,4,-35,5])
%%
%切比雪夫I——滤波器设计
wp=2*pi*2500;ws=2*pi*3500;Rp=1;As=30;
[N1,wp1]=cheb1ord(wp,ws,Rp,As,'s')%计算切比雪夫滤波器的阶数和通带边界频率
[B1,A1]=cheby1(N1,Rp,wp1,'s');%计算滤波器系统函数分子分母多项式
fk=0:800/512:8000;wk=2*pi*fk;
Hk=freqs(B1,A1,wk);figure,
plot(fk/1000,20*log10(abs(Hk)));
grid on,xlabel('频率(kHz)'),ylabel('幅度(dB)')
title('切比雪夫I模拟滤波器')
axis([0,4,-35,5])
%%
%切比雪夫II——滤波器设计
wp=2*pi*2500;ws=2*pi*3500;Rp=1;As=30;
[N2,wso]=cheb2ord(wp,ws,Rp,As,'s')%计算切比雪夫滤波器的阶数和通带边界频率
[B2,A2]=cheby2(N1,Rp,wso,'s');%计算滤波器系统函数分子分母多项式
fk=0:800/512:8000;wk=2*pi*fk;
Hk=freqs(B1,A1,wk);figure,
plot(fk/1000,20*log10(abs(Hk)));
grid on,xlabel('频率(kHz)'),ylabel('幅度(dB)')
title('切比雪夫II模拟滤波器')
axis([0,4,-35,5])
%%
%椭圆——滤波器设计
wp=2*pi*2500;ws=2*pi*3500;Rp=1;As=30;
[N,wpo]=ellipord(wp,ws,Rp,As,'s')%计算滤波器的阶数和通带边界频率
[B,A]=ellip(N,Rp,As,wpo,'s');%计算滤波器系统函数分子分母多项式
fk=0:800/512:8000;wk=2*pi*fk;
Hk=freqs(B1,A1,wk);figure,
plot(fk/1000,20*log10(abs(Hk)));
grid on,xlabel('频率(kHz)'),ylabel('幅度(dB)')
axis([0,4,-35,5]),title('椭圆模拟滤波器')
%%
%数字滤波器
%脉冲响应法滤波器设计
fp=2500;fs=3500;Fs=8000;
wp=2*fp/Fs;ws=2*fs/Fs;%求归一化数字通带截止频率,求归一化数字阻带起始频率
deltaw=ws-wp;%求过渡带宽
N0=ceil(6.6/deltaw);%求窗口长度
N=N0+mod(N0+1,2); %确保窗口长度 N为奇数
n=N-1;%求出滤波器的阶数 n
wn=(ws+wp)/2; %求滤波器的截止频率
b=fir1(n,wn)%利用 fir1 函数求出滤波器的系数
[Hk,w] = freqz(b,1); % 计算频率响应
mag = abs(Hk); % 求幅频特性
db = 20*log10(mag/max(mag)); % 化为分贝值
dw =pi/512; %关于pi归一化
Rp = -(min(db(1:wp*pi/dw+1))) % 检验通带波动
As = -(max(db(ws*pi/dw+1:512))) % 检验最小阻带衰减
figure,plot(0:pi/511:pi,db),grid on
axis([0,4.0,-80,5]),title('数字滤波器——脉冲响应法')
%%
关于用MATLAB设计对信号进行频谱分析和滤波处理的程序
基本要求:
设计出一套完整的系统,对信号进行频谱分析和滤波处理;
1.产生一个连续信号,包含低频,中频,高频分量,对其进行采样,进行频谱分析,分别设计三种高通,低通,带通滤波器对信号进行滤波处理,观察滤波后信号的频谱。
2.采集一段含有噪音的语音信号(可以录制含有噪音的信号,或者录制语音后再加进噪音信号),对其进行采样和频谱分析,根据分析结果设计出一合适的滤波器滤除噪音信号。
只要有程序就可以了,谢谢各位了,提供点帮助喽!!没学过MATLAB,自学的,要做很难的这个就有点困难啦!!这两个题目随便哪个都可以.先谢谢啦!!好的答案会追加分的,目前我只有这么多了!
%写上标题
%设计低通滤波器:
[N,Wc]=buttord()
%估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wc
[a,b]=butter(N,Wc); %设计Butterworth低通滤波器
[h,f]=freqz(); %求数字低通滤波器的频率响应
figure(2); % 打开窗口2
subplot(221); %图形显示分割窗口
plot(f,abs(h)); %绘制Butterworth低通滤波器的幅频响应图
title(巴氏低通滤波器'');
grid; %绘制带网格的图像
sf=filter(a,b,s); %叠加函数S经过低通滤波器以后的新函数
subplot(222);
plot(t,sf); %绘制叠加函数S经过低通滤波器以后的时域图形
xlabel('时间 (seconds)');
ylabel('时间按幅度');
SF=fft(sf,256); %对叠加函数S经过低通滤波器以后的新函数进行256点的基—2快速傅立叶变换
w= %新信号角频率
subplot(223);
plot()); %绘制叠加函数S经过低通滤波器以后的频谱图
title('低通滤波后的频谱图');
%设计高通滤波器
[N,Wc]=buttord()
%估算得到Butterworth高通滤波器的最小阶数N和3dB截止频率Wc
[a,b]=butter(N,Wc,'high'); %设计Butterworth高通滤波器
[h,f]=freqz(); %求数字高通滤波器的频率响应
figure(3);
subplot(221);
plot()); %绘制Butterworth高通滤波器的幅频响应图
title('巴氏高通滤波器');
grid; %绘制带网格的图像
sf=filter(); %叠加函数S经过高通滤波器以后的新函数
subplot(222);
plot(t,sf); ;%绘制叠加函数S经过高通滤波器以后的时域图形
xlabel('Time(seconds)');
ylabel('Time waveform');
w; %新信号角频率
subplot(223);
plot()); %绘制叠加函数S经过高通滤波器以后的频谱图
title('高通滤波后的频谱图');
%设计带通滤波器
[N,Wc]=buttord([)
%估算得到Butterworth带通滤波器的最小阶数N和3dB截止频率Wc
[a,b]=butter(N,Wc); %设计Butterworth带通滤波器
[h,f]=freqz(); %求数字带通滤波器的频率响应
figure(4);
subplot(221);
plot(f,abs(h)); %绘制Butterworth带通滤波器的幅频响应图
title('butter bandpass filter');
grid; %绘制带网格的图像
sf=filter(a,b,s); %叠加函数S经过带通滤波器以后的新函数
subplot(222);
plot(t,sf); %绘制叠加函数S经过带通滤波器以后的时域图形
xlabel('Time(seconds)');
ylabel('Time waveform');
SF=fft(); %对叠加函数S经过带通滤波器以后的新函数进行256点的基—2快速傅立叶变换
w=( %新信号角频率
subplot(223);
plot(')); %绘制叠加函数S经过带通滤波器以后的频谱图
title('带通滤波后的频谱图'); 参考技术A 采样没什么,就是产生一个连续的(实际还是数字信号),实际上就是再进行一下抽取。
变化就用fft函数。
滤波器设计有专门的函数来实现,iir的有巴特沃斯、切比雪夫、椭圆等等。fir可以直接在频域设计,应该也有专门的函数,忘了。高通就是用1减去低通,带通就是高通加低通减1,当然这是比较投机的方法,数字信号处理在fir设计里有专门讲几种滤波器的设计。 参考技术B 可以给RMB啊
以上是关于求助关于matlab滤波功能的主要内容,如果未能解决你的问题,请参考以下文章