# Snoring **Repository Path**: kpl0111/snoring ## Basic Information - **Project Name**: Snoring - **Description**: 使用SVM分类算法对鼾声进行识别 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2024-04-25 - **Last Updated**: 2025-05-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Snoring 使用SVM分类算法对鼾声进行识别 数据集采用[Snoring Data Set](https://www.kaggle.com/datasets/tareqkhanemu/snoring) 特征提取采用librosa中的Mel Spectrogram计算方法,C++版[LibrosaCpp实现](https://github.com/ewan-xu/LibrosaCpp) ### 数据集 数据集包含1000个样本,其中包含500个鼾声样本和500个非鼾声样本 ### 特征提取 使用librosa库中的Mel Spectrogram计算方法和短时傅里叶变换(Short-Time Fourier Transform)构造出35维特征向量进行训练 - 频率:对能量的取值进行分段,取其中的众数作为频率的估计值 - 平均响度: 1. 首先,你需要获取音频数据的每个样本值 2. 对每个样本值进行平方,得到其能量 3. 对所有样本的能量求平均值,然后取平方根,即为均方根(RMS)值 4. RMS值可以作为该段音频的平均声音响度的估计。 - 单次持续时间:单次鼾声持续时间 - 时域能量:在时域中,音频的能量可以通过信号的振幅平方来表示。对于每个时间窗口,将窗口内的每个样本的振幅平方求和,即可得到该时间窗口的能量值。这可以用来表示音频信号随时间的能量分布 - 短时傅里叶变换(Short-Time Fourier Transform) - 平均值、方差、最大值、最小值,前10维 - [梅尔频谱图](https://medium.com/analytics-vidhya/understanding-the-mel-spectrogram-fca2afa2ce53) - 平均值、方差、最大值、最小值,前5维 ### 分类算法 使用SVM分类算法,使用libsvm库实现,采用高斯径向基核函数 ### 训练结果 ![](https://picture-0111.oss-cn-beijing.aliyuncs.com/img/20240429125334.png) ### Accuracy log + 2024/5/31 + 交叉验证:67.1 + Gamma:0.056 + 惩罚因子C:1.198 + 数据集:500 + 自验证准确率:88.2% + ![](https://picture-0111.oss-cn-beijing.aliyuncs.com/img/20240531180316.png) + 6000数据集验证准确率:56.475% + ![](https://picture-0111.oss-cn-beijing.aliyuncs.com/img/20240531185811.png) + 特征设置: + MELS_NUM 20 + STFT_NUM 10 + ![](https://picture-0111.oss-cn-beijing.aliyuncs.com/img/20240531172640.png)