matlab零相移滤波,零相移数字滤波器边界效应讨论(附程序与参考文献)
%零相移帶通濾波器
clc
close all
clear all
% 濾波器設計
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N = 100;%100秒
t = 0:0.001:N;%時間
Fs = 1000;%采樣率
% 濾波器通止參數設定;
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);
% 濾波器系數與輻頻響應;
[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');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%信號的產生
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f1 = 0.001;%準直流
f2 = 5;%有用信號,取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;%數據起始點%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%問題所在%%%%%%%%%%%%%%%%%%%%%%%%%%%
xn = x(M:80*w_d+M);%取x中一段數據xn
figure(4)
plot(xn);
n0 = length(xn);
L = 600;
for i = 1:L??%前后延拓的數據
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);
%問題:數據起始點M的取值關系到邊界效應。只有當M取1,401,801,1201……時邊界失真才小,
%取其他值時邊界失真都很大。請問各位其中原因,有何方法使無論起始點取何值都能邊界失真維持
%在較小的范圍內。
%程序本身能夠獨立運行,各位可調整M值看各圖結果。
%謝謝大家了!:handshake :handshake
%延拓是根據武漢大學陳淑珍的一篇參考文獻編寫的,不知如何上傳,但論壇中已有,感興趣的朋友可查看
%論壇中貌似關于零相移濾波器的討論不多,所以好找
%希望能夠得到大家的指點:handshake
總結
以上是生活随笔為你收集整理的matlab零相移滤波,零相移数字滤波器边界效应讨论(附程序与参考文献)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql 配置文件常见配置
- 下一篇: 中级系统集成项目管理工程师考试记录之总述