资源简介
浮点c语言的mp3解码程序,总共包含5个.c文件和3个.h文件
代码片段和文件信息
#include “mp3dec.h“
/* An Inverse Modified Discrete Cosinus Transform is applied to 18 values
at a time. The 18 frequency values generate 36 time domain values
where half of these are overlapped with half of the previously generated
values to produce 18 output values. These can later be fed into the
subband synthesis.
The multiply-add loop here is very time critical. It uses a total of
684*32=21888 MAC operations per imdct 4 times per frame. With 38
frames per second thats 3.33 million MAC‘s.
Using some small trigonometric tricks we can do this in 360*32*4*38=
1.75 million MAC‘s per second instead.
*/
extern mpfloat Granule_imdct_previous[2][576]; /* used for overlapping */
extern mpfloat Granule_9x9_idct[72];
extern mpfloat Granule_imdct_win[4][36];
mpfloat Granule_twiddles_short[23] = {
0.866025403f 0.5f
1.931851653f 0.707106781f 0.517638090f
0.504314480f 0.541196100f 0.630236207f
0.821339815f 1.306562965f 3.830648788f
0.793353340f 0.608761429f 0.923879532f
0.382683432f 0.991444861f 0.130526192f
0.382683432f 0.608761429f 0.793353340f
0.923879532f 0.991444861f 0.130526192f
};
mpfloat Granule_twiddles_normal[] = {
5.736856623f 1.931851653f 1.183100792f
0.871723397f 0.707106781f 0.610387294f
0.551688959f 0.517638090f 0.501909918f
-0.500476342f -0.504314480f -0.512139757f
-0.524264562f -0.541196100f -0.563690973f
-0.592844523f -0.630236207f -0.678170852f
-0.740093616f -0.821339815f -0.930579498f
-1.082840285f -1.306562965f -1.662754762f
-2.310113158f -3.830648788f -11.46279281f
};
void
Granule_imdct(Granule *gr int ch Granule_floatfreqs X)
{
int sb i j k l window;
mpfloat save sum sum2 pp1;
mpfloat s;
mpfloat x[36] t[18];
mpfloat *v *prev *z *twid;
prev = Granule_imdct_previous[ch];
/* process each subband */
for(sb = 0; sb < NUM_SUBBANDS; sb++) {
for(i = 0; i < 36; i++)
x[i] = (mpfloat)0.0f;
/* decode the block_type - it‘s in block_type but we have to think
about the mixed blocks lower 2 subbands */
if(gr->block_type == BLOCKTYPE_3WIN &&
!(gr->window_switching_flag &&
gr->mixed_block_flag && sb < 2)) {
/* process the 3 windows separately each window has 12 values */
for(window = 0; window < 3; window++) {
#ifdef LEE_IMDCT
/* 30*3=90 adds 25*3=75 muls */
X[15+window] += X[12+window];
X[12+window] += X[9+window];
X[9+window] += X[6+window];
X[6+window] += X[3+window];
X[3+window] += X[window];
X[15+window] += X[9+window];
X[9+window] += X[3+window];
twid = Granule_twiddles_short;
/* do a 3x3 IDCT on the even part */
pp1 = X[6+window] * twid[0];
sum = X[window] + X[12+window] * twid[1];
t[1] = X[window] - X[12+window];
t[0] = sum + pp1;
t[2] = sum - pp1;
/* 3x3 IDCT
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8953 1999-03-22 16:20 用DSP进行mp3解压缩的算法原程序\fastimdct.c
文件 5475 1999-03-22 16:20 用DSP进行mp3解压缩的算法原程序\FASTSB.C
文件 9515 1999-03-22 16:20 用DSP进行mp3解压缩的算法原程序\HUFF.C
文件 19029 1999-03-22 16:20 用DSP进行mp3解压缩的算法原程序\HUFFMAN.H
文件 56613 1999-03-22 16:20 用DSP进行mp3解压缩的算法原程序\MP3DEC.C
文件 12117 1999-03-22 16:20 用DSP进行mp3解压缩的算法原程序\MP3DEC.H
文件 6053 1999-03-22 16:20 用DSP进行mp3解压缩的算法原程序\MP3DEC_D.H
文件 1364 1999-03-22 16:20 用DSP进行mp3解压缩的算法原程序\windowing.c
目录 0 2007-08-26 21:54 用DSP进行mp3解压缩的算法原程序
----------- --------- ---------- ----- ----
119119 9
相关资源
- 单片机C语言实战开发108例
- stm32 AD7506
- stc-isp-15xx-v6.86G
- Linux那些事儿之我是USB core
- STC8G1K08A红外遥控点灯
- C语言的嵌入式汇编基本使用.docx(2页
- stm32f103c8t6开发板原理图+pcb
- Arduino 敲琴MIDI电子琴 程序报告.docx
- CAN实验
- LCD驱动芯片ST7701SI SPI接口底层驱动配
- 显示屏操作(stm32f103c8t6(SAN))
- USB CAN Tool 源代码(LabVIEW 2011环境)
- Proteus 8.6仿真STM32F103C6
- atmega128 串口通讯(RS485.c)
- C语言嵌入式Modbus协议栈,支持主站和
- stm32 +w5500 裸机 远程升级 自动dns pi
- 永磁同步电机的FOC控制算法
- arduino I2C设备扫描并串口返回地址(
- Proteus仿真:LCD液晶屏显示.rar
- STM32 PCB封装库 全系列 全网不好找
- 基于STM32F407的W5500 tcpserver(官网例程
- 步进电机调速原理.c
- tm1650+stm32f103源码(board_tm1650.c)
- 颜色识别形状识别STM103嵌入式代码
- 基于STM32的音频信号采样与FFT分析
- 汽车电子编程规范(Unlock-MISRA C 2012)
- cheat engine 7.2源码
- 基于STM32F103C8T6主控板使用BH1750检测光
- cubeMX设计实现stm32f407上的CAN及485的通
- stm32 BootLoader程序(main.c)
评论
共有 条评论