结束了朝七晚十二的生活后,最近几天好好放纵了一下,把库存里的还没玩的游戏都玩完或者玩到卡关,把想再看一遍的书又看了一遍,奢侈地睡了个觉。但是看了看开学时间不断地逼近,计划却只完成了那么几个,心里着实不甘。于是又来敲键盘了。

Tzvi讲过,我们Matlab只学一个学期的基础,后面因为不同人的发展方向不同,所以只能靠学习基础的方式自行学习你需要用到的内容。所以今天要摸的是Matlab里有关于sound的内容(Matlab的功能真的很杂,它甚至还有FM Broadcast Receiver)

《Mastering MATLAB》里关于SOUND的介绍非常少,只有短短两页内容,可见在Matlab里,sound并不是什么主要内容或者说是弱项。sound在matlab里更多的并不是用于制作音乐,而是提醒和分析声音背后的数学,物理规律

为什么说是提醒呢,因为有些比较复杂的程序,往往需要matlab运算很久才会有结果,这时候人一般是不会盯着屏幕等着出结果,而是走开先去干其他事。这时候就需要matlab在运算完后发出提示,最好是声音。所以sound在matlab里更多是用于提醒程序已运行完,结果已得出(一般用beep函数)。不过也有人用warndlg(弹出窗口)来提醒

在《Mastering MATLAB》里这部分内容,似乎把函数分成了high-level functions (audioplayer, audiorecorder, getaudiodata, audiodevinfo...) 和 lower-level functions (sound, soundsc, auread, wavread, auwrite, lin2mu...)。但我觉得分高低级并没有什么用

还是从头开始尝试,就从怎么播放系统自带的音频开始吧

其实matlab自带了很多声音,除了我们刚刚在上面提到的我们用matlab经常能听到的beep之外,还有chirp(叽叽喳喳的鸟叫声), gong(铜鼓), handel(哈雷路亚), laughter, splat(东西掉下来的啪嗒声), train。这些东西都是mat文件,位置在

"MATLAB/R2018b/toolbox/matlab/audiovideo"

我们可以通过以下函数来播放

load chirp; %读取chirp.mat文件

sound(y,Fs); %播放以y为样本,Fs为频率的声音

还可以这么写

load train;

player = audioplayer(y,Fs); %创建用于播放音频的对象

play(player);

load我们应该都能看懂,就是读取文件,而mat文件就是matlab自带的数据包文件格式。sound(y,fs)就是播放以y为样本,fs为采样频率的声音;与之相对的是play,它可以从 audioplayer 对象播放音频。audioplayer就是创建用于播放音频的对象

audioplayer对象长这样

其中fs采样频率以Hz为单位,指的是采所有的样本,但是一秒内采fs个样本。必须有震动,即变化,或者说是波才能形成声音,所以当样本全为同一个值的时候,不管这个值有多大,它都是没有声音的,只有在值出现变化的时候,才会有声音

嗯嗯,你们动手试试吧,这些声音都挺有趣的

然后我们看回我刚刚放的第一张图,里面箭头的是系统自带的包含音频信息的mat文件,方形的是敲琴视频,还有圆圈圈出来的是matlab的一个彩蛋。比较神奇的是,唯独这个mat文件的频率Fs(7418)和其他mat的频率(8192)不一样,而且其他的样本数据名字都是y,唯独它是叫mtlb。有兴趣的朋友可以自己去试试这个彩蛋

我们现在看到的都是已经从音频文件转为mat的文件了,那如果我们自己要转换怎么做呢?这时候就需要audioread函数了

首先要把你要转换的音频文件放在当前目录里,当前目录你可以用pwd函数,看看是在哪里,或者直接看上面

比如我把一个叫night.mp3的文件,放在当前目录,然后就可以使用函数了

[y,fs] = audioread('night.mp3'); %读取音频文件,并输出到工作区的"y","fs"

sound(y,fs);

这时候我们发现,工作区出现了"fs","y"这两个数据,同时电脑还缓缓播放出好听的音乐。这里的"fs"就是这个音频的频率,"y"就是音频数据,而且"y"还是一个nx2的double,为什么是2呢,因为现在大多数音频文件都是双声道了啊。再补充一点,还有一个函数叫做soundsc,它可以缩放音频信号 y 的值以使其位于 –1.0 到 1.0 范围内,尽可能提高音频的音量,而不用裁剪

然后我们就可以点右上角的小三角形,对工作区进行保存

现在我们可以把原来的mp3文件和新的mat文件进行对比,就可以发现,这么做是非常的不划算的,文件大小一下子大了21倍。毕竟mat不是专门用来储存音频信息的,情有可原

没什么卵用不要紧,主要是这样可以装逼,不是吗。找个好友,发给已经转化过音频的mat文件给ta。"你下载这个文件后,打开matlab,把这个mat文件放在当前目录,然后在命令窗口输入以下代码:"

load night;

sound(y,fs);

看到这么大的文件,这么简洁的代码,不会让人觉得一头雾水的很厉害吗,就是没什么用而已,还不如直接听mp3

想要逼格再高一点,就把它做成刚刚讲的audioplayer对象,这样连样本数据也看不见了

SampleRate就是它的采样频率,相当于"fs",数值越高就相当于波被压缩了一样,声调变高,时间变短。说到了变速和变调,我们顺便也提提"变速不变调"和"变调不变速"两种。变速不变调,需要你把样本数据值压缩成二分之一,然后用2*fs的采样频率播放。而变调不变速,需要你把样本长度增长一倍,然后用2*fs的采样频率播放。

BitsPerSample就是它的比特率,声音中的比特率是指将模拟声音信号转换成数字声音信号后,单位时间内的二进制数据量,是间接衡量音频质量的一个指标

NumberOfChannels就是它的频道数,相当于我们"y"的column值。TotalSamples就是我们现有样本总数,相当于"y"的row值

刚刚也说明了,play播放的是audioplayer对象;sound播放的是以fs为频率,y为样本的声音。再细点讲,audioplayer相对于直接使用sound,可操作的地方多很多

比如说你播放sound,想要停的话,你就输入

clear sound;

不过你也只能停止sound的播放,而对于audioplayer你可以play(播放),pause(暂停),resume(继续播放),stop(停止),还有get, set(设置属性), isplaying, playblocking等,格式写成

play(playerObj);

pause(playerObj);

resume(playerObj);

stop(playerObj);

... ...

playerObj填入audioplayer对象的名称

另外,play还可以截取audioplayer对象的部分进行播放,格式为

play(playerObj,start);

play(playerObj,[start,stop]);

里面的start或stop应该如此赋值

start = playerObj.SampleRate * 4;

这个意思是start是playerObj的从前往后数的第四秒。因为想要取我们要的这个位置的值,除了和时间,还和播放它的采样频率有关,两者乘起来才是我们要的开始样本数据的值。就好比我们要接这么多的水,除了和接水的时间有关,还和开水龙头的大小有关

此外,我们可以看见audioplayer对象下面包含了许许多多的数据,我们想要单独使用某个值的时候,格式就是"对象名.子数据名"。比如我们要取我们刚刚创建的名为"player"的audioplayer对象里的"BitsPerSample"就写作"player.BitsPerSample"

把这个整合起来就是这么写

load handel.mat;

player = audioplayer(y,Fs);

start = player.SampleRate * 4;

play(player,start);

我们可以发现,handel这个音频从第四秒(start)开始播放。stop也是一样的道理

另外play是可以一次性播放许许多多个音频的,没有排他性,这样会听起来很嘈杂(sound也没有排他性)。用playblocking替代play就可以解决这个问题,这是一个具有排他性的函数,即它会播放一个音频完后再播放下一个

能播就能录,这时候用的函数是audiorecorder,这个函数可以创建用于录音的对象,格式为

recorder = audiorecorder

recorder = audiorecorder(Fs,nBits,nChannels)

Fs为以Hz为单位的采样率,MATLAB 的硬性限制为 1000 Hz <= Fs <= 384000 Hz,默认: 8000。nBits为采样位数,默认: 8。nChannels为通道数:1(单声道)或 2(立体声),默认: 1

Matlab说明文档的示例如下

% Record your voice for 5 seconds.

recObj = audiorecorder; %创建audiorecorder对象

disp('Start speaking.')

recordblocking(recObj, 5); %排他性地单独对recObj这个对象录5s的音

disp('End of Recording.');

% Play back the recording.

play(recObj); %播放recObj

% Store data in double-precision array.

myRecording = getaudiodata(recObj); %将recObj导出为数据并赋值给myRecording

% Plot the waveform.

plot(myRecording); %画myRecording的图像

这个例子特别好,比较全面。讲了创建,录音,转为数据,画图几个方面。这里面的recordblocking也可以用record代替。也就是说,audioplayer - play - playblocking三者的关系和audiorecorder - record - recordblocking三者的关系类似。然后我就随便瞎哼哼,导出了个图像(这段我录了10s,但是已经有80000个数据。)

可以播可以录,也就可以保存了,使用函数audiowrite,格式为

audiowrite(filename,y,Fs)

这里filename的格式可以写为这么几种

'myFile.m4a'

'../myFile.m4a'

'C:\temp\myFile.m4a'

比如说保存我们刚刚的录音为wav文件

audiowrite('mysound.wav',myRecording,8000);

%这里的8000就是recObj.SampleRate

然后你就可以在你的文件夹里看见你导出的wav文件了

它支持的格式和通道数有

还有一个函数叫做audioinfo,它可以帮你查看有关于audio的信息,比如

info = audiodevinfo

还可以这么写

audioinfo('mysound.wav')

不知道你是否知道Mu-Law

μ-law(或Mu-Law)作为一种压缩扩展的方法,μ-law可以改善信噪比率而不需要增添更多的数据。

均匀量化时 ,由于对编码范围内小信号或大信号都采用等量化级进行量化 ,因此小信号的“信号与量化噪声比”小 ,而大信号的“信号与量化噪声比”大 ,这对小信号来说是不利的。为了提高小信号的信噪比 ,可以将量化级再细分些 ,这时大信号的信噪比也同样提高 ,但这样做的结果使数码率也随之提高 ,将要求用频带更宽的信道来传输。采用压缩的量化特性是改善小信号信噪比的一种有效方法。它的基本思想是在均匀量化前先让信号经过一次处理 ,对大信号进行压缩而对小信号进行较大的放大。由于小信号的幅度得到较大的放大 ,从而使小信号的信噪比大为改善。

信噪比,英文名称叫做SNR或S/N(SIGNAL-NOISE RATIO),又称为讯噪比。是指一个电子设备或者电子系统中信号与噪声的比例。这里面的信号指的是来自设备外部需要通过这台设备进行处理的电子信号,噪声是指经过该设备后产生的原信号中并不存在的无规则的额外信号(或信息),并且该种信号并不随原信号的变化而变化。

同样是“原信号不存在”还有一种东西叫“失真”,失真和噪声实际上有一定关系,二者的不同是失真是有规律的,而噪声则是无规律的。

——百度百科

部分相关内容,你还可以通过下面这个视频进行了解

【作死物理小讲堂】高音质的音频是如何录制的 音频增益与降噪的原理 @FPS罗兹 灵魂字幕

https://www.bilibili.com/video/av16759300

Matlab就有这么一个函数可以将linear audio转化为mu-law,叫lin2mu,相反则用mu2lin。mu = lin2mu(y) 将范围 -1 ≤ Y ≤ 1 内的线性音频信号振幅转换为范围 0 ≤ u ≤ 255 内的 mu-law 编码"flints"

Matlab不能直接打开mp3,wma等我们经常会用到的音频文件格式,但是在《Mastering MATLAB》有提到以下内容

Two industry-standard sound file formats are supported in MATLAB. NeXT/Sun audio format (file.au) files and Microsoft WAVE format (file.wav) files can be written and read.

——《Mastering MATLAB》

那个au格式不讲,我没见过,不过使用方式和wav很像。与wave相关的函数有四个,分别是:

wavplay Plays WAVE format sound file (depreciated; use audioplayer instead)

wavrecord Records sound using audio input device ( depreciated; use audiorecorder instead)

wavread Reads WAVE format sound file

wavwrite Writes WAVE format sound file

——《Mastering MATLAB》

又是不建议使用的函数,在MATLAB Release Notes里也指出来了这几个函数不建议使用

——R2014a - Data Import and Export - Functionality being removed or changed

这些函数很早就不建议使用了,从13到15几个版本的Release Notes连续提出警告,然后你在matlab文档里也找不到这几个函数的具体介绍文档,应该是不可以使用了。我看了一下《Mastering MATLAB》的发行时间,2012,哦,好吧

但是!但是我却在百度文库看到一篇挺新的文章还在用这几个函数

我有点好奇,毕竟可能只是提醒不建议,而不是完全不能用了。所以我自己打了代码试试看。这红线?看来不行。运行了,果然不行(这里我的换行打错了,得fprintf才能用\n)

好了,说了这么多,除了录音之外,基本上都是现有的东西,那可不可以自己做呢?比如编辑音乐?有是有,虽然不如专用的MuseScore或者GarageBand等好用

这部分内容需要很多比较基础的乐理知识,其中也包含了不少数学和物理的美妙,有兴趣的朋友可以去了解了解

我知道的,写得比较好,比较全的有下面几个

十二平均律理论的科学依据是什么?

https://www.zhihu.com/question/27345554

写给理工科人看的乐理(四)和弦与调式

http://www.cnblogs.com/devymex/p/3386886.html

纯律、五度相生律和十二平均律有何关系?

https://www.zhihu.com/question/20612595

如何通俗易懂地解释八度与十二平均律?

https://www.zhihu.com/question/22822711

听听函数,看看声音--Matlab的sound()函数

https://blog.csdn.net/weaponsun/article/details/46695255

黑白键的故事 | 混乱博物馆

https://zhuanlan.zhihu.com/p/37546103?utm_source=wechat_session&utm_medium=social&utm_oi=863156048981295104

(感谢kj同学的推荐)

音高和频率转换表

https://wenku.baidu.com/view/ed84865e1711cc7931b716bc.html

使用matlab进行简单音乐合成

https://wenku.baidu.com/view/1a4428010740be1e650e9a4d.html

我们可以看到,声音的音高跟它的频率有关,它们之间符合以下公式关系

其中p为MIDI number(亦可以理解为音高),f为频率(Hz)。一般定钢琴上小字一组的la(a1)为标准音,p=69,f=440。这样推算过来,中央C(do c1)的p=60,f=261.63

http://newt.phys.unsw.edu.au/jw/notes.html

我没看懂这个图的note name在写什么,因为一般我们都是下图这么标的

baby.bao-jian.net

还有我不太明白他这个p是怎么定义的,所以我看到有人拿钢琴键当做p写进公式的时候,我对照着标准公式看了很久,才知道ta写的不是标准公式,而是把p换做钢琴键数(好吧,它有写很清楚,只是我比较蠢)

上面的问题用下图可能比较好理解

https://blog.csdn.net/weaponsun/article/details/46695255

fs=44100;

t=0: 1/fs: 0.5; %因为采样频率为fs,所以我们要提供的数据的间距为1/fs

do=sin(2*pi*261.63 *t);

re=sin(2*pi*293.66 *t);

mi=sin(2*pi*329.63 *t);

fa=sin(2*pi*349.23 *t);

so=sin(2*pi*392.00 *t);

la=sin(2*pi*440.00 *t);

ti=sin(2*pi*493.88 *t);

Cscale=[do,re,mi,fa,so,la,ti];

sound(Cscale,fs)

——听听函数,看看声音

--Matlab的sound()函数

我们可以发现这段音乐失真的很严重,需要修正。这是因为而我们一般听到的声音都有始有终,从小到大,再从大到小,不会一下子就最大声。简单来说,这里失真就是因为发声瞬间数值的差值太大了,即相位不连续,产生高频分量。这里的每一个声音都是从头到尾都是同一个振幅,我们需要通过一个修正振幅来调整它们,比如说这里的修正振幅就可以写作

mod = sin(pi*t/t(end)); % Modification function

使其每一个音都是一个小山丘的发声形式,就跟我们弹钢琴一样,敲下按键的那一瞬间,声音变大,手指离开按键的时候,声音变小,而按到底的时候声音最大。这些整合起来如下

fs = 44100;

t = 0:1/fs:0.5;

mod = sin(pi*t/t(end));

do = mod .* sin(2*pi*261.63 *t);

re = mod .* sin(2*pi*293.66 *t);

mi = mod .* sin(2*pi*329.63 *t);

fa = mod .* sin(2*pi*349.23 *t);

so = mod .* sin(2*pi*392.00 *t);

la = mod .* sin(2*pi*440.00 *t);

ti = mod .* sin(2*pi*493.88 *t);

Cscale=[do,re,mi,fa,so,la,ti];

sound(Cscale,fs);

你再运行试试看,是不是就没有了"塔塔塔"的破音

还有一种调幅的方式叫做包络函数

mod = (t.^4).*exp(-30*(t.^0.5));

mod = mod*(1/max(mod));

详情请看

matlab演奏最炫民族风的代码求翻译,越详细越好,真心看不懂?

https://www.zhihu.com/question/20248007

我们除了可以用各个音高的频率来表示声音,还可以通过五度相生律来推每个音。详细内容请看上面的"黑白键的故事"那个链接

http://blog.csdn.net/bat67

很多采样频率fs都是44100Hz,这是因为这个是理论上CD音质的界限(据说是通过"乃奎斯特取样定理"选定的),而最先很多mp3都是从CD拷来,所以我们会有很多音频文件的采样频率都是44100Hz。而高于48KHz的采样率,人耳分辨不出来,也就没多大用处了。但是我还是不明白matlab默认的采样频率8192是怎么来的

另外还需提前提出来的是,现在你去看别人用matlab编写的音乐,它们的十六分音符时长都为0.125s

这是因为它们曲子的BPM(Beat Per Minute,拍子数,每分钟节拍数的单位。一般琴谱左上角一个四分音符等于某个数值指的就是BPM)都为120,即一分钟有120拍,四分音符为一拍,所以一拍0.5s,而十六分音符就是0.125s

zhidao.baidu.com

所以我们可以总结一下,一般在matlab里制作编写音乐的流程如下

1.定义采样频率

fs = 44100;

dt = 1/fs; %每个采样点的时间差

2.定义BPM(挺多程序定义的是十六音符,然后通过十六分音符推出其他音符)

T16 = 0.125;

t16 = 0:dt:T16; %每个采样点的时间点

[~ k] = size(t16);

%我们想知道十六音符的采样个数,这个会在后面设置休止符的时候用到。因为没必要知道第一个元素的数值,所以我们可以直接用"~"代替。不过这里也可以写成"k = size(t16,2);"

t4 = linspace(0,4*T16,4*k);

%这个是由十六分音符推四分音符。linspace可以生成线性间距向量,y = linspace(x1,x2,n) 生成 n 个点。这些点的间距为 (x2-x1)/(n-1)。

[~ i] = size(t4);

... ...

3.定义每个音,要分音高和时长

(上面已经给出直接用频率写的音符,和用五度相生律推的音符两种方法)

4.定义休止符和整合旋律

5.如果有多个旋律,要把这些旋律的数据加起来,然后归一化,防止失真

比如说你有旋律m1, m2, m3,你需要

y = m1+m2+m3;

y = y/max(y);

%归一化,压缩数值,使之最大值的绝对值为"1",防止失真。这个主要还是因为sound(y,fs)里的y要求是-1到1之间的数值。不过这个问题也可以用soundsc函数解决

6.播放

sound(y,fs);

了解完这些后,我们就可以开始着手编写自己的音乐了

《那些年,我们一起弹的钢琴曲》

我们可以看到,这个曲子的BPM是100,而不是120。所以一拍就是0.6s而不是0.5s了

这段播放出来就是开头的那个语音。想要我制作《一生有你》的编曲m文件的朋友,可以在我的公众号后台发送"一生有你"

matlab里,sound的相关内容还有许许多多可以讲的东西。有兴趣的话,还可以看看别人怎么做随机音乐

[实习] 用matlab生成随机序列音乐

https://www.douban.com/group/topic/12214892/

另外为了感谢能够从头看到尾的朋友,我决定送上点福利,去Numerical computing with functions 这个官网上免费下载,或者在网址那里输入

https://link.zhihu.com/?target=https%3A//github.com/chebfun/chebfun/archive/master.zip

下载完后,把文件解压,打开解压的文件(变为当前目录)就开始开心的耍了。在命令窗口分别输入以下三个代码,在matlab上玩三种贪吃蛇

chebsnake

chebsnake('equi')

chebsnake2

写一篇推文不容易,希望大家观看,收藏,投币三连(doge),谢谢!

matlab中的方波信号图片_【Matlab】Sound相关推荐

  1. matlab中的方波信号图片_电气信息类专业课程之matlab系统仿真 第十章 DBPSK调制解调器(9)...

    继续展示程序!好东西总是慢慢的吃才有味道!当然对于本科阶段的学习而言,本章知识的难度已经不算小了. 函数化编程的概念应该刻在脑子里! 误码性能的展示!!! 工程经验:看误码率就能大概知晓程序是否有问题 ...

  2. matlab中的方波信号图片_如何在MATLAB R2019b中导出simulink的各种图片

    大家好,这里是玉树的MATLAB小知识讲堂. 今天给大家带来的是,如何在高版本MATLAB(R2018以上)的simulink中,导出我们想要的高清图片. 在做课题作业时,我发现网络中关于导出simu ...

  3. matlab中的方波信号图片_雷达信号的相干积累

    前面几篇文章主要是帮助大家理解雷达目标在运动的状态下,回波信号的相位,时延变化特征.当我们了解信号的特性后,便可以针对其特点做目标检测和估计部分.一般情况下检测在前,估计在后,但是在检测前面还有一个! ...

  4. matlab中的方波信号图片_干货|SCI论文的图片绘画软件(上)

    本期编辑 | 雯婷 微微 本期校对 | 郭倩 文章来源 | 材料基 SCI图片绘画技巧 众所周知,高水平的配图可以令论文.报告等显得耳目一新,瞬间提高一个档次.写文章.做报告,搞好配图已经成为了又一项 ...

  5. matlab中的方波信号图片_基于Matlab的雷达信号处理仿真

    这是一个较为基础的图文教程(含仿真代码):利用MATLAB设计经典的雷达数字信号处理.该系统具备对雷达目标回波的处理能力,能够从噪声中将目标检测出来,并提取目标的距离.速度.角度信息.教程分五节完成, ...

  6. matlab中的方波信号图片_MATLAB| 望远镜分辨率amp;艾里斑的模拟

    目录1 望远镜放大的基本原理2 圆孔衍射与艾里斑2.1 衍射现象2.2 贝塞尔函数2.3 艾里斑图像3 瑞利判据4 无效放大5 MATLAB代码 我们经常会听到有人这样询问:你的望远镜放大倍数有多大? ...

  7. matlab中FDMA搭建,信号与系统Matlab实验—频分多址FDMA.doc

    信号与系统Matlab实验-频分多址FDMA 频分多址FDMA实验 一.实验目的 1.通过matlab软件实现頻分多址功能 1.学习使用Simulink进行系统仿真的方法 2.学习使用Simulink ...

  8. matlab离散方波信号,MATLAB - 在ODE15s函数中生成方波信号?(MATLAB - Generate square signal in ODE15s function?)...

    MATLAB - 在ODE15s函数中生成方波信号?(MATLAB - Generate square signal in ODE15s function?) 我试图从函数内部生成一个方形信号,通过O ...

  9. MATLAB生成周期方波信号:square 函数使用简记

    MATLAB生成周期方波信号:square 函数使用简记: square函数用于生成周期方波信号,其调用语法如下. 1.f=square(a*t):生成指定周期.峰值为±1的周期方波,常数a为信号时域 ...

  10. matlab中e用什么表示什么,matlab中e怎么表示

    方法/步骤 1.自然数对数 log(x) 我们在MATLAB主窗口中输入a1=log(2.7183),回车,我们可以看到a1近似为1,e约等 于2. MATLAB中 如何输入对数函数? 方法/步骤 1 ...

最新文章

  1. 参数化模型(parametric model)和非参数化模型non-parametric model)的区别?哪些模型是参数化模型,哪些模型是非参数化模型?
  2. Nature子刊超越诺贝尔经典理论:神经科学研究路漫漫...
  3. 2021年春季学期-信号与系统-第十次作业参考答案-第四小题
  4. 面向对象基础及UML建模语言
  5. Scala入门到精通——第三十节 Scala脚本编程与结束语
  6. ZK的实际应用:MVVM –加载和渲染数据
  7. android getinstance 方法,Android中的'new Fragment()'和'Fragment.getInstance()'有什么区别?...
  8. android 8三星note8,信息太多很烦琐?告诉你三星Note8有妙招
  9. MySQL 优化策略
  10. 【Python系列】之判断字符是否为数字
  11. SQFREE - Square-free integers
  12. 配置LANMP环境(1)-- 安装虚拟机VMware与安装CentOS7.2系统
  13. 回溯算法 python
  14. Precision、Recall、F计算:举例
  15. 微信小程序添加服务器域名
  16. Windows补丁查询地址
  17. 计算机中的表格中怎么排序,如何设置Excel表格的横向排序功能
  18. 如何在中国电子专利申请网缴纳专利年费
  19. 关于python二进制图片转码求解
  20. 用c++做俄罗斯方块

热门文章

  1. libcurl 使用方法简介
  2. linux下对SD卡分区
  3. ros文件服务器,ros设置_服务器应用_Linux公社-Linux系统门户网站
  4. 推荐电影 梦工厂经典电影列表 1996-2012
  5. 三种存储类型和三种存储方式
  6. 用计算机如何修改wif密码,电脑怎么修改无线网(WIFI)密码?
  7. 非科班、跨行业的如何走前端这条路?
  8. 强化学习入门1—多臂老虎机Multi-armed Bandits
  9. pdman 创建表同步数据库_PDMan-2.0 正式发布:用心开源,免费的国产数据库建模工具PowerDesigner...
  10. 网络安全知识竞赛选择题(91-120题)