DSP大作业内容,做完之后Matlab可能要放一放,把自己一学期收获写下来,留待日后参考。
本设计主要依靠频谱分析和逻辑回归制造简单地二分类器.通过时域阈值将每一次敲击的声音截取,将其转换到频域,取40个500-1500Hz频率采样点作为训练样本,用Matlab中fminunc函数进行训练,得到传输函数Thera,用Thera去判断测试集中的声信号,从而对瓶子密封性做出检测,还有一个比较不错的GUI界面。
首先是对瓶子的声音信号进行截短分段,将每一次敲击的声音提取出来:

global sample_good;
global sample_bad;
global fs;
global theta;
[sounds_good,fs]=audioread('好瓶.wav');%read sound
[sounds_bad,fs]=audioread('坏瓶.wav');
a1=find(abs(sounds_good)>0.9);%find the louder sound
j=1;
for i=2:length(a1)if (a1(i)-a1(j)<1000)a1(i)=0;else j=i;end
end
j=1;
for i=1:length(a1)if(a1(i)~=0)b1(j)=a1(i);j=j+1;end
end
a2=find(abs(sounds_bad)>0.9);
j=1;
for i=2:length(a2)if (a2(i)-a2(j)<1000)a2(i)=0;else j=i;end
end
j=1;
for i=1:length(a2)if(a2(i)~=0)b2(j)=a2(i);j=j+1;end
end
sample_good=zeros((length(b1)-8),2048);%put eight good sample for test
sample_bad=zeros((length(b2)-2),2048);%put two bad samples for test
for i=1:(length(b1)-8)%cut the 2048 points around the louder points as samplesample_good(i,:)=(sounds_good((b1(i)-900):(b1(i)+1147)))';
end
for i=1:(length(b2)-2)sample_bad(i,:)=(sounds_bad((b2(i)-900):(b2(i)+1147)))';
end

然后将样本通过fft转换到频域并作归一化,取出约500-1500Hz的频率中40个点作为训练样本,样本频率点计算为:原音频采样频率fs=44100Hz,取2048点做fft,取出fft中第30个频率点为:

f=441002048∗30Hz

f = \dfrac{44100}{2048}*30 Hz

len1=size(sample_good,1);
len2=size(sample_bad,1);
X=zeros(len1+len2,40);
for i=1:len1X(i,:)=fft_normalization(sample_good(i,:));
end
for i=1:len2X(len1+i,:)=fft_normalization(sample_bad(i,:));
endfunction frequency=fft_normalization(time)%时域到频域转换+取645-1485
temp=abs(fft(time));
a1=max(temp);
temp=temp/a1;
frequency=temp(30:69);

将训练样本采到之后,直接调用Matlab的 optimset函数设置参数,调用fminunc函数生成传输函数Thera。以下生成过程数学证明见Courses公开课上机器学习的教学课程(详细), 逻辑回归模型简介:http://www.cnblogs.com/sparkwen/p/3441197.html?utm_source=tuicool&utm_medium=referral
Matlab逻辑回归简单使用:http://blog.sina.com.cn/s/blog_890c6aa301015mya.html

X=[ones(size(X,1),1) X];
size(X)
y=[ones(len1,1);zeros(len2,1)];
initial_theta = zeros(size(X, 2), 1);
lambda = 0;
options = optimset('GradObj', 'on', 'MaxIter', 300); %number of iteration set as 300
[theta, J, exit_flag] = fminunc(@(t)(costFunctionReg(t, X, y, lambda)), initial_theta, options);function [J, grad] = costFunctionReg(theta, X, y,lambda) %Regularization coefficient of cost function,
m = length(y);
theta1=theta;
theta1(1)=0;
J=((-y'*log(sigmoid(X*theta))-(1-y)'*log(1-sigmoid(X*theta)))/m)+((lambda*theta1'*theta1)/(2*m));
grad=(X'*(sigmoid(X*theta)-y)/m)+lambda*theta1/m;function g = sigmoid(z) %S function
g=1./(1+exp(-z));

传输函数Thera创造完成后,用之进行测试。像上述取训练样本同样方法得到测试样本,通过测试样本与传输函数的矩阵相乘,得到二分类的置信度p,通过对p大小的判断就可分辨出该瓶是好瓶还是坏瓶。

global test;
global theta;
test_fre=zeros(1,40);
test_fre=fft_normalization(test);%fft+sampling
fr=35:74;
fr=fr*44100/2048;
axes(handles.iuput);
stem(fr,test_fre,'.');
test_fre=[1;test_fre];
p=sigmoid(test_fre' * theta);%get the confidence interval
if(p>=0.5)set(handles.edit1,'String','好瓶')
elseset(handles.edit1,'String','坏瓶')
endset(handles.confidence_level,'String',p)

此程序代码为包含GUI设计代码,无法直接粘贴运行。完整工程文件见链接:wait!
GUI界面:

基于Matlab与Logistic Regression(逻辑回归)的瓶子密封性检测相关推荐

  1. Logistic Regression逻辑回归的损失函数与梯度下降训练

    有一篇博文提到logistic regression的简单理解(Logistic Regression逻辑回归的简单解释).逻辑回归实际上是odds取对数后的反函数,其函数形式也称为sigmoid f ...

  2. 【机器学习】Logistic Regression逻辑回归原理与java实现

    [机器学习]Logistic Regression逻辑回归原理与java实现 1.基于概率的机器学习算法 2.逻辑回归算法原理 2.1.分离超平面 2.2.阈值函数 2.3.样本概率 2.4.损失函数 ...

  3. 【李宏毅机器学习】Logistic Regression 逻辑回归(p11) 学习笔记

    李宏毅机器学习学习笔记汇总 课程链接 文章目录 Logistic Regression Step 1: Function Set Step 2: Goodness of a Function Step ...

  4. Logistic Regression 逻辑回归数学原理、python代码实现、实际应用

    说在前面 第一次写博客,主要目的是再梳理一下学到东西的逻辑,如果可以帮助到其他在学习的人就更好啦.本篇主要参考的:<机器学习>西瓜书.博主文章:文章链接.以及知乎.百度等大神们的解惑文章 ...

  5. Tensorflow【实战Google深度学习框架】—Logistic regression逻辑回归模型实例讲解

    文章目录 1.前言 2.程序详细讲解 环境设定 数据读取 准备好placeholder,开好容器来装数据 准备好参数/权重 拿到每个类别的score 计算多分类softmax的loss functio ...

  6. Logistic Regression逻辑回归

    参考自: http://blog.sina.com.cn/s/blog_74cf26810100ypzf.html http://blog.sina.com.cn/s/blog_64ecfc2f010 ...

  7. Logistic Regression逻辑回归的简单解释

    Logistic Regression也叫Logit Regression,在机器学习中属于参数估计的模型.逻辑回归与普通线性回归(Linear Regression)有很大的关系.在应用上,它们有所 ...

  8. Logistic Regression(逻辑回归) +python3.6(pycharm)实现

    数学基础知识略过,可自行查询探究. 遇到的bugs: 1.AttributeError: module 'scipy' has no attribute '__version__' 解决办法:inst ...

  9. 机器学习-非线性回归( Unlinear Regression) -逻辑回归(Logistic Regression)算法

    学习彭亮<深度学习基础介绍:机器学习>课程 概率 定义 概率(Probability): 对一件事情发生的可能性的衡量 范围 0 <= P <= 1 计算方法 根据个人置信 根 ...

  10. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 6_Logistic Regression 逻辑回归

    Lecture6 Logistic Regression 逻辑回归 6.1 分类问题 Classification 6.2 假设表示 Hypothesis Representation 6.3 决策边 ...

最新文章

  1. 哪些人适合学习软件测试
  2. 真正能解决 Windows 7下安装Office 2007—2010出现1402和1406类错误的方法
  3. Python-time标准库知识小结
  4. 根据IP地址获取主机名称
  5. 公众号向特定用户主动推送消息_公众号助手——消息不仅可以群发,还不限制次数!...
  6. SQLAlchemy 简单笔记
  7. JS判断相等或者不等于(==、===、!=、!==)运算符
  8. X86汇编语言从实模式到保护模式19:分页和动态页面分配
  9. c++ 队列_经典数据结构与算法(一):Python/C/C ++实现堆栈和队列
  10. oracle数据库操作文档,oracle数据库操作
  11. 枚举基类Enum详解
  12. 智慧交通前瞻:如何解决城市发展“心病”?
  13. Excel表格的基本操作,包含制作一个表格的全部知识
  14. C#.NET彩票数据分析
  15. 目标客户画像_4 种类型 + 10 大步骤,详解用户画像
  16. 英语四级考试在即,这几个超有用的App赶紧用起来,顺利考过四级
  17. 5分钟快速学会使用Swiper.js,实现轮播图各种效果!
  18. 沧海一声笑,移动应用的CRASH原因我找到! --记最新款数字化测试“星云测试“的使用攻略
  19. 015:苹果和虫子2
  20. Palabos用户手册翻译及学习(四)非本地操作的数据处理器和块之间的耦合

热门文章

  1. HEVC/H265编码原理
  2. vs2003 常见问题及处理
  3. Unity AI 之 行为树 的简单介绍
  4. SEGGER_RTT_printf()函数实现打印浮点、负数-示例
  5. 利用1stOpt进行方程拟合与参数优化
  6. 一个简单的三层架构之仓库管理系统的入库出库
  7. models.TABLE.objects.filter()与models.TABLE.objects.get()的区别
  8. 21天学习挑战赛——Python 操作Excel(xlrd和xlwt)
  9. 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)
  10. wso2 mysql_WSO2