⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interspectrum.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
            for (loop0 = 0; loop0 < SPECTRUM_LINE_M - 10; loop0++)//前面10根谱线能量取2根为一组原值,每组跨度344.5=2×172.33hz,频率范围为0hz-3445hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++];
                Spectrum_gLinePow[loop0] = (unsigned short)((powsum / 2.0)  * (1.0 * SPECTRUM_DBLEVEL_N / SPECTRUM_DBLEVEL_46));
            }

            for (;loop0 < SPECTRUM_LINE_M;loop0++)//3445Hz后的10谱线是以4个为一组取平均值算1根,间隔为689.1hz=172.3*4,范围3445hz-10338hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] +
                         SpectrumLineDBBuf[loop1++];
                Spectrum_gLinePow[loop0] = (unsigned short)((powsum / 4.0) * (1.0 * SPECTRUM_DBLEVEL_N / SPECTRUM_DBLEVEL_46));
            }
#endif
            loop1 = 0 ;
            for (loop0 = 0; loop0 < SPECTRUM_LINE_M - 10; loop0++)//前面10根谱线能量取2根为一组原值,每组跨度344.5=2×172.33hz,频率范围为0hz-3445hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++];
                powsum = (unsigned short)(powsum / 2.0);
                spectrumdbnumber = 0;
                while ((powsum >= spectrumdbtable[spectrumdbnumber]) && (spectrumdbnumber < 21))//通过查表求解db序号
                {
                    spectrumdbnumber++;
                }
                Spectrum_gLinePow[loop0] = (unsigned short)spectrumdbnumber;
            }

            for (;loop0 < SPECTRUM_LINE_M;loop0++)//3445Hz后的10谱线是以4个为一组取平均值算1根,间隔为689.1hz=172.3*4,范围3445hz-10338hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] +
                         SpectrumLineDBBuf[loop1++];
                powsum = (unsigned short)(powsum / 4.0);
                spectrumdbnumber = 0;
                while ((powsum >= spectrumdbtable[spectrumdbnumber]) && (spectrumdbnumber < 21))//通过查表求解db序号
                {
                    spectrumdbnumber++;
                }
                Spectrum_gLinePow[loop0] = (unsigned short)spectrumdbnumber;
            }
            break;

        case 16000:
#if 0
            loop1 = 0 ;
            for (loop0 = 0; loop0 < SPECTRUM_LINE_M - 10; loop0++)//前面10根谱线能量取2根为一组原值,每组跨度250=2×125hz,频率范围为0hz-2500hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++];
                Spectrum_gLinePow[loop0] = (unsigned short)((powsum / 2.0)  * (1.0 * SPECTRUM_DBLEVEL_N / SPECTRUM_DBLEVEL_46));
            }

            for (;loop0 < SPECTRUM_LINE_M;loop0++)//2500Hz后的10谱线是以4个为一组取平均值算1根,间隔为500hz=125*4,范围2500hz-7500hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] +
                         SpectrumLineDBBuf[loop1++];
                Spectrum_gLinePow[loop0] = (unsigned short)((powsum / 4.0) * (1.0 * SPECTRUM_DBLEVEL_N / SPECTRUM_DBLEVEL_46));
            }
#endif
            loop1 = 0 ;
            for (loop0 = 0; loop0 < SPECTRUM_LINE_M - 10; loop0++)//前面10根谱线能量取2根为一组原值,每组跨度250=2×125hz,频率范围为0hz-2500hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++];
                powsum = (unsigned short)(powsum / 2.0);
                spectrumdbnumber = 0;
                while ((powsum >= spectrumdbtable[spectrumdbnumber]) && (spectrumdbnumber < 21))//通过查表求解db序号
                {
                    spectrumdbnumber++;
                }
                Spectrum_gLinePow[loop0] = (unsigned short)spectrumdbnumber;
            }

            for (;loop0 < SPECTRUM_LINE_M;loop0++)//2500Hz后的10谱线是以4个为一组取平均值算1根,间隔为500hz=125*4,范围2500hz-7500hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] +
                         SpectrumLineDBBuf[loop1++];
                powsum = (unsigned short)(powsum / 4.0);
                spectrumdbnumber = 0;
                while ((powsum >= spectrumdbtable[spectrumdbnumber]) && (spectrumdbnumber < 21))//通过查表求解db序号
                {
                    spectrumdbnumber++;
                }
                Spectrum_gLinePow[loop0] = (unsigned short)spectrumdbnumber;
            }
            break;

        case 12000:
#if 0
            loop1 = 0 ;
            for (loop0 = 0; loop0 < SPECTRUM_LINE_M - 10; loop0++)//前面10根谱线能量取4根为一组原值,每组跨度375=4×93.75hz,频率范围为0hz-3750hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] +
                         SpectrumLineDBBuf[loop1++];
                Spectrum_gLinePow[loop0] = (unsigned short)((powsum / 4.0)  * (1.0 * SPECTRUM_DBLEVEL_N / SPECTRUM_DBLEVEL_46));
            }

            for (;loop0 < SPECTRUM_LINE_M;loop0++)//3750Hz后的10谱线是以2个为一组取平均值算1根,间隔为187.5hz=93.75*2
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++];
                Spectrum_gLinePow[loop0] = (unsigned short)((powsum / 2.0) * (1.0 * SPECTRUM_DBLEVEL_N / SPECTRUM_DBLEVEL_46));
            }
#endif
            loop1 = 0 ;
            for (loop0 = 0; loop0 < SPECTRUM_LINE_M - 10; loop0++)//前面10根谱线能量取4根为一组原值,每组跨度375=4×93.75hz,频率范围为0hz-3750hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] +
                         SpectrumLineDBBuf[loop1++];
                powsum = (unsigned short)(powsum / 4.0);
                spectrumdbnumber = 0;
                while ((powsum >= spectrumdbtable[spectrumdbnumber]) && (spectrumdbnumber < 21))//通过查表求解db序号
                {
                    spectrumdbnumber++;
                }
                Spectrum_gLinePow[loop0] = (unsigned short)spectrumdbnumber;
            }

            for (;loop0 < SPECTRUM_LINE_M;loop0++)//3750Hz后的10谱线是以2个为一组取平均值算1根,间隔为187.5hz=93.75*2
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++];
                powsum = (unsigned short)(powsum / 2.0);
                spectrumdbnumber = 0;
                while ((powsum >= spectrumdbtable[spectrumdbnumber]) && (spectrumdbnumber < 21))//通过查表求解db序号
                {
                    spectrumdbnumber++;
                }
                Spectrum_gLinePow[loop0] = (unsigned short)spectrumdbnumber;
            }
            break;

        case 11025:
#if 0
            loop1 = 0 ;
            for (loop0 = 0; loop0 < SPECTRUM_LINE_M - 10; loop0++)//前面10根谱线能量取4根为一组原值,每组跨度344.5=4×86.2hz,频率范围为0hz-3445hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] +
                         SpectrumLineDBBuf[loop1++];
                Spectrum_gLinePow[loop0] = (unsigned short)((powsum / 4.0)  * (1.0 * SPECTRUM_DBLEVEL_N / SPECTRUM_DBLEVEL_46));
            }

            for (;loop0 < SPECTRUM_LINE_M;loop0++)//3445Hz后的10谱线是以2个为一组取平均值算1根,间隔为172.4hz=86.2*2
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++];
                Spectrum_gLinePow[loop0] = (unsigned short)((powsum / 2.0) * (1.0 * SPECTRUM_DBLEVEL_N / SPECTRUM_DBLEVEL_46));
            }
#endif
            loop1 = 0 ;
            for (loop0 = 0; loop0 < SPECTRUM_LINE_M - 10; loop0++)//前面10根谱线能量取4根为一组原值,每组跨度344.5=4×86.2hz,频率范围为0hz-3445hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] +
                         SpectrumLineDBBuf[loop1++];
                powsum = (unsigned short)(powsum / 4.0);
                spectrumdbnumber = 0;
                while ((powsum >= spectrumdbtable[spectrumdbnumber]) && (spectrumdbnumber < 21))//通过查表求解db序号
                {
                    spectrumdbnumber++;
                }
                Spectrum_gLinePow[loop0] = (unsigned short)spectrumdbnumber;
            }

            for (;loop0 < SPECTRUM_LINE_M;loop0++)//3445Hz后的10谱线是以2个为一组取平均值算1根,间隔为172.4hz=86.2*2
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++];
                powsum = (unsigned short)(powsum / 2.0);
                spectrumdbnumber = 0;
                while ((powsum >= spectrumdbtable[spectrumdbnumber]) && (spectrumdbnumber < 21))//通过查表求解db序号
                {
                    spectrumdbnumber++;
                }
                Spectrum_gLinePow[loop0] = (unsigned short)spectrumdbnumber;
            }
            break;

        case 8000:
#if 0
            loop1 = 0 ;
            for (loop0 = 0; loop0 < SPECTRUM_LINE_M - 10; loop0++)//前面10根谱线能量取4根为一组原值,每组跨度2500=4×625hz,频率范围为0hz-2500hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] +
                         SpectrumLineDBBuf[loop1++];
                Spectrum_gLinePow[loop0] = (unsigned short)((powsum / 4.0)  * (1.0 * SPECTRUM_DBLEVEL_N / SPECTRUM_DBLEVEL_46));
            }

            for (;loop0 < SPECTRUM_LINE_M;loop0++)//2500Hz后的10谱线是以2个为一组取平均值算1根,间隔为125hz=62.5*2
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++];
                Spectrum_gLinePow[loop0] = (unsigned short)((powsum / 2.0) * (1.0 * SPECTRUM_DBLEVEL_N / SPECTRUM_DBLEVEL_46));
            }
#endif
            loop1 = 0 ;
            for (loop0 = 0; loop0 < SPECTRUM_LINE_M - 10; loop0++)//前面10根谱线能量取4根为一组原值,每组跨度2500=4×625hz,频率范围为0hz-2500hz
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++] +
                         SpectrumLineDBBuf[loop1++];
                powsum = (unsigned short)(powsum / 4.0);
                spectrumdbnumber = 0;
                while ((powsum >= spectrumdbtable[spectrumdbnumber]) && (spectrumdbnumber < 21))//通过查表求解db序号
                {
                    spectrumdbnumber++;
                }
                Spectrum_gLinePow[loop0] = (unsigned short)spectrumdbnumber;
            }

            for (;loop0 < SPECTRUM_LINE_M;loop0++)//2500Hz后的10谱线是以2个为一组取平均值算1根,间隔为125hz=62.5*2
            {
                powsum = SpectrumLineDBBuf[loop1++] + SpectrumLineDBBuf[loop1++];
                powsum = (unsigned short)(powsum / 2.0);
                spectrumdbnumber = 0;
                while ((powsum >= spectrumdbtable[spectrumdbnumber]) && (spectrumdbnumber < 21))//通过查表求解db序号
                {
                    spectrumdbnumber++;
                }
                Spectrum_gLinePow[loop0] = (unsigned short)spectrumdbnumber;
            }
            break;
        default://samprate>48000&samplerate<8000

            break;
    }

}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -