matlab仿真
半截木头渡海洋
高出着眼,低处着手
展开
-
matlab 中常用的日期格式转换
获取当前日期datetime('today')ans = % 返回答案是datetime格式的字符串,可以直接用datenum转换 datetime 2020-12-06字符串变数字str2num('19910203')ans = 19910203数字变字符串num2str(19910203)ans = '19910203'字符串变系统日期datenum('19910203','.原创 2020-12-06 12:39:52 · 10862 阅读 · 0 评论 -
将cell中的日期数据填到plot坐标轴中
有以下数据格式,日期数据以子cell的方式存放在date的cell中,为处理数据方便起见,将数据转成char格式,然后利用matlab的日期函数对数据进行管理。data = datenum(cell2mat(df_daily.trade_date),'yyyymmdd');plot(data,y)datetick('x', 26); ...原创 2020-08-02 11:32:44 · 569 阅读 · 0 评论 -
matlab UI 组件
详细信息见 doc Components and layout原创 2020-05-24 18:18:17 · 785 阅读 · 0 评论 -
一个简单的MVC模式的 matlab GUI 面向对象编程范例
主程序clcclear close allmodelObj = Model(500);viewObj = View(modelObj);M(model)类classdef Model < handle properties balance end events balanceChanged end methods function obj = Model(balance原创 2020-05-22 22:18:59 · 1000 阅读 · 0 评论 -
一个简单的 matlab GUI 编程范例
主函数,负责界面的设置clcclearclose allinput = 0;balance = 500;hfig = figure('pos',[100,100,300,300]);withdrawButton = uicontrol('parent',hfig,'string','withdraw','pos',[60,28,60,28]);depositButton = uicontrol('parent',hfig,'string','deposit','pos',[180,原创 2020-05-22 21:19:16 · 1569 阅读 · 0 评论 -
matlab 实时录音
clcclear allclose allH = dsp.AudioRecorder;recorderData = zeros(1024,1);for iloop1 = 1:100 recorderData(:,iloop1) = mean(step(H),2);endplot(reshape(recorderData,1,[]));audiowrite('re...原创 2019-12-09 04:19:03 · 2432 阅读 · 4 评论 -
几个基本的matlab指令
统计命令mean 均值var 有限次测量数据的标准偏差的估计值std 标准差(std)^2 均方差std2() 均方差median 中值随机排序randpermrandsample使用 %{ %} 添加可折叠注释在调试时停在出错点 :dbstop if error联立两个坐标轴 linkaxes()合并初始化 deal()实现三目运算符运算 a...原创 2018-10-23 15:42:00 · 1900 阅读 · 0 评论 -
通过放置零极点设计滤波器
用取Z变换在单位圆上界面就是傅里叶变换的思想,通过放置零极点位置设计滤波器。传输函数0Hz位置的放大倍数通过zp2tf的第三个参数k设置,对应增益20*log10(k)。我在验证的过程中发现bode指令绘制波特图时候是针对的H(jw)频率特性方程的,通常用来计算由微分方程变换而来的的传输函数的幅频特性,如电路传输方程的写法Ls、 1/Cs 、R等,其中s = δ + jw,δ = 0时即傅里叶...原创 2018-10-26 15:37:53 · 8097 阅读 · 3 评论 -
利用SVM实现噪声分类
通过支持向量机实现对噪声的分类,提升语音增强以及VAD的效果。当样例是以输入/输出对的形式给出时,学习方法称为有监督学习。当样例仅以输入的形式给出,而没有输出结果时候,成为无监督学习,包括密度估计、分布类型学习、聚类等领域的学习。另外还有查询学习、强化学习等。按照学习的过程来分,还可以分为批量学习、线性学习等。按照输出结果的不同,分类问题被分为二类问题、多类问题、回归问题。支持...原创 2019-01-29 11:01:00 · 4115 阅读 · 45 评论 -
线性规划问题的目标函数灵敏度分析
某工厂生产A\B\C三种型号的产品,三种型号产品收益分别为2、1、3元,其生产受下列条件限制:人工<=1,材料<=3,每种产品的人工消耗分别为1/3、1/3、1/3;每种产品的用料消耗分别为1/3、4/3、7/3,试决定该生产的最优方案。按照单纯形法,计算如下:clcclear allclose allsyms x1 x2 x3 y1 y2 y3 y4 y5; %...原创 2019-02-16 14:35:26 · 9912 阅读 · 0 评论 -
单纯形法求解线性规划问题
1、生产组织与计划问题某电视机厂生产I、II、III型号的电视机,按照市场需求,三种型号的电视机每天产量最少为200、250、100,该厂每天可以利用的总工时为1000个时间单位(小时),可利用的材料每天有2000个单位,每个产品工时消耗为2、1.2、1,原材料消耗为1、1.5、4,每台电视产生的利润分别为10、14、12,问每种型号的产量如何调配能够使工厂的利润获得最大化?2、解答2...原创 2019-02-12 02:04:46 · 21692 阅读 · 4 评论 -
一维搜索求解无约束最优化问题
拉格朗日乘子法的目的就是将有等式约束极值问题转化为无约束非线性优化问题,通常这种无约束极值问题我们称之为经典极值问题。这类问题通常有参数拟合(包括阵列中的MVDR最优系数加权系数)、选址问题等。可行域内极值点称为全局最优解,邻域内极值点称为局部最优解。一阶导数 = 梯度;二阶导数 = 海塞矩阵(hesse)一阶导数是列向量,二阶导数是一阶倒数转置再求导,每一个函数求导后还是按...原创 2019-02-18 22:05:55 · 1896 阅读 · 0 评论 -
最速下降法求解无约束最优解问题
用最速下降法求函数的极小值,迭代两次,计算各迭代点的函数值、梯度及其模,设初始点。以下代码在求解的时候并没有严格按照题目中要求的迭代两次进行计算,而是设置了最大容许误差e,当迭代过程中g的范数小于e时候停止迭代,最终迭代了五次,如果按照题目中仅迭代两次的话误差就会稍微大一些。clcclear allclose all% 定义允许误差e = 0.1e = 0.1;Q = [2 ...原创 2019-03-03 21:56:16 · 4917 阅读 · 0 评论 -
牛顿法求解无约束最优化问题
记泰勒公式舍去高阶项在导数为0时候取得极值,令,以上式子可以变形为继续整理可以得到通过观察上式,我们可以发现,当给出一个初始点a的时候,我们可以通过泰勒公式用a点的一阶导数与二阶导数还有a的值近似的表达出使的点x。但是我们的这个近似是通过舍去泰勒公式中的高阶项实现的,因此我们要保证高阶项的舍弃对x的求值影响较小,也就是说初始点a的取值不能离x点太远,否则会出现较大...原创 2019-04-14 19:03:50 · 7571 阅读 · 2 评论 -
核函数
对于非线性特征集的分类过程可拆解为两步:第一步:利用非线性映射,将数据从输入空间映射到特征空间中第二步:使用线性学习器对特征空间的数据进行分类将以上两个步骤融合在一起,隐式完成输入空间数据集到特征空间数据集的映射,建立非线性学习器的方法,称为核函数方法。核是利用测试点和训练点的內积表示的决策规则。几种常用核: 线性核、多项式核、高斯核、sigmoid核函数、混合核函数(前面几种结合起...原创 2019-08-18 16:24:49 · 865 阅读 · 0 评论 -
rosenblatt感知机
本文代码使用matlab实现rosenblatt感知机,可以动态跟踪显示分类超平面的调整过程rosenblatt感知机的原理详解首先使用下列代码,随机的生成分类数据clc clear allclose all%% 设置numOfTrainData = 1000;gradient = -2;intercept = 10;xMin = -0;xMax = 10;...原创 2019-08-15 04:21:52 · 548 阅读 · 0 评论 -
贝塞尔函数法实现束控加权
使用贝塞尔函数法对各个频率点的权值进行计算调整,实现恒定波束的形成,算法的效果不是很好,应该是算法的应用场景上有限制。本质上这就是一种时域内通过滤波器组实现恒定波束的方法。clcclear close allM = 5;d = 0.043;c = 343;thetas = 0*pi/180;f = 400:200:4000;Lf = length(f);vs = e...原创 2018-10-11 13:57:02 · 645 阅读 · 3 评论 -
空域的匹配滤波
对于一个固定的阵型的阵列来说,理想远场情况下,声源处发出声音到MIC收到声音信号之间存在延迟,如果阵元位置位于相同的位置,则阵元与阵元之间的延时差就等于零,此时如果将声源按照固定的距离为半径绕阵元位置一周,并扫描各个方向上信号的累加值,可以发现阵列输出是各向同性的。如果将阵元在一条直线上均匀散开,间距为d(d满足半波长条件,即d <= λ/2),同样将声源按照固定的距离为半径,绕阵列中心...原创 2018-09-26 17:33:02 · 2308 阅读 · 0 评论 -
声源数目测定
本文使用协方差矩阵特征值分解的方法求解声音数目,对比两种主特征值数目的判定方法,代码如下clcclearclose allframeLength = 160;audioDataArray = zeros(frameLength,5);audioDataArray2 = zeros(frameLength,5);signalSourceInfo = zeros(4,1);sign...原创 2018-09-14 16:45:14 · 819 阅读 · 0 评论 -
ITUT-T recommendations G.168 标准回声模型
相关标准定义见《ITUT-T recommendations G.168 标准》附件D,文件中给出的公式D-3中-2*pi*f*k应修改为-2*pi*f*m1(k)回声模型1的验证代码如下clcclear allclose allf=0:1:4095;i=1:8;m1=[-436 -829 -2797 -4208 -17968 -11215 46150 34480 -10427 904...原创 2018-06-05 14:24:09 · 2432 阅读 · 4 评论 -
仿射投影自适应滤波(APA)算法及matlab实现
算法代码如下clcclear allclose all[x1,fs1]=audioread('handel.wav');[d1,fs2]=audioread('handel_echo.wav');x=x1';d=d1';p=25; % 重用次数n=20; % 滤波器阶数z=max(size(x));wA=zeros(1,n)'; %...原创 2018-06-01 17:39:03 · 6183 阅读 · 4 评论 -
自适应滤波之最小均方(LMS)算法以及matlab实现
使用LMS算法对进行信号分离clearclose allclca1=-1.6; a2=0.8; [x,fs1]=audioread('handel.wav');[dn,fs2]=audioread('handel_echo.wav');figure;subplot(2,1,1);plot(x);title('spk参考信号');subplot(2,1,2);plo...原创 2018-05-31 14:06:30 · 47508 阅读 · 15 评论 -
回声消除(AEC)初体验之matlab仿真
从代码传送门查看源码。对比不同的滤波器对应的回声消除效果原创 2018-05-28 10:42:21 · 12605 阅读 · 5 评论 -
回声消除实验数据的产生与分离
本篇介绍如何使用matlab产生一套回声消除所需要的实验数据,以及验证数据实验数据产生思路:1】首先要有一个原始的哈利路亚语音信号,这个信号用来模拟MIC端讲话人的语音2】建立一个带通滤波器用来模拟SPK到MIC的传输过程,因为带通滤波器是一个是不变系统,所以在后续回声消除的实验中只需要开始时候权值收敛,后续不需要跟踪回声通道的变化3】一个随机的杂波,用来模拟喇叭播放的声音4】喇叭的原声经过带通滤...原创 2018-06-01 21:13:18 · 3860 阅读 · 1 评论 -
脉冲响应不变法将模拟滤波器转换成为数字滤波器的套路
已知一个模拟滤波器系统,要将此模拟滤波器系统转换成为数字滤波器,方法会有很多种,在Matlab中也有专门的函数(impinvar 脉冲响应不变)来实现此功能,如果我们要自己编写算法来做这个过程的话可以考虑使用脉冲响应不变法来实现跟impinvar函数相同的效果。脉冲响应不变的原理1】对模拟滤波器进行拉普拉斯逆变换理论依据是:对传输系统的单位冲击响应求拉普拉斯变换得到的结果就是传输系统的...原创 2018-01-11 11:20:48 · 11483 阅读 · 0 评论 -
卷积与圆周卷积
关于卷积的两种手算方法见链接matlab中fft函数是对序列做DFT,第二个参数是采样点的数量,当缺省时,默认为输入信号序列的长度;当大于信号序列的长度时候,对输入序列后面补零计算,频域信号的分辨率因此而变细,但是这时候的分辨率是伪分辨率。设定信号序列s1,length(s1) = 9s1 = [1,7,8,9,5,4,6,3,2]调用fft函数,对s1进行傅里叶变换plo...原创 2018-07-25 10:57:30 · 8751 阅读 · 0 评论 -
快速查找某个范围内的所有素数
观察以下素数表,不能被小于素数n的素数整除的最小数为下一个最小素数。换句话说所谓素数可以看做是坐标中不断使用更小素数的倍数填充后剩余的最小数。例:1】2是最小素数,使用2的倍数不断填充坐标后,未被填充的最小数就是3,于是3就是大于2的下一个素数2】然后使用3的倍数不断填充坐标,剩余的未被填充的最小数就是5(4已经被2的倍数填充),可以发现5是大于3的下一个素数3】依次类推可以顺序的...原创 2018-07-30 14:35:33 · 7574 阅读 · 1 评论 -
matlab自带的VAD检测程序
在matlab的DSP工具箱中,自带了VAD程序,本文主要记录如何使用这个程序。clear allclose allclc%% 设置音频源,读入一个speaker.wav文件,并对读入的文件进行分帧,每帧80个采样点audioSource = dsp.AudioFileReader('SamplesPerFrame',80,... ...原创 2018-07-31 14:50:39 · 6755 阅读 · 6 评论 -
使用matlab进行实时VAD判断
使用matlab自带的VAD以及SCOPE函数进行实时的VAD判断废话不多说,实现看以下代码:clear allclose allclcaudioSource = dsp.AudioRecorder('SamplesPerFrame',80,... 'SampleRate',8000,... ...原创 2018-08-02 12:36:04 · 3213 阅读 · 7 评论 -
将一个序列分解成奇偶序列的组合
clcclear allclose all%% original sequencet = -10:1:10;hn1 = cos(2*pi*0.1*t);hnf1 = fliplr(hn1);hn2 = sin(2*pi*0.1*t);hnf2 = fliplr(hn2);hn3 = (hn1 + hn2)/2;hnf3 = fliplr(hn3);%%...原创 2018-08-27 10:48:35 · 5233 阅读 · 0 评论 -
高斯分布估计子的性能与克拉默劳下界的讨论
本文演示估计子的定义以及评估方法% 假设一个N长度的高斯随机过程x,按照平均数u、方差a分布,然后根据随机过程估计他的均% 值u1,并对评估的有效性进行检验clcclear close all%% 生成一个随机变量,并将统计结果与概率密度函数做对比N = 10;u = 2.5;a = 0.8;xrandom = random('norm',u,a,1,N);xaxi...原创 2018-09-12 11:27:49 · 1528 阅读 · 0 评论 -
第一特征函数&第二特征函数
本文展示如何绘制一个高斯分布过程的第一特征函数&第二特征函数clcclearclose allu = 3;a = 0.5;Nr = 100;Nc = 1000;w = 1:Nr;x = random('norm',u,a,1,Nc);Q = zeros(Nr,Nc);Qabs = zeros(Nr,Nc);for iloop1 = 1:Nc Q(:...原创 2018-09-17 14:52:45 · 2210 阅读 · 0 评论 -
使用matlab求高阶累积量
本文介绍如何使用matlab自带的高阶累积量函数求取一个随机过程的高阶累积量,运行demo之前确保matlab中已经安装了HOSA的工具箱。安装过程中经常会碰到的两个问题:1、info.xml出问题,在安装的目录下找到这个文件,将里面的<area>改成<type>,将</area>改成</type>2、找不到定义的函数cum4est.m,...原创 2018-09-07 16:09:21 · 17616 阅读 · 5 评论 -
使用matlab进行算法开发时的单元测试写法
从今天起我们开始学习算法开发的单元测试框架使用方法,我们以之前写的求解一个范围内素数个数的算法为例,介绍单元测试框架的基本使用方法。先将之前的代码写成function的形式,如下:function [divNumberVectorLength] = primeNumberSolute(calculationRange) numEnter = calculationRange;if...原创 2018-09-23 21:39:04 · 2497 阅读 · 0 评论 -
自适应滤波收敛特性求解
clcclear allclose alln=500;Sspk=zeros(1,n)';e=zeros(1,n); % 用于存放误差e1=zeros(1,n); % 用于存放实际回声与合成回声之间的误差ep=zeros(1,n); % 用于存放五十次运算累积的误差w=randn(1,n)'; % 产生一个随机信号用作参考,然后用x来拟合这个信号,并用前两个点初始化滤波器第...原创 2018-06-03 21:12:15 · 2005 阅读 · 0 评论