123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- // 秒寻科技
- // 系统入口
- // 系统内存遵从谁申请谁负责释放的原则
- // zt
- // 2023-02-27
- #include "src/includes/includes.h"
- #include "src/sysdefine/sysmacro.h"
- // 导出所需的全局变量
- extern PUB_LOCATION_DATA_T gg_astLocationDataList[PUB_SYS_CARRIER_NUM]; // 定位数据队列
- // 系统入口函数
- int main()
- {
- // 初始化业务模块
- main_module_init();
- // 初始化IMU模块
- imu_init();
- // 测试业务逻辑
- if (PUB_DEBUG_ENABLE)
- {
- main_read_wav();
- // main_read_bin();
- }
- printf("wasm init ok\n");
- return 0;
- }
- // 初始化各模块
- void main_module_init()
- {
- // 业务模块初始化
- sysmain_init();
- return;
- }
- // 从wav文件中读取数据,驱动信号处理模块
- void main_read_wav()
- {
- // const char *pFileName = "E:\\work\\ips8000\\aplm8000sdk\\wave\\zcq(20251203-09).wav";
- // const char *pFileName = "E:\\work\\ips8000\\aplm8000sdk\\wave\\rec5-0-5(0245)-btsx.wav";
- const char *pFileName = "E:\\work\\ips8000\\aplm8000sdk\\wave\\zcq(20241217-03).wav";
- int16 *pwData = NULL; // 音频数据存储地址
- uint8 byIsOver = 0;
- uint16 wCounter = 0;
- // char *pFilePaht = "E:\\work\\ips8000\\aplm8000sdk\\output\\lctdata\\audioSourceFile.bin";
- pwData = (int16 *)dmdl_main_get_audio_sample_data();
- // 读取wave文件
- #pragma pack(push, 1) // 确保结构体按照字节对齐
- typedef struct
- {
- char chunkID[4];
- int chunkSize;
- char format[4];
- char subchunk1ID[4];
- int subchunk1Size;
- short audioFormat;
- short numChannels;
- int sampleRate;
- int byteRate;
- short blockAlign;
- short bitsPerSample;
- char subchunk2ID[4];
- int subchunk2Size;
- } WaveHeader;
- #pragma pack(pop) // 恢复默认的对齐方式
- FILE *file = fopen(pFileName, "rb");
- if (file == NULL)
- {
- perror("Error opening file");
- return;
- }
- WaveHeader header;
- if (fread(&header, sizeof(WaveHeader), 1, file) != 1)
- {
- perror("Error reading header");
- fclose(file);
- return;
- }
- int bytesPerSample = header.bitsPerSample / 8;
- int totalSamples = header.subchunk2Size / bytesPerSample;
- int samplesToRead = 12000;
- int bytesRead = 0;
- while (bytesRead < totalSamples)
- {
- int remainingSamples = totalSamples - bytesRead;
- int samplesToReadNow = (remainingSamples >= samplesToRead) ? samplesToRead : remainingSamples;
- memset(pwData, 0, sizeof(int16) * PUB_SLOT_FRAME_LEN);
- int actualRead = (int)fread(pwData, bytesPerSample, samplesToReadNow, file);
- if (actualRead != samplesToReadNow)
- {
- if (feof(file))
- {
- printf("total %d frame\n", wCounter);
- byIsOver = 1;
- break;
- }
- else
- {
- byIsOver = 1;
- perror("Error reading samples");
- fclose(file);
- return;
- }
- }
- // wCounter++;
- // if (wCounter >= 136 && wCounter <= 180)
- // {
- // util_write_flt32_to_bin_file(pFilePaht, PUB_SLOT_FRAME_LEN, pfData);
- // dmdl_main(gg_astLocationDataList);
- // }
- // 读文件结束或者数据长度不够一帧
- if (!byIsOver || actualRead != PUB_SLOT_FRAME_LEN)
- {
- // 信号处理
- sysmain_audio_signal_process();
- }
- bytesRead += actualRead;
- }
- return;
- }
- void main_read_bin()
- {
- uint8 byFlag = 1;
- char *pFilePaht = "E:\\work\\ips8000\\aplm8000sdk\\wave\\IPS8000.bin";
- int16 *pwData = NULL; // 音频数据存储地址
- uint16 wReadTimes = 0;
- pwData = (int16 *)dmdl_main_get_audio_sample_data();
- while (byFlag)
- {
- memset(pwData, 0, sizeof(int16) * PUB_SLOT_FRAME_LEN);
- byFlag = util_file_read_int16_from_bin_file(pFilePaht, wReadTimes, PUB_SLOT_FRAME_LEN, pwData);
- if (!byFlag)
- {
- printf("is over\n");
- break;
- }
- sysmain_audio_signal_process();
- wReadTimes++;
- }
- }
- // 测试矩阵求逆
- void main_test_matrix()
- {
- flt32 afM1[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
- flt32 afM2[16] = {0};
- uint8 bySize = 4;
- matrix_inversion(afM1, afM2, bySize);
- matrix_print(afM1, 4, 4);
- matrix_print(afM2, 4, 4);
- }
- // 测试fft变换
- void main_test_fft()
- {
- flt32 afRealDataList[8] = {-0.0000001, -0.0000002, -0.0000003, -0.0000004, 0.0000001, 0.0000002, 0.0000003, 0.0000004};
- flt32 afImagDataList[8] = {0};
- uint16 awButterFlyList[8] = {0};
- // 生成蝴蝶因子
- util_fft_init_butterfly_table(8, (short *)awButterFlyList);
- util_fft_fft(8, afRealDataList, afImagDataList, (short *)awButterFlyList);
- util_fft_ifft(8, afRealDataList, afImagDataList, (short *)awButterFlyList);
- }
|