clc;clear;close all; clear all; fs = 8000; [y,fs] = audioread("qingtian.wav"); sigPlayer = audioplayer(y(:,1),fs); myFigure = figure('Name','标题'); waveAxes = subplot(2,1,1); axis(waveAxes,[-inf inf -1 1]); waveAxes.NextPlot = 'replacechildren'; fftAxes = subplot(2,1,2); axis(fftAxes,[-inf inf 0 0.5]); fftAxes.NextPlot = 'replacechildren'; windLength = fs/20; sigPlayer.TimerPeriod = windLength/fs; sigPlayer.TimerFcn = {@fleshPlot,waveAxes,fftAxes,y(:,1),fs,windLength}; play(sigPlayer); while 3>2 [audioIn,Overrun] = step(sigPlayer); ydata_fft=fft(audioIn); ydata_abs=abs(ydata_fft(1:samples/2)); set(pic, 'ydata',audioIn); set(pic2, 'ydata',log(ydata_abs)); drawnow; end function fleshPlot(plr,~,axwave,axfft,sigData,fs,winL) persistent ind; persistent indbase; persistent wavePlot; persistent fftPlot; if isempty(indbase) indbase = 1:winL; end ind = fix((plr.CurrentSample)/winL)*winL+indbase; segData = sigData(ind); wavePlot = plot(axwave,segData); [absFFT,fqax] = fftc2(segData,fs); fftPlot = bar(axfft,fqax,absFFT); end function [X,freqRange]=fftc2(x,fs) N=length(x); X=abs(fft(x))/N; rawRange = 0:fix(N/2); freqRange = (rawRange)*fs/N; LfftInd = rawRange + 1; X = X(LfftInd); X(2:end) = 2*X(2:end); end
时间: 2024-04-19 12:27:58 浏览: 21
这段代码是用来读取并播放音频文件 "qingtian.wav",同时实时绘制音频波形图和频谱图。首先,通过调用`audioread`函数读取音频文件,然后创建一个`audioplayer`对象并设置播放参数。接下来,创建一个图形窗口,并在窗口中创建两个子图来显示波形图和频谱图。然后,设置音频播放器的定时器回调函数,该回调函数会在每个时间窗口中更新波形图和频谱图的数据,并通过调用`play`函数开始播放音频。最后,使用循环不断获取音频数据并更新图像。
`fleshPlot`函数用于更新波形图和频谱图的数据。它使用持久变量来保存一些状态信息,如当前音频样本的索引和绘制的曲线对象。在每个时间窗口中,它从输入音频数据中提取一段数据,并使用`plot`和`bar`函数将数据更新到波形图和频谱图中。
`fftc2`函数用于计算离散傅立叶变换,并返回频谱幅值和对应的频率范围。
请注意,这段代码可能存在一些错误或不完整的地方,例如未定义变量`samples`和`pic`,在使用之前应该先定义它们。另外,循环`while 3>2`可能是一个无限循环,你可能需要添加一个停止循环的条件。
相关问题
clc;clear all ;close all; xpipei=zeros(19,21);%定义变量。变量规划 readbmp=du
这段代码实际上是MATLAB的代码。
首先,clc命令用于清除命令窗口的内容,使其变为空白。
clear all命令用于清除MATLAB工作空间中的所有变量和函数。
close all命令用于关闭所有已打开的图形窗口。
xpipei=zeros(19,21); 定义了一个名为xpipei的变量,它是一个19行、21列的零矩阵。
readbmp=du; 定义了一个名为readbmp的变量,它的值是du。
根据代码的含义,这段代码的作用是:
清除命令窗口的内容,清除工作空间中的所有变量和函数,关闭所有打开的图形窗口。然后定义一个名为xpipei的19行21列的零矩阵,以及一个名为readbmp的变量,其值为du。
写matlab会一开始输入代码clear all; clc; close all
这是一种常见的 MATLAB 代码开头格式,它的作用是:
1. 清空当前工作空间中的所有变量和函数,以防止它们与新代码的变量发生冲突。
2. 清空命令窗口,以便在新代码执行时能够清晰地看到输出结果。
3. 关闭所有打开的图形窗口,以便在新代码执行时能够创建新的图形窗口。
在编写 MATLAB 代码时,这种格式可以帮助保持代码的整洁和可读性,并确保代码运行时不会受到之前的代码或数据的干扰。