📄 interpolatetest.c
字号:
//
// Project: Experiment 4.5.6 Interpolaiton using FIR filter - Chapter 4
// File name: interpolateTest.c
//
// Description: This is the test program for an interpolation FIR filter
//
// For the book "Real Time Digital Signal Processing:
// Implementation and Application, 2nd Ed"
// By Sen M. Kuo, Bob H. Lee, and Wenshun Tian
// Publisher: John Wiley and Sons, Ltd
//
// Tools used: CCS v.2.12.07
// TMS320VC5510 DSK Rev-C
//
#include <stdlib.h>
#include <stdio.h>
#include "interpolation.h"
// Define DSP system memory map
#pragma DATA_SECTION(intpFilt8to16, ".data:fir");
#pragma DATA_SECTION(intpFilt16to48, ".data:fir");
#pragma DATA_SECTION(z1, "expdata1");
#pragma DATA_SECTION(z2, "expdata1");
#pragma DATA_SECTION(x3, "expdata0");
#pragma DATA_SECTION(x4, "expdata0");
#pragma DATA_SECTION(y2, "expdata0");
#pragma DATA_SECTION(temp, "expdata1");
#pragma DATA_ALIGN(z1, 2);
#pragma DATA_ALIGN(z2, 2);
short intpFilt8to16[TAPS8to16]={
#include "coef8to16.h"
};
short intpFilt16to48[TAPS16to48]={
#include "coef16to48.h"
};
short z1[(TAPS8to16/2)+1];
short z2[(TAPS16to48/3)+1];
short x3[INT_NUM_DATA_IN], // Input data
x4[INT_NUM_DATA2],
y2[INT_NUM_DATA_OUT]; // Output data
char temp[INT_NUM_DATA_OUT*2];
void main()
{
FILE *fpIn,*fpOut;
short i,k,
indx1,
indx2; // Delay line index
fpIn = fopen("..\\data\\tone1k_8000.pcm", "rb");
fpOut = fopen("..\\data\\output1khz48kHz.pcm", "wb");
if (fpIn == NULL)
{
printf("Can't open input file\n");
exit(0);
}
// Initialize for filtering process
for (i=0; i<TAPS8to16/2; i++)
{
z1[i] = 0;
}
for (i=0; i<TAPS16to48/3; i++)
{
z2[i] = 0;
}
for (i=0; i<INT_NUM_DATA_OUT*2; i++)
{
temp[i] = 0;
}
indx1 = 0;
indx2 = 0;
// Begin filtering the data
while (fread(temp, sizeof(char), INT_NUM_DATA_IN*2, fpIn) ==
(INT_NUM_DATA_IN*2))
{
for (k=0, i=0; i<INT_NUM_DATA_IN; i++)
{
x3[i] = (temp[k]&0xFF)|(temp[k+1]<<8);
k += 2;
}
// Interploate the input data x and save output data y
interpolate(x3, INT_NUM_DATA_IN,
intpFilt8to16, TAPS8to16/2,
x4,
z1, &indx1,
2);
interpolate(x4, INT_NUM_DATA2,
intpFilt16to48, TAPS16to48/3,
y2,
z2, &indx2,
3);
for (k=0, i=0; i<INT_NUM_DATA_OUT*2; i++)
{
temp[k++] = (y2[i]&0xFF);
temp[k++] = (y2[i]>>8)&0xFF;
}
fwrite(temp, sizeof(char), (INT_NUM_DATA_OUT*2), fpOut);
}
fclose(fpIn);
fclose(fpOut);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -