一个去噪的代码:
function x=cleaninglownoise(x,fs,f0floor);
flm=50;
flp=round(fs*flm/1000);
nn=length(x);
wlp=fir1(flp*2,f0floor/(fs/2));
wlp(flp+1)=wlp(flp+1)-1;
wlp=-wlp;
tx=[x(:)' zeros(1,2*length(wlp))];
ttx=fftfilt(wlp,tx);
x=ttx((1:nn)+flp);
return;
看看用到了哪些函数:
round函数
round函数用于舍入到最接近(四舍五入)的整数。语法形式只有1种:Y = round(X),这里的X可以是数,向量,矩阵,输出对应。
举例:
1.数字
正数时:
round(2.1) = 2;
round(2.5) = 3;
round(2.8) = 3
负数时:
round(-2.1) = -2;
round(-2.5) = -3;
round(-2.8) = -3
2.列表
A = [2.3 4.7 -2.3 -4.7];
round(A)
结果为:
2 5 -2 -5
3.矩阵
A = [2.1 4.7 8.9; 3.4 5.6 7.1; -9.8 -3.4 -2.5];
round(A)
结果为:
2 5 9
3 6 7
-10 -3 -3
fir1函数
基于窗函数的fir滤波器设计
主要形式:
b = fir1(n,Wn)
%使用汉明窗来设计具有线性相位的n阶低通,带通或多频FIR滤波器。滤波器类型取决于Wn的元素数量。
b = fir1(n,Wn,ftype)
%设计低通,高通,带通,带阻或多频带滤波器,取决于ftype的值和Wn的元素数量。
b = fir1(___,window)
%使用window中指定的向量和先前语法中的任何参数设计过滤器。
b = fir1(___,scaleopt)
%另外指定滤波器的幅度响应是否被归一化。
%注意:对于具有任意频率响应的窗口滤波器,请使用fir2。
n — 滤波器阶数。
Wn — 截止频率, 0≤Wn≤1,
Wn=1 对应于采样频率的一半。
数字角频率w、模拟角频率Ω之间的关系为 w=Ω/Fs,所以 w = 2pif/Fs ,f为模拟频率;
举例:
设计一个48阶FIR带通滤波器,通带为0.35π≤ω≤0.65π rad/ sample。
其幅度和相位响应。如下所示:
b = fir1(48,[0.35 0.65]);
freqz(b,1,512)
fftfilt函数
一般调用形式:
y=fftfilt(b,x)
该格式是利用基于FFT的重叠相加法对数据进行滤波,这种频域滤波技术只对FIR滤波器有效。该函数是通过向量b描述的滤波器对x数据进行滤波。
x是待滤波的信号;
b是FIR滤波器的H(z)的分子多项式系数