首页 > 编程知识 正文

短时傅里叶变换程序设计思路,小波分析的matlab实现

时间:2023-05-05 02:07:03 阅读:119982 作者:595

本文主要给出一点音频,通过短时傅立叶变换和智能咖啡变换绘制时频图。

0、准备工作

首先准备音频。 事先用ffmpeg切断1秒的音频。 音频采样率为44100,但采样点数为46076点,时间约为1.04s秒。

1、短时傅里叶变换

首先,在matlab中,短时傅立叶变换的分析函数为spectrogram,其使用状况如下。

语法:

[S,f,t,p]=spectrogram(x,window,noverlap,nfft,fs ) ]

[S,f,t,p]=spectrogram(x,window,noverlap,f,fs ) ]

说明:如果使用时没有输出参数,光谱图将自动绘制; 如果有输出参数,则返回输入信号的短时间傅立叶变换。 当然,也可以根据函数的返回值s、f、t、p绘制频谱图。 具体请参照示例。

参数:

x---输入信号的矢量。 缺省情况下,如果没有后续输入参数,则x分为八部分并分别进行转换;如果x不能分为八部分,则截断。 默认情况下,其他参数的默认值为

窗口---窗函数,默认为nfft长汉明窗Hamming

noverlap---每个段的重复采样数。 默认值在段之间产生50%的重复

用于NFFT---FFT转换的长度,缺省值为256和大于每段长度的最小二乘之间的最大值。 另外,除了常数之外,还可以指定频率矢量f

fs---采样频率,默认归一化频率。

窗口---窗函数。 如果窗口为整数,则x分割为窗口字段,每个字段使用Hamming窗函数添加窗。 如果窗口是向量,则x被分割为length(window )段,每个段使用窗口向量中指定的窗函数打开窗。 因此,在想要取得specgram函数的功能的情况下,指定256长度的Hann窗即可。

Noverlap---各段之间重叠的样本点数。 它必须是小于窗口或长度(窗口)的整数。 其意思是,两个相邻的窗户不是跟在后面,而是两个窗户交叉,有重叠的部分。

Nfft---计算离散傅立叶变换的分数。 它必须是标量。

Fs---如果指定采样频率Hz、[],则默认值为1Hz。

S---输入信号x的短时傅立叶变换。 其中每一列包含短期局部时间的频率分量估计,时间沿列增加,频率沿行增加。

如果x是长度为Nx的复信号,则s是nfft行k列的复矩阵。 这里,k依赖于窗

如果窗口是标量,则k=fix((NX-nOverlap )/(window-noverlap ) )

如果窗口是向量,则k=fix((NX-noverlap )length ) window )-nOverlap ) )

对于实信号x,如果nfft为偶数,则s的行数为nfft/2 1,如果nfft为奇数,则行数为[nfft1]/2,并且列数相同。

F---输入变量使用f频率向量。 函数使用Goertzel方法,以f指定的频率计算光谱图。 指定的频率将舍入为与信号分辨率相关的最近的DFT容器(可接受的星星)。 在其他使用nfft的语法中,使用短时傅立叶变换法。 关于返回值的f向量,是四舍五入的频率,其长度等于s的行数。

当计算T---谱图时,其长度等于上面定义的k,值是每个分割段的中点。

对于p--能谱密度PSD (功率谱密度)、实信号,p是各级PSD的单边周期估计; 如果对复信号指定f频率向量,则p为双边PSD。

MATLAB程序:

[Au,fs]=audioread(c:(users ) cdq )桌面(output.MP3 ) ); % Fs采样率44100[B,f,t,p ]=spectrogram (au (:1 ),1024,512,1024,Fs ); % B是f大小行t大小列的频率峰值,p是对应的能谱密度figureimagesc(t、f、c ); set(GCA,' YDir ',' normal ' ) colorbar; xlabel (时刻t/s ); ylabel (频率f/Hz ); title (短时傅立叶时间频率图); 执行结果:

2、潇洒的咖啡变换

        首先,在matlab中,潇洒的咖啡变换的分析函数为cwt,其使用情况如下:

        cwt函数功能:实现一维连续潇洒的咖啡变换的函数。
        cwt函数语法格式: 

        COEFS=cwt(S, SCALES, 'wname')

        COEFS=cwt(S, SCALES, 'wname', 'plot')

        COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE')

COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE', XLIM)

使用说明:cwt为一维潇洒的咖啡变换的函数。

格式 COEFS=cwt(S, SCALES, 'wname') 采用'wname'潇洒的咖啡,在正、实尺度SCALES下计算向量一维潇洒的咖啡系数。

格式 COEFS=cwt(S, SCALES, 'wname', 'plot') 除了计算潇洒的咖啡系数外,还加以图形显示。

格式 COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE') 计算并画出连续潇洒的咖啡变换的系数,并使用PLOTMODE对图形着色。

格式 COEFS=cwt(S, SCALES, 'wname', 'plot') 相当于 格式 COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE') 中的语法 COEFS=cwt(S, SCALES, 'wname', 'absglb')

格式 COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE', XLIM) 能够计算并画出连续潇洒的咖啡变换的系数。系数使用PLOTMODE和XLIM进行着色。其中:XLIM=[x1,x2],并且有如下关系:1<=x1<=x2<=length(S)。

MODE值含义:

'lvl' scale-by-scale着色模式

'glb' 考虑所有尺度的着色模式

'abslvl'或'lvlabs' 使用系数绝对值的scale-by-scale着色模式

'absglb'或'glbabs' 使用系数绝对值并考虑所有尺度的着色模式

COEFS行的大小等于SCALES尺度的长度,COEFS列的大小等于信号S的长度。

MATLAB程序:

wavename='cmor3-3';totalscal=1024;Fc=centfrq(wavename); % 潇洒的咖啡的中心频率 测得Fc = 3c=2*Fc*totalscal; % 测得c = 1536scals=c./(1:totalscal);f=scal2frq(scals,wavename,1/fs); % 将尺度转换为频率 频率在0-500Hz取1024个点coefs = cwt(Au(:,1),scals,wavename); % 求连续潇洒的咖啡系数t=0:1/fs:size(Au(:,1))/fs;figureimagesc(t,f,abs(coefs));set(gca,'YDir','normal')colorbar;xlabel('时间 t/s');ylabel('频率 f/Hz');itle('潇洒的咖啡时频图');

运行结果:









版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。