matlab零相移滤波,零相移数字滤波器边界效应讨论(附程序与参考文献)
%零相移帶通濾波器
clc
close all
clear all
% 濾波器設(shè)計(jì)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N = 100;%100秒
t = 0:0.001:N;%時(shí)間
Fs = 1000;%采樣率
% 濾波器通止參數(shù)設(shè)定;
fp=[0.1 15];
fs = [0.05 50];
rp = 1.5;
rs = 12;
wp = fp*2*pi/Fs;
ws = fs*2*pi/Fs;
% 階次;
[n,wn] = buttord(wp/pi,ws/pi,rp,rs);
% 濾波器系數(shù)與輻頻響應(yīng);
[b,a] = butter(n,wp/pi);
[h,w] = freqz(b,a,256,Fs);
h = 20*log10(abs(h));
figure(1)
plot(w,h);grid;ylabel('Bandpass DF');xlabel('Hz');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%信號(hào)的產(chǎn)生
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f1 = 0.001;%準(zhǔn)直流
f2 = 5;%有用信號(hào),取1Hz到10Hz之間
f3 = 50;%工頻干擾
x1 = 100+10*sin(2*pi*f1*t);
x2 = 10*sin(2*pi*f2*t);
x3 = 10*sin(2*pi*f3*t);
figure(2)
subplot(3,1,1)
plot(t,x1);grid;
subplot(3,1,2)
plot(t,x2);grid;
subplot(3,1,3)
plot(t,x3);grid;
figure(3)
x = x1+x2+x3;
plot(t,x);grid;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
w_d = 200;
M = 1;%數(shù)據(jù)起始點(diǎn)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%問題所在%%%%%%%%%%%%%%%%%%%%%%%%%%%
xn = x(M:80*w_d+M);%取x中一段數(shù)據(jù)xn
figure(4)
plot(xn);
n0 = length(xn);
L = 600;
for i = 1:L??%前后延拓的數(shù)據(jù)
xa(i) = 2*xn(1)-xn(L+2-i);
xz(i) = 2*xn(n0)-xn(n0-i);
end
xnaz = [xa xn xz];%前后延拓
yaz = filtfilt(b,a,xnaz);%做零相位帶通濾波
y = yaz((L+1):(L+n0));??%去延拓
figure(5)
plot(y);
%問題:數(shù)據(jù)起始點(diǎn)M的取值關(guān)系到邊界效應(yīng)。只有當(dāng)M取1,401,801,1201……時(shí)邊界失真才小,
%取其他值時(shí)邊界失真都很大。請(qǐng)問各位其中原因,有何方法使無論起始點(diǎn)取何值都能邊界失真維持
%在較小的范圍內(nèi)。
%程序本身能夠獨(dú)立運(yùn)行,各位可調(diào)整M值看各圖結(jié)果。
%謝謝大家了!:handshake :handshake
%延拓是根據(jù)武漢大學(xué)陳淑珍的一篇參考文獻(xiàn)編寫的,不知如何上傳,但論壇中已有,感興趣的朋友可查看
%論壇中貌似關(guān)于零相移濾波器的討論不多,所以好找
%希望能夠得到大家的指點(diǎn):handshake
總結(jié)
以上是生活随笔為你收集整理的matlab零相移滤波,零相移数字滤波器边界效应讨论(附程序与参考文献)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql 配置文件常见配置
- 下一篇: matlab人脸追踪,求大神帮助我这个菜