MSP430 低通滤波器测试

MSP430型号 :MSP430F5529

通过MATLAB 设计了一个9阶的低通滤波器,系数乘以100倍存在.c文件中,直接对数据进行差分运算获得滤波后的输出值。

原始DAC数据也通过MATLAB生成。(12位DAC)

include <msp430.h> 

#include "DAC7311.h"

#include "Clock_init.h"
#include "Timer_Init.h"
#include "Filter.h"

const unsigned int Data[SAMPLENUM]={
1018,2851,2077,2221,1377,1762,2709,2013,2693,1521,
2214,2238,2507,3010,1579,2281,2032,3297,2816,1609,
2236,2279,3738,2237,1879,2215,2646,3514,1853,2368,
2039,2789,2949,2043,2612,1611,2757,2545,2537,2211,
1239,2755,2413,2749,1375,1317,2704,2309,2459,749,
1765,2313,2131,1969,704,2017,1592,2089,1616,987,
1664,1034,2311,1374,1137,946,1109,2500,1071,1057,
457,1684,2247,829,989,468,2151,1609,994,1035,
737,2125,1165,1606,982,967,1821,1379,2185,697,
1203,1683,2073,2221,485,1615,1815,2677,1790,793,
2059,1985,2891,1465,1600,2143,2098,2903,1646,2323,
1768,2372,2962,2142,2441,1384,2936,2988,2515,2048,
1513,3460,2781,2636,1662,2115,3434,2471,2698,1571,
2620,2808,2466,2761,1603,2594,2125,2892,2569,1523,
2173,1929,3311,1960,1426,1759,2181,3168,1262,1528,
1485,2406,2456,1029,1706,1178,2325,1726,1385,1541,
815,2107,1448,1840,879,700,1984,1553,1852,164,
1055,1868,1694,1434,0,1592,1550,1775,1046,474,
1745,1170,1986,982,1092,1351,1192,2354,1105,1387,
871,1825,2551,1209,1395,863,2659,2315,1401,1424,
1354,3059,1907,1900,1543,1911,2868,1896,2559,1538,
2228,2516,2482,2865,1366,2405,2446,3220,2531,1351,
2605,2624,3524,1908,1774,2673,2751,3298,1617,2382,
2340,2757,2916,1851,2571,1725,2851,2658,2213,2075,
1350,3073,2424,2267,1290,1554,3074,2069,2024,806,
2038,2540,1780,1768,768,2189,1703,1872,1566,862,
1788,1198,2274,1214,849,1207,1367,2471,690,854,
895,1889,2101,385,1038,880,2209,1436,683,1215,
923,2170,1103,1409,1051,995,2063,1376,1938,599,
1330,2111,1937,1886,381,1965,2183,2355,1514,806,
2488,2114,2580,1352,1640,2457,2088,2815,1560,2248,
1979,2458,3047,1862,2299,1649,3183,2991,2031,2038,
1869,3713,2566,2186,1849,2407,3573,2165,2475,1762,
2736,2919,2256,2679,1571,2663,2353,2771,2398,1301,
2426,2229,3124,1630,1261,2225,2345,2879,917,1566,
1934,2356,2224,790,1836,1409,2249,1676,1166,1581,
896,2243,1459,1492,838,857,2320,1386,1421,196,
1367,2169,1305,1135,144,1921,1663,1386,975,568,
1977,1195,1807,961,1001,1573,1306,2332,889,1224,
1238,2022,2471,790,1406,1335,2784,2095,1004,1672,
1709,3069,1675,1684,1817,2035,2928,1765,2431,1620,
2286,2773,2359,2653,1288,2646,2792,2943,2239,1320,
3053,2807,3122,1689,1872,3113,2687,2997,1517,2484,
2610,2643,2846,1700,2563,1903,2909,2666,1852,2052,
1605,3283,2257,1789,1423,1881,3242,1685,1687,1075,
2282,2582,1383,1676,945,2302,1743,1628,1538,803,
1943,1350,2114,1027,693,1580,1538,2236,352,859,
1407,1901,1795,85,1263,1272,2073,1221,505,1472,
1077,2117,1035,1232,1174,1077,2254,1281,1648,650,
1564,2423,1626,1576,517,2353,2358,1891,1372,1018
};
unsigned int i=0;
unsigned int j,temp;
unsigned int array[10];
/**
 * main.c
 */
void main(void)
{
	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
	Clock_init();
	DAC7311_Init();
	Timer_Init();
    _enable_interrupts();                       //开全局总中断

}

#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
{

        TA0CCTL0 &= ~CCIE;
        if(i>=9)
        {
            for(j=0;j<9+1;j++)  //9阶滤波器需要当前数据及前9个数据
            {
                array[j]= Data[j+i-9];
            }
            temp=IIR_Filter(array,i);
            writeDAC7311data(temp);
        }
//        writeDAC7311data(Data[i]);
        i++;
        if(i>SAMPLENUM) {i=0;}
        TA0CCTL0 |= CCIE;

}
/*
 * Filter.c
 *
 *  Created on: 2022年5月1日
 *      Author: Krism
 */





const int Num1[10]={1, 4, 8,12,15,15,12, 8, 4, 1};
unsigned int IIR_Filter(unsigned int *Data,unsigned int index)
{
    unsigned int k;
    unsigned long int temp = 0;
    unsigned int result;


    for(k=0;k<9+1;k++)
    {
        temp += (unsigned long) Num1[k]*Data[k];
    }
    result = temp/100;
    return result;
}

滤波前:

滤波后:

 Matlab生成的一些原始数据,包含的频率分量如下:

x = linspace(0,2*pi,500); %在0和2pi间取500个点

y1 = 0.5*sin(5*x)+0.2*sin(120*x)+0.45*sin(100*x-0.9)+0.4*sin(212*x-1);

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值