音乐评分系统MATLAB仿真

从MATLAB示例入手:高效学习路径与实战技巧全解析 在编程与工程实践中,学习新工具或语言时,从官方示例入手是一种被广泛验证的高效方法。其核心原理在于通过可运行的代码范本,直观展示特定功能的实现逻辑、最佳实践和潜在问题,从而降低学习门槛。这种“示例驱动学习”的技术价值在于,它能帮助开发者快速建立对工具核心功能的感性认识,理解函数调用、数据流和可视化等关键概念,并将抽象的理论知识转化为可操作的工程能力。在信号处理、图像分析、控制系统仿真等应用场景中,通过系统性地观察、修改和融合官方示例,工程师能加速从理论到实践的过渡。本文聚焦于MATLAB这一在科学计算与工程领 阅读详情
分别提取演唱者音频与模版音频的特征参数,通过特征参数的差值得到演唱得分。

源码分三个部分:
1. main.m
主文件,运行入口
音频的读入,对基音特征进行分段DTW,根据DTW的结果计算得分
计算方式为:(cos((pl/tpl)*pi)+1)*50
其中,pl为待评分音频的结果 tpl为对照音频的结果
2. solve.m
基音特征提取函数
流程:
预加重->分帧->加窗->求短时平均能量->求自相关(求基音)
主要参数:
ek :高频提升参数
L :帧长(ms)
RL :帧移(ms)
kee:清浊音阈值
调整参数可以调整系统的整体特性以适应不同需求
3. DTW.m
动态时间规整函数
N^2复杂度,分段加快处理速度


%main.m
%西安电子科技大学 windroid
clear all;
%默认音源已提前进行统一化处理
%读取数据
file1 = 'C:\Users\97628\Desktop\音乐\music\暗香0.wma';
file2 = 'C:\Users\97628\Desktop\音乐\music\暗香1.wma';
[e1,Fs1] = audioread(file1);
[e2,Fs2] = audioread(file2);

f1 = solve(e1, Fs1);
f2 = solve(e2, Fs2);

figure(1);
subplot(211);plot(f1);title('file1基音频率');xlabel('帧数');ylabel('幅度');
subplot(212);plot(f2);title('file2基音频率');xlabel('帧数');ylabel('幅度');

%DTW是为了小范围拟合 所以输入的音频需要提前对齐
%DTW -> n^2算法
%按帧分段
D = 100;
pl = 0;
for i=1:D:min(length(f1), length(f2))-D
    pl = pl + DTW(f1(:,i:i+D), f2(:,i:i+D));
end
%空对照组
tpl = 0;
zf = zeros(1, length(f2));
for i=1:D:min(length(f1), length(zf))-D
    tpl = tpl + DTW(f1(:,i:i+D), zf(:,i:i+D));
end

if(tpl<pl)
    info = '音源差距太大,无法评分'
else
    %满分100
    %正弦曲线
    score = (cos((pl/tpl)*pi)+1)*50
end

%solve.m
function f = solve(e, Fs)
%e:音频数据; Fs:采样率
%返回基音频率 列向量
%
%函数过程:
%   预加重->分帧->加窗->求短时平均能量->求自相关(求基音)
%关键参数:
%   ek L RL kee
%西安电子科技大学 windroid

%预加重
ek = -0.98; %-1 ~ 0
e = filter([1,ek],1,e);  %un为经过高频提升后的时域信号
log = '预加重完成'
un = e;
%figure(1);plot(e);title('原始语音信号');xlabel('样点数');ylabel('幅度');
%figure(2);plot(un);title('预加重后的语音信号');xlabel('样点数');ylabel('幅度');

L = 30; % 帧长(ms)
RL = 20; % 帧移(ms)
t = length(e)*1000/Fs; % 时长(ms)
N = floor((t-L)/RL); % 帧数
ns = floor(Fs*L/1000); %帧采样点数
rnl = floor(Fs*RL/1000); %帧移点数

un(length(un)+1:ceil(t/L)*ns, :) = 0; % 信号尾0扩充
su = size(un);
if su(2) == 2
    un = (un(:, 1) + un(:, 2))/2;
end

%分帧
e1 = zeros(N, ns);
for i = 1:1:N
    e1(i, :) = un((i-1)*rnl+1:(i-1)*rnl+ns, 1)';
end
%figure(3);plot(e1(100, :));title('分帧后的第100帧信号');xlabel('样点数');ylabel('幅度');
log = '分帧完成'

%加窗
e2 = zeros(N, ns);
for i = 1:1:N
    e2(i, :) = e1(i, :).*(hamming(ns))';
end
%figure(5);plot(e2(100, :));title('加窗后的第100帧信号');xlabel('样点数');ylabel('幅度');
%figure(6);plot(ee);title('加窗后的短时平均能量');xlabel('帧数');ylabel('能量');
log = '加窗完成'

%{
%削波
emax = max(abs(e2'))';%中心削波
t = 0.7;
e3 = zeros(N, ns);
for i = 1:1:N 
    for j = 1:1:ns
        tc = t*emax(i);
        if e2(i, j) > tc
            e3(i, j) = e2(i, j) - tc;
        elseif e2(i, j) < -tc
            e3(i, j) = e2(i, j) + tc;
        else
            e3(i, j) = 0;
        end
    end
end
%figure(7);plot(e3(100, :));title('中心削波后的第100帧信号');xlabel('样点数');ylabel('幅度');

%TODO %三电平削波
%}
%{
%声频分离
LE = 1024;
t = zeros(LE, 1);
t(51:950, 1) = hanning(900);
ef = zeros(N, LE);
for i= 1:1:N
    fe = fft(e1(i, :), LE);
    fe = fe.*(t');
    ef(i,:) = ifft(fe, LE);
end
%}

%短时平均能量
ee = sum(e1.^2, 2)';
ne = sum(ee)/N;

%figure(8);
%subplot(211);plot(ee);title('短时平均能量');xlabel('帧数');ylabel('能量');

log = '正在求基音'
%求自相关
LE = ns;
re = e2;
tR = zeros(1, N);
kee = 1;%阈值
for i = 1:1:N
    if ee(:, i) < kee*ne
        continue
    end
    R = zeros(1, LE);
    for k = 1:1:LE
        for t = 1:1:LE-k
            R(1, t) = R(1, t) + re(i, t)*re(i, t + k);
        end
    end
    [~ ,tR(1, i)] = max(R);
end
%subplot(212);plot(tR);title('基音频率');xlabel('帧数');ylabel('幅度');

f = tR;

%DTW.m
function dist = DTW(t,r)
%西安电子科技大学 windroid
%参考:http://www.cnblogs.com/luxiaoxun/archive/2013/05/09/3069036.html
%↑链接代码有问题
n = length(t);
m = length(r);
% 帧匹配距离矩阵
d = zeros(n,m);
for i = 1:n
    for j = 1:m
        d(i,j) = (t(:,i)-r(:,j))^2;
    end
end
% 累积距离矩阵
D = ones(n,m) * realmax;
D(1,1) = d(1,1);

log = '正在DP'
% 动态规划
for i = 1:n
    for j = 1:m
        if i>1
            D1 = D(i-1,j);
            if j>1
                D2 = D(i-1,j-1);
                D3 = D(i,j-1);
            else
                D2 = realmax;
                D3 = realmax;
            end
        else
            D1 = realmax;
            D2 = realmax;
            if j>1
                D3 = D(i,j-1);
            else
                %D3 = realmax;
                %此时 i == 1 && j == 1
                D(i, j) = d(i, j);
                continue
            end
        end
        D(i,j) = d(i,j) + min(min(D1,D2),D3);
    end
end
dist = D(n,m);

测试音频结果:


预加重


分帧加窗


短时平均能量


短时平均能量与基音频率的关系


基音频率对比


基于MATLAB的歌曲识别系统:语音分帧、端点检测、音高提取和DTW算法 以上是一个基于MATLAB的歌曲识别系统的实现过程。通过使用语音分帧、端点检测、音高提取和DTW算法,我们可以实现对歌曲的识别。希望这些信息对你有帮助!如果你有任何其他问题,我会很乐意帮助你。在本文中,我们将介绍基于MATLAB的歌曲识别系统的实现。该系统利用语音处理技术,包括语音分帧、端点检测、音高提取和动态时间规整(DTW)算法,来实现对歌曲的识别。通过对以上几个步骤的实现,我们可以构建一个基于MATLAB的歌曲识别系统。 阅读详情

相关推荐

13、钢琴演奏自动评估与音乐个性化推荐技术解析

本文探讨了基于支持向量机(SVM)的钢琴演奏自动评估系统与基于协同过滤算法的音乐个性化推荐模型。前者通过改进SVM算法实现高稳定性与客观性,有效克服传统人工评估的主观性问题;后者结合用户画像、评分及音乐标签,提升推荐精准度,缓解信息过载。文章分析了两种技术的优势、应用场景及发展趋势,并展望了多模态评估、实时反馈、强化学习等融合发展方向,为音乐领域的智能化服务提供了创新思路和技术支持。

qsc901234的博客 69

【亲测免费】 app-librescore:一款开源音乐评分工具

在这个数字化时代,音乐爱好者和创作者对高质量的音乐评分软件有着极高的需求。app-librescore 是一款开源的音乐评分应用程序,旨在为用户提供一个功能丰富、易于使用的平台,让音乐创作和分享变得更加简单。这款应用支持多种操作系统平台,包括 Windows、macOS、Linux 以及 Android,使得用户无论在何种设备上都能享受到其带来的便利。 ## 项目技术分析 app-libres

gitblog_00584的博客 776

基于MATLAB的BiAudio仿真电台:从傅里叶变换到双路AM调制解调全链路解析

从信号与系统课程中的核心概念出发,傅里叶变换揭示了信号频谱的本质,调制解调技术实现了频谱搬移,而滤波器设计则保证了频分复用信号的可靠分离。这些原理共同构成了无线通信系统的基础。在工程实践中,利用MATLAB搭建仿真平台,通过AM调制、AWGN信道与包络检波,可以直观演示双路音频的频分复用传输过程。该方案不仅帮助学生理解理论公式的物理意义,还能灵活调整载波频率与信噪比,观察噪声对解调质量的影响,适用于课程设计、通信原理教学及信号处理入门实验。本文以BiAudio仿真电台为例,完整展示了从参数推导、发射端调制、

weixin_33552698的博客 225

matlab 音乐信号处理,基于matlab的音乐信号处理和分析.doc

基于matlab的音乐信号处理和分析1音乐信号的音谱和频谱的观察使用windows下的录音机录制一段音乐信号或者采用其他软件截取一段音乐信号(要求:时间不超过5s,文件格式为WAV)使用wavread语句读取音乐信号获取抽样率;(注意:读取的信号是双声道信号,即为双列向量,需要分列处理);输出音乐信号的波形和频谱,观察现象;使用sound语句播放音乐信号,注意不同抽样率下的音调变化,解释现象程序:...

weixin_34855166的博客 3197

基于Matlab的语音信号去噪处理系统设计与实现

语音信号在实际采集过程中不可避免地受到环境噪声的干扰,严重影响语音识别、通信质量和人耳听觉体验。因此,语音去噪作为语音信号处理的核心任务之一,具有重要的理论价值和广泛的应用前景。本章从噪声的来源与分类入手,介绍加性噪声、乘性噪声及脉冲噪声的基本特性,并分析语音信号在时域中的短时能量变化与频域中的频谱分布规律。

weixin_35238815的博客 604

语音质量评价(matlab代码)

语音增强结果评价框架,其中包括四种语音质量评价方法:信噪比SNR,分段信噪比segSNR,对数谱失真LSD,PESQ。还包括生成设定信噪比语音文件的m文件。也适用于其他领域的语音质量评价

乐符识别matlab,基于DPP的自动音符切分识别研究

摘要:基于内容的音乐分析是计算机音乐智能处理领域的重要分支,其中音符的分割和识别是关键技术之一。本文首先根据音级轮廓特征(PCP),对音乐进行特征提取,将帧集通过行列式点过程(DPP)进行建模,最后根据最大后验概率估计(MAP)选出帧子集,从而实现音符的分割。DPP将复杂的概率计算转换为简单的行列式计算,减少了计算量。在钢琴音乐片段多音符的的识别中,得到了67.3%的正确率,解决了多音符的切分识别...

weixin_39622710的博客 1200

matlab运动目标提取代码-HumDetection:语音信号处理的最终课程项目设计

matlab运动目标提取代码 语音哼唱识别及评分系统 1. 功能 识别:对用户输入的一段语音识别得到其频率,经处理后在界面输出旋律,并可以用钢琴来弹奏此旋律 评分:预先设置旋律和节拍,提取处理用户输入的语音文件与设置的旋律及节拍进行对比,根据评分规则输出实际得分 2. 运行环境 Matlab R2017a、 Windows 10 Professional 1803 3. 使用步骤 3.1 哼唱识别系统 打开Matlab软件,切换工作目录到HumDetection文件夹下 双击打开文件HumDetection.m,在菜单栏中选择编辑器,点击运行按钮即可正常运行代码(第一次运行时间可能较长,请耐心等待) 界面加载完毕后,点击选择文件按钮,在弹出的窗口中选择standard1-7.wav文件,软件会将自动提取到的旋律显示在识别结果编辑框里并绘制该语音的时域波形和基频曲线(运行时间可能较长,请耐心等待) 点击时域波形图后面的扬声器标志按钮,你将会听到该语音(请等待图形的红色指示条移动到最右端再进行其他操作,以下所有播放声音时均要满足此条件) 点击钢琴演奏按钮,等待系统生成对应的旋律以及基频提取

【语音分离】基于平均谐波结构建模的无监督单声道音乐声源分离附Matlab代码

音乐声源分离是音频处理领域的重要研究方向,旨在从混合音频信号中分离出不同乐器或人声。单声道音乐分离因其仅依赖单一音频输入,缺乏空间信息,成为该领域的挑战性问题。无监督方法不需要训练数据,能够适应未知音乐类型,具有更广泛的应用前景。平均谐波结构建模是利用音乐信号中谐波成分的统计特性进行分离的有效方法。大多数乐器的谐波结构具有规律性,如基频与泛音之间的固定关系,这种特性可用于区分不同声源。基于平均谐波结构建模的无监督单声道音乐声源分离方法主要包含以下步骤:特征提取:计算音频的 STFT 表示。

Matlab_jiqi的博客 896

matlab 音调跟踪Pitch Tracking

用acf算出的F0 存至矩阵中 可以直接plot(x)出来

matlab说话代码-SoundSignalProcess:语音信号处理项目

matlab说话代码 python_sound_open 《语音信号处理试验教程》(梁瑞宇等)的代码主要是Matlab实现的,现在Python比较热门,所以把这个项目大部分内容写成了Python实现,大部分是手动写的。使用查看帮助文件: Ref

GLM-4.1V-9B-Base创意无限:基于MATLAB算法仿真的AI艺术生成联动

本文介绍了如何在星图GPU平台上自动化部署GLM-4.1V-9B-Base镜像,实现科学与艺术的跨界融合。该镜像能够将MATLAB生成的科学图像转化为富有诗意的AI艺术描述,同时通过算法分析AI画作的数学规律,为科研展示和教育提供创新工具。

weixin_42113456的博客 141

基于Matlab实现音乐识别与自动配置和声的功能.pdf

基于Matlab实现音乐识别与自动配置和声的功能.pdf

上一篇: BWT (Burrows–Wheeler_transform) 解码分析
下一篇: ThinkPHP里的MVC
windroid
博客等级 码龄12年 28粉丝 27原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值