文章和代码已归档至【Github仓库:hardware-tutorial】,须要的敌人们自取。或者关注公众号【AIShareLab】,回复 嵌入式 也可获取。一、试验目标通过试验理解嵌入式汇编语言程序结构,实现文件读写操作,实现对信号的滤波解决。
二、试验环境1、硬件:PC 机
1、软件:ADS1.2 集成开发环境
三、试验要求(1)自行设计一个FIR的低通滤波器(7阶以上),能够采纳Matlab等其余工具软件设计,也能够间接给定滤波器系数。
(2)生成一个1000点的信号,能够采纳Matlab等其余工具软件生成,也能够录制一个声音文件,也能够生成一个正弦波信号。
(3)对该信号增加高斯白噪声噪声。
(4)依照试验要求编写汇编语言源程序。
(5)对汇编源程序进行编译、汇编。
(6)对程序进行调试。
(7)察看程序运行后果,给出信号原始波形和信号滤波当前的波形,阐明滤波的成果。
四、试验代码程序代码如下:
其中滤波器的设计,信号的生成以及波形及频谱图的生成均借用Matlab实现
#include <math.h>#include <stdlib.h> #define Length 1024#define pi 3.1415926int fs=4096; //采样频率int f1=100; //信号频率int f2=200; //噪声频率#define w1 2*pi*f1/fs //信号角频率#define w2 2*pi*f2/fs //噪声角频率 int i;long input[Length]; //long output[Length];int min( int a, int b);const int BL = 347;const int B[347] = { -2, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 21, 24, 27, 31, 34, 38, 42, 46, 49, 53, 56, 60, 62, 65, 67, 68, 69, 69, 69, 67, 65, 62, 59, 54, 49, 44, 37, 30, 23, 15, 7, -1, -9, -17, -24, -32, -38, -44, -49, -53, -56, -58, -58, -57, -55, -52, -48, -42, -35, -28, -19, -10, 0, 10, 20, 30, 39, 48, 57, 64, 70, 74, 77, 78, 78, 75, 71, 65, 58, 49, 38, 26, 13, -1, -15, -30, -44, -58, -71, -83, -94, -102, -109, -113, -115, -115, -111, -105, -96, -84, -70, -54, -36, -16, 5, 27, 49, 71, 93, 113, 131, 147, 161, 171, 178, 181, 180, 174, 164, 150, 131, 109, 82, 52, 19, -16, -53, -91, -128, -166, -201, -234, -263, -289, -309, -323, -330, -330, -322, -305, -280, -246, -203, -151, -90, -21, 55, 139, 228, 323, 422, 524, 629, 733, 837, 939, 1037, 1131, 1218, 1299, 1371, 1433, 1486, 1528, 1558, 1576, 1582, 1576, 1558, 1528, 1486, 1433, 1371, 1299, 1218, 1131, 1037, 939, 837, 733, 629, 524, 422, 323, 228, 139, 55, -21, -90, -151, -203, -246, -280, -305, -322, -330, -330, -323, -309, -289, -263, -234, -201, -166, -128, -91, -53, -16, 19, 52, 82, 109, 131, 150, 164, 174, 180, 181, 178, 171, 161, 147, 131, 113, 93, 71, 49, 27, 5, -16, -36, -54, -70, -84, -96, -105, -111, -115, -115, -113, -109, -102, -94, -83, -71, -58, -44, -30, -15, -1, 13, 26, 38, 49, 58, 65, 71, 75, 78, 78, 77, 74, 70, 64, 57, 48, 39, 30, 20, 10, 0, -10, -19, -28, -35, -42, -48, -52, -55, -57, -58, -58, -56, -53, -49, -44, -38, -32, -24, -17, -9, -1, 7, 15, 23, 30, 37, 44, 49, 54, 59, 62, 65, 67, 69, 69, 69, 68, 67, 65, 62, 60, 56, 53, 49, 46, 42, 38, 34, 31, 27, 24, 21, 18, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, -2};int min( int a, int b){ return a < b? a : b;} int main() { int L,n; FILE *fp,*fp1; for(i=0;i<Length;i++){ input[i]=1024*sin(w1*i)+1024*sin(w2*i); //待滤波信号,乘以1024转换为Q10格局(sin范畴为-1~1,将其转换为整数格局)} /*for(n=0;n<Length+BL;n++) //卷积计算 { output[n] = 0; for(m=0;(m<BL)&&(m<n);m++) output[n]+=B[m]*input[n-m]; }*/ for(n = 0; n < Length; n++) { output[n] = 0; for(L = 0; L < min( n, BL); L++) { output[n] += (B[L]*input[n-L]); } } fp1 = fopen("./input.txt","w"); if(fp1==NULL) { printf("error\n"); exit(0); } for(i=0;i<Length;i++) { fprintf(fp1,"%d\n",input[i]); } fclose(fp1); fp = fopen("./numbers.txt","w"); if(fp==NULL) { printf("error\n"); exit(0); } for(i=0;i<Length;i++) { fprintf(fp,"%d\n",output[i]); } fclose(fp); printf("Finish!"); return 0;输出信号波形图如下:
...