用【Matlab】設計一個去除30Hz信號中50Hz的信號的小程序.
題目:
用【Matlab】設計一個去除30Hz信號中50Hz的信號的小程序.
clc;clear;close all;
%variables
f1=30;f2=50;phi=0;
delt_t=0.001;
N=512;
m=0:N-1;
fm=m/(N*delt_t);
%signal
t1=1:delt_t:2*pi;
w=sin(2*pi*f1*t1+phi)+sin(2*pi*f2*t1+phi);%信號
%頻域濾波
W=abs(fft(w,N));
py1=W/512;
py2=py1*2;
py3=abs(py2)*2^0.5;
thisfilter(1:40/2)=1;
thisfilter(40/2:60/2)=0.1;
thisfilter(60/2:N)=1;
thispy3=thisfilter.*py3;%濾波
thisw=ifft(thispy3,N);%反傅立葉變換
%plot
figure;subplot(221);plot(fm,w(1:N),'k');
axis([0 500 -5 5]);
subplot(222);bar(fm,py3(1:N),'r','BarWidth',.2);
axis([0 200 0 2.5]);
subplot(223);bar(fm,thispy3(1:N),'r','BarWidth',.2);
axis([0 200 0 2.5]);
subplot(224);plot(fm,thisw(1:N),'k');
%
請教各位大俠如何改進濾波器和程序細節實現題目的要求~
這樣的結果不是我想要的啊,抓狂ing~
解答:
W=fft(w,N);
thisfilter(1:17)=0.01;
thisfilter(18:499)=1;
thisfilter(500:N)=0.01;%%%W對應的50Hz的峯值最大,找到對應的兩個最大峯值的位置
thispy3=thisfilter.*W;%濾波
添加新評論