赞
踩
从本文开始将记录一些简单的音频信号处理算法在System Generator中的实现方法。本文将介绍如何搭建音频信号的采集与输出模型。
音频信号属于一维信号,一些基本概念如下:
现在单声道的音频文件很难找,因此使用“格式工厂”将立体声音频文件转换为单声道音频文件,用于设计仿真。System Generator和Gateway In的采样频率设置为48000Hz,仿真时长设置为5s,即只采集和输出5s的音频信号。
本设计采集到音频信号后不做任何处理直接输出,播放输出的音频文件。
我们需要将下载的双声道文件通过matlab转化成单声道文件
- %% 音乐信号处理
- Music = audioinfo("music.mp3");
- [Music_audio,Fs] = audioread("music.mp3");
- Music_one_channel = Music_audio(:,1); %获取单声道
- Music_length = length(Music_one_channel);
-
- T = 10; %音乐持续时间
- T_start = 34; %音乐开始时间
- N = Fs*T;
- N_start = Fs*T_start; %开始时的样本点数
- t = 1:1:N; %持续的样本点数
-
- Music_in(:,1) = 1:N; %输入信号的第一列表示样本点数
- Music_in(:,2) = Music_one_channel(N_start:N_start+N-1); %输入信号的第二列表示单通道的音乐信息
-
- sound(Music_in(:,2),Fs); %播放验证一下
plot一下看看信号幅度谱
- %% 图像输出
- plot(t,Music_in(:,2)),xlabel('音频信号的采样点数'),ylabel('音频信号的幅度谱');
在simulink中添加From Multimedia File模块来读取我们的音频数据
Simulink的Audio System Toolbox中包含了与音频相关的block。上图中的From Multimedia File的作用是读取音频文件,音频文件的相关信息会显示在图标上(mono即表示单声道,stero为双声道)
“File name”中选择音频文件路径;“Number of times to play file”设置从文件中读取的音频信号时间;“Samples per audio channel”设置每个通道读取出的采样点数。音频信号需要通过Gateway In输入到FPGA,但Gateway In不能接收向量型数据,因此这个值通常设置为1更方便。
如果From Multimedia File读取的是立体声音频文件,会以向量的形式输出数据。如果把立体声音频信号直接接到Gateway In会提示如下错误:
System Generator block只支持标量数据类型。Gateway In的图标中输入数据也变成了“?”。需要采集立体声音频时,必须用demux这个block将各声道的音频分开,分别进行信号处理。模型如下图:
为了读取工作区中的变量,我使用simulink中的from/to workspace来读取和导出数据。
信号降采样等效于将音频信号加速处理
将输出导入到工作区后,通过matlab进行读取
- %% Simulink
- output_simulink = out.output.data;
- sound(output_simulink,Fs); %播放验证一下
可以发现,声音被加速了一倍,同样的,如果或我们使用升采样,那么等效于慢速播放
再在matlab中运行,可以发现相较于原始音频而言,经过两次采样操作之后音质下降
参考(244条消息) 【FPGA-DSP】第五期:FFT调用流程_fft流程_༜黎明之光༜的博客-CSDN博客
我们使用的是简化的FFT block
FFT参数设置
注意:一定要将Natural Order给勾选上。除非你知道FFT输出的顺序如何确定,否者按照自然顺序输出。
示波器输出结果如下:
将Simulink导入到工作区的变量在matlab中进行
可以发现经过FFT过后的数据在8377个样本点之后才会有输出,matlab的信号处理如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。