⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 whitevowel.m

📁 语音信号分析软件
💻 M
字号:
function [output,aCoeff] = WhiteVowel(data,sr,L,pos)% function [output,aCoeff] = WhiteVowel(data,sr,L,pos)%% Speech is often described as having spectral peaks or formants which % identify the phonetic signal. An interesting experiment, first proposed by% XXX, filters a speech signal to remove all the formant information at one% time during the speech. If there are no formant peaks, how can the speech% be understood?  It turns out that processing, much like RASTA, means that% relative changes in spectrum are the most important, thus the speech signal% is understood because the formant transitions carry the information.  This% gives speech an important transparency due %% This function takes a speech signal (data) with a given sampling rate (sr).% It then finds the L-order LPC filter that describes the speech at the given% position (pos ms).  The entire speech signal is then filtered with the% inverse of the LPC filter, effectively turning the speech spectrum at the % given time white (flat).% Chris Pal, Interval, May 1997% (c) 1998 Interval Research Corporation  fr = 20; fs = 30; preemp = .9378;			% LPC defaults[row col] = size(data);if col==1 data=data'; endnframe = 0;msfr = round(sr/1000*fr);msfs = round(sr/1000*fs);duration = length(data);msoverlap = msfs - msfr;frameNumber = floor(pos/1000*sr/msfr);frameStart = round(pos/1000*sr - msfs/2);	                frameData = data(frameStart:(frameStart+msfs-1));   aCoeff = proclpc(frameData, sr, L, fr, fs, preemp);                                % Calculate the filter response                                % by evaluating the z-transformspec=lpc_spec(aCoeff);subplot(2,3,1);plot(spec);title('LPC Spectral Slice');ylabel('Original')								% Now do the actual whitening filteroutput = filter(aCoeff,1,data)';frameData = output(frameStart:(frameStart+msfs-1));   bCoeff = proclpc(frameData, sr, L, fr, fs,  preemp);spec=lpc_spec(bCoeff);subplot(2,3,4);plot(spec);ylabel('Whitened'); xlabel('FFT Bin');% 256-DFTorigSpec = 20*log10(abs(specgram(data,512,sr,msfs,msoverlap)));subplot(2,3,2),imagesc(origSpec); axis xy; colormap(1-gray);title('Spectrogram');synSpec = 20*log10(abs(specgram(output,512,sr,msfs,msoverlap)));subplot(2,3,5),imagesc(synSpec); axis xy; colormap(1-gray);xlabel('Frame #');origloc = origSpec(:,frameNumber); origloc=origloc-max(origloc);origmin=min(origloc);subplot(2,3,3),plot(origloc),title('Spectrogram'),axis([1 length(origloc) origmin 0]);filloc = synSpec(:,frameNumber); filloc=filloc-max(filloc);subplot(2,3,6),plot(filloc);ylabel('db');axis([1 length(origloc) origmin 0]);xlabel('FFT Bin');function spec=lpc_spec(aCoeff)gain=0;cft=0:(1/255):1;for index=1:size(aCoeff,1) gain = gain + aCoeff(index)*exp(-i*2*pi*cft).^index;endgain = abs(1./gain);spec = 20*log10(gain(1:128))';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -