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

📄 create_cssdb.m

📁 非常好的数字处理教程
💻 M
字号:
function database = create_CSSDB(sounddata, varargin)	%vargin can be window_size, window_skip, analysis parameters: (zero, rms, ...)	% sounddata = struct('data',[],'Fs',44100,'nBits',16,'filename');	error(nargchk(2,15,nargin));	anal_param = cell(1,10);	sound = sounddata.data;	Fs = sounddata.Fs;	if nargin < 2 & ~ischar(varargin{1}),		window_size = 512;		fprintf('Assuming window_size = %d\n', window_size);	elseif nargin < 3 & ~ischar(varargin{2}),		window_size = varargin{1};		window_skip = window_size/2;		fprintf('Assuming window_skip = %d\n', window_skip);	elseif nargin >= 4		window_size = varargin{1};		window_skip = varargin{2};		% determine analysis types		param_num = 1;		for i=3:nargin-1,			arg = varargin{i};			anal_param(param_num) = {lower(arg)};			param_num = param_num + 1;		end	end	num_params = param_num-1;	num_samples = size(sound,1);	anal_window = hamming(window_size);	num_windows = floor(num_samples/window_skip-1);	num_channels = size(sound,2);	% Print out analysis parameters	fprintf('Analysis:\n\t%s\n\tnum_samples = %d\n\tnum_channels = %d\n\tFs = %d\n\twindow_size = %d\n\twindow_skip = %d\n\t',...			sounddata.filename, num_samples, num_channels, Fs, window_size, window_skip);	fprintf('Analysis Types:\t');	for i=1:num_params,		fprintf('%s  ', anal_param{i});	end	fprintf('\n');	% Generate database	% Samples 		Analysis Types	database = struct('data',{{}},'datatype',{{}},'anal_file','',...			'num_channels',num_channels,'Fs',Fs, 'window_skip',window_skip);	database.data = cell(num_windows*num_channels,num_params+1);	database.datatype = cell(1,num_params);	database.anal_file = sounddata.filename;	database.datatype(1,1) = {cellstr('samples')};	for i=1:num_params,		database.datatype(1,i+1) = {anal_param(i)};	end	for k = 1:num_channels,		for i = 1:num_windows,			start_sample = (i-1)*window_skip + 1;			end_sample = start_sample + window_size-1;			frame = sound(start_sample:end_sample,k).*anal_window;			database.data{i+(k-1)*num_windows,1} = frame;			for j=1:num_params,				switch(anal_param{j})					case 'zero'						database.data{i+(k-1)*num_windows,j+1} = zero_crossings(frame);					case 'rms'						database.data{i+(k-1)*num_windows,j+1} = rms(frame);					case 'spec_centroid'						database.data{i+(k-1)*num_windows,j+1} = ...							spec_centroid(frame,Fs);				end			end		end	end	for j=1:num_params,		fprintf('\tMean %s = %6.4f\n', anal_param{j}, ...			mean(cat(1,database.data{2:end,j+1})));	end	fprintf('\t%d data points\n\n', num_windows*num_channels);

⌨️ 快捷键说明

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