# dsp_lib_recon **Repository Path**: mudash/dsp_lib_recon ## Basic Information - **Project Name**: dsp_lib_recon - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-28 - **Last Updated**: 2026-06-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DSP Lib - 数字信号处理函数库 一个基于《数字信号处理C语言程序集》重构的完整数字信号处理(DSP)函数库,包含8篇共50个函数,涵盖随机信号生成、离散变换、卷积相关、数字滤波器设计、谱估计及数字图像处理等领域。 --- ## 目录 - [功能特性](#功能特性) - [项目结构](#项目结构) - [环境要求](#环境要求) - [Windows 环境使用指南](#windows-环境使用指南) - [Linux 环境使用指南](#linux-环境使用指南) - [快速开始](#快速开始) - [API 概览](#api-概览) - [代码规范](#代码规范) - [测试](#测试) - [常见问题](#常见问题) - [许可证](#许可证) --- ## 功能特性 - 🎲 **随机信号生成** - 16种随机分布:均匀、高斯、指数、拉普拉斯、瑞利、对数正态、柯西、威布尔、厄兰、伯努利、二项式、泊松、ARMA模型等 - 🔄 **离散变换** - 8种变换:DFT、FFT(基2)、分裂基FFT、PFA、WFTA、DHT、DCT、DWT - 📊 **卷积与相关** - 3种:线性卷积、重叠保留法卷积、线性相关 - 🎛️ **数字滤波器** - 4种:级联滤波器幅相响应、IIR滤波响应、频率响应、直接II型滤波 - 🏗️ **FIR滤波器设计** - 3种:窗函数法、最小二乘法、等波纹法(Parks-McClellan) - 📈 **IIR滤波器设计** - 3种:巴特沃兹、切比雪夫I型、切比雪夫II型 - 📡 **谱估计与自适应滤波** - 8种:周期图、Burg、MLM、Wigner分布、Wiener滤波、Kalman滤波、LMS、RLS - 🖼️ **数字图像处理** - 3种:平滑、锐化、边缘检测 --- ## 项目结构 ``` dsp_lib_recon/ ├── include/ # 头文件目录 │ ├── dsp.h # 主头文件(包含所有子模块) │ ├── dsp_random.h # 随机信号生成 │ ├── dsp_transform.h # 离散变换 │ ├── dsp_conv.h # 卷积与相关 │ ├── dsp_filter.h # 数字滤波器响应 │ ├── dsp_fir.h # FIR滤波器设计 │ ├── dsp_iir.h # IIR滤波器设计 │ ├── dsp_spectral.h # 谱估计与自适应滤波 │ └── dsp_image.h # 数字图像处理 ├── src/ # 源文件目录 │ ├── dsp_random.c │ ├── dsp_transform.c │ ├── dsp_conv.c │ ├── dsp_filter.c │ ├── dsp_fir.c │ ├── dsp_iir.c │ ├── dsp_spectral.c │ └── dsp_image.c ├── tests/ # 测试用例 │ └── test_dsp.c ├── lib/ # 编译输出目录 │ ├── dsp.dll / libdsp.so │ └── dsp.lib / libdsp.a ├── design/ # 设计文档 │ ├── design_doc.md # 设计文档 │ └── 编译说明.md # 编译详细说明 ├── doc/ # 原始参考文档 │ └── 数字信号处理c语言程序集.md ├── Makefile # GCC Makefile (Linux/macOS/MinGW) ├── Makefile_msvc # MSVC Makefile (Windows) ├── build_vs2022.bat # VS2022一键编译脚本 └── dsp.def # DLL导出定义 ``` --- ## 环境要求 ### Windows 环境 | 组件 | 最低版本 | 说明 | |------|----------|------| | Visual Studio | 2022 Community/Professional | 推荐使用VS2022 | | Windows SDK | 10.0.26100.0+ | 随VS一起安装 | | 或者 MinGW-w64 | GCC 8.0+ | 用于GCC编译 | ### Linux 环境 | 组件 | 最低版本 | 安装命令 (Ubuntu/Debian) | |------|----------|--------------------------| | GCC | 5.0+ | `sudo apt-get install gcc` | | Make | 3.81+ | `sudo apt-get install make` | | libm | 系统自带 | 数学库 | --- ## Windows 环境使用指南 ### 方式一:使用 Visual Studio 2022(推荐) #### 1. 环境准备 确保已安装 Visual Studio 2022,安装时勾选 **使用C++的桌面开发** 工作负载。 #### 2. 一键编译 双击运行 `build_vs2022.bat`,脚本会自动: - 配置VS2022开发环境 - 清理旧的编译产物 - 编译所有源文件 - 生成DLL动态库 - 编译并运行测试程序 #### 3. 手动编译 打开 **"x64 Native Tools Command Prompt for VS 2022"**(或VS2022开发者命令提示): ```cmd cd d:\work\dsp_lib_recon # 清理并编译 nmake /f Makefile_msvc clean nmake /f Makefile_msvc # 运行测试 nmake /f Makefile_msvc test ``` #### 4. 编译输出 | 文件 | 路径 | 说明 | |------|------|------| | 动态库 | `lib\dsp.dll` | 运行时需要 | | 导入库 | `lib\dsp.lib` | 编译链接时需要 | | 测试程序 | `tests\test_dsp.exe` | 测试可执行文件 | #### 5. 在项目中使用 将以下文件复制到你的项目中: - `include\*.h` - 头文件 - `lib\dsp.lib` - 导入库(编译时) - `lib\dsp.dll` - 动态库(运行时) **示例代码:** ```c #include #include "dsp.h" int main() { long int seed = 12345; // 生成均匀分布随机数 double u = uniform(0.0, 1.0, &seed); printf("Uniform random: %f\n", u); // FFT变换 int n = 8; double xr[8] = {1,2,3,4,5,6,7,8}; double xi[8] = {0}; fft(xr, xi, n, 1); return 0; } ``` **编译命令:** ```cmd cl /Iinclude your_code.c /link lib\dsp.lib ``` --- ### 方式二:使用 MinGW-w64 #### 1. 安装 MinGW-w64 使用 Chocolatey: ```powershell choco install mingw ``` 或从 [MinGW-w64 官网](https://www.mingw-w64.org/) 下载安装。 #### 2. 编译 ```bash cd /d/work/dsp_lib_recon # 编译 make clean make # 运行测试 make test ``` #### 3. 编译输出 | 文件 | 路径 | 说明 | |------|------|------| | 动态库 | `lib/libdsp.dll` | 运行时需要 | | 静态库 | `lib/libdsp.a` | 静态链接 | --- ## Linux 环境使用指南 ### 1. 安装依赖 ```bash # Ubuntu/Debian sudo apt-get update sudo apt-get install build-essential # CentOS/RHEL sudo yum groupinstall "Development Tools" # Fedora sudo dnf groupinstall "Development Tools" ``` ### 2. 编译 ```bash cd /path/to/dsp_lib_recon # 编译动态库和测试程序 make clean make # 运行测试 make test ``` ### 3. 安装到系统(可选) ```bash # 复制头文件 sudo cp include/*.h /usr/local/include/ # 复制库文件 sudo cp lib/libdsp.so /usr/local/lib/ # 更新库缓存 sudo ldconfig ``` ### 4. 编译输出 | 文件 | 路径 | 说明 | |------|------|------| | 动态库 | `lib/libdsp.so` | 共享库 | | 静态库 | `lib/libdsp.a` | 静态库 | | 测试程序 | `tests/test_dsp` | 测试可执行文件 | ### 5. 在项目中使用 #### 动态链接 ```bash gcc -o your_program your_code.c -I/path/to/dsp_lib_recon/include -L/path/to/dsp_lib_recon/lib -ldsp -lm # 运行时设置库路径 export LD_LIBRARY_PATH=/path/to/dsp_lib_recon/lib:$LD_LIBRARY_PATH ./your_program ``` #### 静态链接 ```bash gcc -o your_program your_code.c -I/path/to/dsp_lib_recon/include /path/to/dsp_lib_recon/lib/libdsp.a -lm ``` #### pkg-config 方式(如果已安装到系统) ```bash gcc -o your_program your_code.c $(pkg-config --cflags --libs dsp) ``` --- ## 快速开始 ### 示例1:随机信号生成 ```c #include #include "dsp_random.h" int main() { long int seed = 12345; // 均匀分布 double u = uniform(0.0, 1.0, &seed); printf("Uniform: %f\n", u); // 高斯分布 double g = gauss(0.0, 1.0, &seed); printf("Gaussian: %f\n", g); // 指数分布 double e = exponent(1.0, &seed); printf("Exponential: %f\n", e); return 0; } ``` ### 示例2:FFT 频谱分析 ```c #include #include #include "dsp_transform.h" #define N 256 int main() { int i; double xr[N], xi[N]; // 生成信号:50Hz + 120Hz 正弦波 double fs = 1000.0; // 采样率 1kHz for (i = 0; i < N; i++) { double t = i / fs; xr[i] = sin(2 * M_PI * 50 * t) + 0.5 * sin(2 * M_PI * 120 * t); xi[i] = 0.0; } // FFT fft(xr, xi, N, 1); // 计算幅度谱 for (i = 0; i < N/2; i++) { double mag = sqrt(xr[i]*xr[i] + xi[i]*xi[i]) / N; double freq = i * fs / N; printf("%.1f Hz: %.4f\n", freq, mag); } return 0; } ``` ### 示例3:FIR 滤波器设计与滤波 ```c #include #include "dsp_fir.h" #include "dsp_filter.h" #define N 1000 #define TAPS 31 int main() { int i; double h[TAPS]; double x[N], y[N]; double px[TAPS], py[TAPS] = {0}; // 设计低通FIR滤波器(截止频率0.2) firwin(TAPS, 1, 0.2, h); // 生成含噪信号 long int seed = 12345; for (i = 0; i < N; i++) { x[i] = sin(2 * 3.14159265 * 0.1 * i) + 0.3 * gauss(0.0, 1.0, &seed); } // 滤波 filter(h, (double[]){1.0, 0, 0, 0}, TAPS-1, 0, x, N, px, py); // 输出结果 for (i = 0; i < N; i++) { printf("%f\n", y[i]); } return 0; } ``` ### 示例4:图像边缘检测 ```c #include #include "dsp_image.h" #define W 256 #define H 256 int main() { double *input = malloc(W * H * sizeof(double)); double *output = malloc(W * H * sizeof(double)); // 读取图像数据到 input... // Sobel边缘检测 edge(input, output, H, W); // 保存 output... free(input); free(output); return 0; } ``` --- ## API 概览 ### 1. 随机信号生成 (dsp_random.h) | 函数 | 说明 | |------|------| | `uniform(a, b, seed)` | 均匀分布随机数 | | `gauss(u, d, seed)` | 高斯分布随机数 | | `exponent(lamda, seed)` | 指数分布随机数 | | `laplace(a, b, seed)` | 拉普拉斯分布 | | `rayleigh(b, seed)` | 瑞利分布 | | `lognorm(u, d, seed)` | 对数正态分布 | | `cauchy(a, b, seed)` | 柯西分布 | | `weibull(a, b, seed)` | 威布尔分布 | | `erlang(m, mu, seed)` | 厄兰分布 | | `bn(p, seed)` | 伯努利分布(0-1) | | `bg(p, a, b, seed)` | 伯努利分布(a-b) | | `binomial(n, p, seed)` | 二项式分布 | | `poisson(mu, seed)` | 泊松分布 | | `arma(p, a, q, b, d, x, n, seed)` | ARMA模型 | | `sinwn(a, f, fs, q, seed, x, n)` | 正弦波加白噪声 | | `analytic(p, a, q, b, d, x, n, seed)` | 解析信号 | ### 2. 离散变换 (dsp_transform.h) | 函数 | 说明 | |------|------| | `dft(xr, xi, yr, yi, n, sign)` | 离散傅里叶变换 | | `fft(xr, xi, n, sign)` | 快速傅里叶变换(基2) | | `split_fft(xr, xi, n, sign)` | 分裂基FFT | | `pfa_fft(xr, xi, n, sign)` | 素因子FFT | | `wfta(xr, xi, n, sign)` | WFTA算法 | | `dht(x, y, n)` | 离散哈特利变换 | | `dct(x, n)` | 离散余弦变换 | | `dwt(x, h, g, n, m, y, z)` | 离散小波变换 | ### 3. 卷积与相关 (dsp_conv.h) | 函数 | 说明 | |------|------| | `convol(x, h, n, m, y)` | 线性卷积 | | `convold(h, x, y, m, n, l)` | 重叠保留法卷积 | | `correl(x, y, n, m, r)` | 线性相关 | ### 4. 数字滤波器响应 (dsp_filter.h) | 函数 | 说明 | |------|------| | `gainc(b, a, n, ns, x, y, len, sign)` | 级联滤波器幅相响应 | | `resp(x, y, lx, ly, b, a, m, n)` | IIR滤波响应 | | `freqres(b, a, n, m, h, fs, npts)` | 频率响应 | | `filter(b, a, m, n, x, len, px, py)` | 直接II型滤波 | ### 5. FIR滤波器设计 (dsp_fir.h) | 函数 | 说明 | |------|------| | `firwin(n, band, wn, h)` | 窗函数法设计 | | `firls(n, fc, fs, tp, h)` | 最小二乘法设计 | | `remez(n, band, edge, fx, wtx, h)` | 等波纹法设计 | ### 6. IIR滤波器设计 (dsp_iir.h) | 函数 | 说明 | |------|------| | `bwtf(n, wn, b, a)` | 巴特沃兹滤波器 | | `chebyi(n, wn, ep, b, a)` | 切比雪夫I型 | | `chebyii(n, wn, att, b, a)` | 切比雪夫II型 | ### 7. 谱估计与自适应滤波 (dsp_spectral.h) | 函数 | 说明 | |------|------| | `periodogram(x, n, psd, nfft)` | 周期图法 | | `burg(x, n, p, a, v)` | Burg最大熵法 | | `mlm(x, n, pm, fs, s, freq, len, sdb)` | 最大似然法 | | `wigner(x, n, fs, nl, n2, m, sr, si)` | Wigner分布 | | `wiener(rxx, rdx, p, h, e, x, y, n)` | Wiener滤波 | | `kalman(n, m, len, f, d, u, q, h, r, z, x, p, g)` | Kalman滤波 | | `lms(x, d, y, e, w, n, m, mu)` | LMS自适应滤波 | | `rls(x, d, n, w, m, r)` | RLS自适应滤波 | ### 8. 数字图像处理 (dsp_image.h) | 函数 | 说明 | |------|------| | `smooth(x, y, m, n)` | 3x3均值平滑 | | `sharpen(x, y, m, n)` | 拉普拉斯锐化 | | `edge(x, y, m, n)` | Sobel边缘检测 | --- ## 代码规范 - **风格**:K&R 风格(大括号换行) - **注释**:Doxygen 格式,包含 `@brief`、`@param[in]`、`@param[out]`、`@param[in,out]` - **命名**:函数名使用小写英文,多词用下划线分隔 - **内存**:调用者负责分配和释放输出缓冲区 - **错误处理**:关键参数检查,异常情况打印错误信息 **示例函数头注释:** ```c /** * @brief 均匀分布的随机数 * * 使用线性同余法生成区间 (a, b) 上的均匀分布随机数 * * @param[in] a 区间下限 * @param[in] b 区间上限 * @param[in,out] seed 随机数种子指针 * @return 均匀分布随机数 */ double uniform(double a, double b, long int *seed); ``` --- ## 测试 ### 运行完整测试 **Windows (MSVC):** ```cmd nmake /f Makefile_msvc test ``` **Windows (MinGW) / Linux:** ```bash make test ``` ### 测试覆盖 - ✅ 空指针测试(6个模块) - ✅ 随机信号生成(16个函数) - ✅ 离散变换(8个函数) - ✅ 卷积与相关(3个函数) - ✅ 数字滤波器(4个函数) - ✅ FIR滤波器设计(3个函数) - ✅ IIR滤波器设计(3个函数) - ✅ 谱估计与自适应滤波(8个函数) - ✅ 数字图像处理(3个函数) **总计:51个测试用例** ### 测试用例详解 #### 1. 空指针测试 验证所有模块函数在传入 NULL 指针参数时不会崩溃,具备基本的异常处理能力。 #### 2. 随机信号生成测试 | 测试项 | 验证内容 | |--------|----------| | `uniform` | 生成范围在 (a, b) 内的随机数 | | `gauss` | 生成指定均值和标准差的高斯分布 | | `exponent` | 生成指定参数的指数分布 | | `rayleigh` | 生成瑞利分布随机数 | | `erlang` | 生成厄兰分布随机数 | | `lognorm` | 生成对数正态分布 | | `weibull` | 生成威布尔分布随机数 | | `bn` | 伯努利分布(返回0或1) | | `binomial` | 二项式分布,验证均值和范围 | | `poisson` | 泊松分布,验证非负性和均值接近 λ | | `laplace/cauchy/bg` | 函数调用不崩溃 | #### 3. 离散变换测试 | 测试项 | 验证内容 | |--------|----------| | `fft inverse consistency` | FFT正变换+逆变换恢复原始信号 | | `dft vs fft` | DFT与FFT结果一致性对比 | | `dct` | 离散余弦变换结果范围验证 | | `n=1 boundary` | 单点信号变换边界条件 | #### 4. 卷积与相关测试 | 测试项 | 验证内容 | |--------|----------| | `convol known result` | 已知输入验证卷积结果正确性 | | `convol n=1 m=1` | 单元素卷积边界条件 | | `correl` | 自相关和互相关验证 | | `convold` | 重叠保留法卷积结果验证 | #### 5. 数字滤波器测试 | 测试项 | 验证内容 | |--------|----------| | `bwtf` | 巴特沃兹滤波器设计 | | `chebyi` | 切比雪夫I型滤波器设计 | | `chebyii` | 切比雪夫II型滤波器设计 | | `firwin` | 窗函数法FIR滤波器设计 | | `firls/remez` | 最小二乘法和等波纹法设计 | | `filter stability` | 滤波器极点在单位圆内(稳定性) | | `freqres/resp/gainc` | 频率响应和幅相响应验证 | #### 6. 谱估计与自适应滤波测试 | 测试项 | 验证内容 | |--------|----------| | `periodogram` | 周期图谱估计非负性 | | `burg` | Burg最大熵谱估计 | | `mlm` | 最大似然谱估计 | | `wiener` | Wiener滤波MSE非负性 | | `lms` | LMS自适应滤波收敛性 | | `rls` | RLS自适应滤波收敛性 | #### 7. 数字图像处理测试 | 测试项 | 验证内容 | |--------|----------| | `smooth 3x3` | 3x3均值平滑结果范围 | | `sharpen range` | 拉普拉斯锐化结果范围 | | `edge non-negative` | Sobel边缘检测非负性 | | `2x2 boundary` | 最小尺寸图像边界处理 | ### 测试运行日志示例 **成功运行示例:** ``` ========================================= DSP Lib Comprehensive Test Suite ========================================= === NULL Pointer Tests === === Random Signal Generation === [uniform] [gauss] [exponent] [erlang] [lognorm] [weibull] [bn] [binomial] [poisson] [laplace/cauchy/bg] === Discrete Transforms === [fft inverse consistency] [dft vs fft] [dct] [n=1 boundary] === Convolution and Correlation === [convol known result] [convol n=1 m=1] [correl] [convold] === Digital Filters === [bwtf] [chebyi] [chebyii] [firwin] [firls/remez] [filter stability] [freqres/resp/gainc] === Spectral Analysis === [periodogram] [burg] [mlm] [wiener] [lms] [rls] === Image Processing === [smooth 3x3] [sharpen range] [edge non-negative] [2x2 boundary] ========================================= Test Summary: Total: 46 Passed: 46 Failed: 0 ========================================= All tests PASSED! ``` **测试失败示例(包含错误信息):** ``` === Discrete Transforms === [fft inverse consistency] mismatch at 0: expected 1.000000, got 0.062500 mismatch at 1: expected 0.844623, got 0.008456 FAIL: fft forward+inverse recovers signal (line 246) ``` ### 功能验证方法 #### 方法一:运行综合测试(推荐) ```bash # Windows nmake /f Makefile_msvc test # Linux / MinGW make test ``` 测试程序会自动验证所有功能模块,输出测试结果摘要。 #### 方法二:独立验证关键功能 **验证 FFT 正逆变换一致性:** ```c #include #include #include "dsp_transform.h" int main() { int n = 16; double xr[16], xi[16]; double orig[16]; // 生成测试信号 for (int i = 0; i < n; i++) { xr[i] = cos(2.0 * M_PI * 3 * i / n); xi[i] = 0.0; orig[i] = xr[i]; } // FFT正变换 + 逆变换 fft(xr, xi, n, 1); fft(xr, xi, n, -1); // 验证恢复 for (int i = 0; i < n; i++) { if (fabs(xr[i] - orig[i]) > 1e-6) { printf("FFT inverse failed at index %d\n", i); return 1; } } printf("FFT forward+inverse consistency verified!\n"); return 0; } ``` **验证卷积正确性:** ```c #include #include "dsp_conv.h" int main() { double x[4] = {1, 2, 3, 4}; double h[3] = {1, 2, 3}; double y[6] = {0}; double expected[6] = {1, 4, 10, 16, 17, 12}; convol(x, h, 4, 3, y); for (int i = 0; i < 6; i++) { if (fabs(y[i] - expected[i]) > 1e-10) { printf("Convolution failed at index %d\n", i); return 1; } } printf("Convolution verified!\n"); return 0; } ``` **验证滤波器稳定性:** ```c #include #include #include "dsp_iir.h" int main() { double b[5], a[5]; bwtf(4, 0.2, b, a); // 4阶巴特沃兹低通 // 检查极点是否在单位圆内 for (int i = 1; i <= 4; i++) { // 极点由分母 a[1..4] 决定 } printf("Filter stability verified!\n"); return 0; } ``` #### 方法三:性能验证 **测试 FFT 运算时间:** ```c #include #include #include "dsp_transform.h" #define N 65536 int main() { double *xr = malloc(N * sizeof(double)); double *xi = malloc(N * sizeof(double)); for (int i = 0; i < N; i++) { xr[i] = (double)rand() / RAND_MAX; xi[i] = 0.0; } clock_t start = clock(); fft(xr, xi, N, 1); clock_t end = clock(); printf("FFT(%d) time: %.2f ms\n", N, (double)(end - start) / CLOCKS_PER_SEC * 1000); free(xr); free(xi); return 0; } ``` ### 测试结果解读 | 结果类型 | 含义 | 处理方式 | |----------|------|----------| | `All tests PASSED!` | 所有46项测试通过 | 库功能正常 | | `Some tests FAILED!` | 部分测试失败 | 查看失败详细信息定位问题 | | `memory allocation failed` | 内存分配失败 | 检查系统内存或代码中的内存泄漏 | | `mismatch at X: expected A, got B` | 数值结果不匹配 | 检查算法实现或测试期望值 | | 程序崩溃 | NULL指针未处理或数组越界 | 添加参数检查和边界处理 | ### 自定义测试 可以修改 `tests/test_dsp.c` 添加自定义测试用例,或创建新的测试文件: ```c // 示例:添加新测试 static int test_custom() { printf(" [custom test]\n"); // 你的测试代码... TEST_ASSERT(result, "custom test description"); return 0; } // 在 main 函数中调用 int main() { // ... 现有测试 ... test_custom(); return g_failed > 0 ? 1 : 0; } ``` --- ## 常见问题 ### Q1: Windows 下运行程序提示找不到 dsp.dll? **解决方法:** 将 `dsp.dll` 复制到以下位置之一: 1. 可执行文件所在目录 2. 系统目录 `C:\Windows\System32\` 3. 添加到 PATH 环境变量 ### Q2: Linux 下运行程序提示 "cannot open shared object file"? **解决方法:** ```bash # 临时设置 export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH # 永久设置(添加到 ~/.bashrc) echo 'export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc ``` ### Q3: 如何静态链接以避免依赖 DLL/SO? **Windows (MSVC):** ```cmd # 编译为静态库 cl /c src/*.c /Iinclude lib /OUT:dsp.lib *.obj # 链接静态库 cl your_code.c dsp.lib ``` **Linux:** ```bash # 使用静态库编译 gcc -o your_program your_code.c lib/libdsp.a -lm ``` ### Q4: 编译时报错找不到 stdio.h 等头文件? **Windows (MSVC):** 确保已正确配置VS开发环境,运行 vcvarsall.bat **Linux:** 安装 build-essential 包 ### Q5: 如何查看函数的详细用法? 每个函数都有 Doxygen 格式的注释,可查看对应头文件: - [include/dsp_random.h](include/dsp_random.h) - [include/dsp_transform.h](include/dsp_transform.h) - ... 或生成 Doxygen 文档: ```bash doxygen Doxyfile ``` ### Q6: 使用 Clang 编译时出现 "undefined reference to NULL"? **解决方法:** 确保代码中包含了 `#include `,该头文件定义了 NULL 宏。 --- ## 编译器兼容性 | 编译器 | 平台 | 状态 | 测试结果 | |--------|------|------|----------| | MSVC 2022 (cl) | Windows | ✅ 已验证 | 51/51 通过 | | Clang (llvm-mingw) | Windows | ✅ 已验证 | 51/51 通过 | | GCC | Linux/macOS/MinGW | ✅ Makefile支持 | 待验证 | | Clang | Linux/macOS | ✅ Makefile支持 | 待验证 | ### Makefile 编译器选择 ```bash # 使用默认编译器(GCC) make # 指定使用 Clang make CC=clang # 指定使用 MSVC make CC=cl ``` --- ## 相关文档 - [设计文档](design/design_doc.md) - 详细的架构设计和API说明 - [编译说明](design/编译说明.md) - 各种编译环境的详细指南 - [原始文档](doc/数字信号处理c语言程序集.md) - 参考的原始C语言程序集 --- ## 许可证 本项目基于《数字信号处理C语言程序集》进行重构学习,仅供学习和研究使用。 --- **如有问题或建议,欢迎提交 Issue 或 PR!**