matlab如何剔除噪音数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab如何剔除噪音数据?相关的知识,希望对你有一定的参考价值。
matlab用已知数据划出曲线,但是数据采集过程有很多噪音,就是数据的波动,如何使用matlab剔除,或者减小这些噪音?谢谢
可以用卷积,利用卷积的平滑原理
命令是conv
比如数据是a,
b=ones(1,20);%这里的20可以视情况而定
c=conv(a,b);
c([1:10,end:-1:end-8])=[]
得到的c长度比a大(20-1),需要去掉,前面去10个,后面去9个
图片是我的一个数据这样处理后的结果
参考技术A 一般去噪,大的方向来说有两类,一是"删除"异常值,二是"转化"异常值。比如将数据转化为秩,又如分位数分箱,前1%的数据记为1,前2%的数据记为2,以此类推。这样一来,确实摆脱了异常值,但将连续型的数据转为秩,或者转为1-100,1-1000等等,信息的损失是无法避免的。第一种方法,由于观测的删除造成信息损失,第二种则由于数据形态的转变造成信息损失。
很多时候,在不能保证原汁原味的数据情况下,少许的信息损失也是可以接受的,不同的去噪方法,造成的信息损失自然各不相同。
关于用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如何剔除噪音数据?的主要内容,如果未能解决你的问题,请参考以下文章