欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> STM32 >> 瀏覽文章

STM32實現IIR工頻陷波器

作者:佚名   來源:仙域雨石的空間   點擊數:  更新時間:2014年08月19日   【字體:

      工頻干擾是由電力系統引起的一種干擾,中國大陸地區由50hz及其諧波構成的一種干擾,幅值約為ECG(心電信號的50%)。

 

        工頻干擾可以用陷波器進行處理,過濾50hz信號。常用的工頻陷波器主要有IIR和FIR兩種,其中FIR具有良好的線性相位,但是在同等濾波效果的情況下,IIR的階數要比FIR少很多,一個兩階的IIR濾波器的效果FIR要付出100多階的代價,階數大意味著運算量大,對于一個MCU單片機來說這是得不償失的,所以采用IIR濾波器來實現工頻濾波。

       IIR濾波器的設計方法有脈沖響應不變法和雙線性變換法,如果你已經熟悉IIR濾波器的設計原理可以直接借用Matlab的Fdatool濾波器設計工具直接生成相關系數,這樣省去了中間設計環節,再通過IIR濾波器的直接II型實現方式翻譯成C語言格式并應用于STM32平臺(重要:fs為采樣頻率,Fnotch為陷波頻率)

            

按Designer鍵即可生成IIR濾波系數

            

導出濾波系數得到轉移函數

            

這樣再通過直接II型實現框圖,翻譯成C語言代碼并燒錄到主控MCU中運行

            

 x0=ADC_ConvertedValueLocal;  //輸入ADC采集到的信號  

          w0[0]=IIR_50Notch_A[0]*x0-IIR_50Notch_A[1]*w0[1]-IIR_50Notch_A[2]*w0[2];

          y0=IIR_50Notch_B[0]*w0[0]+IIR_50Notch_B[1]*w0[1]+IIR_50Notch_B[2]*w0[2];

          w0[2]=w0[1];

          w0[1]=w0[0];

前提是你的輸入信號的時域采樣率要和濾波器的頻域采樣率要保持一致,這樣就涉及定時器觸發ADC采樣,用STM32的定時器來配置采樣率,

附帶Matlab平臺仿真實現:

 

         clear all
         fs=250;           %數字濾波器的采樣頻率fs=1000hz
         f=50;              Phz的正弦信號
         t=0:1/fs:4;      %時間間隔,ADC采樣頻率250hz
         s=sin(2*pi*f*t);

         IIR_B=[0.90239774423695518,-0.55771247730967288,0.90239774423695518];
         IIR_A= [1,-0.55771247730967288,0.80479548847391036];

         w01=0;
         w02=0;
         w03=0;

         for i=1:1000
                w01=s(i)-IIR_A(2)*w02-IIR_A(3)*w03;
                y0(i)=IIR_B(1)*w01+IIR_B(2)*w02+IIR_B(3)*w03;
   
  
               w03=w02;
               w02=w01;
       end

   

      figure
      subplot(211)
      axis([1,1000,-1,1]);
      hold on
      plot(s);
      title('直接II型實現—原始信號時域');
      subplot(212)
      plot(y0,'r');

      title('直接II型實現—信號濾波之后');

附帶一STM32實現IIR濾波器的源代碼

http://www.raoushi.com/f/IIR濾波器單片機實現藍牙通訊.zip

*興趣所致與各位分享,本人能力有限若有不足指出還望各位指正(●'??'●)

最后一句:懂者不傲,不懂者勤學

關閉窗口

相關文章