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

📄 modexpofn.m

📁 非常好的数字处理教程
💻 M
📖 第 1 页 / 共 2 页
字号:
function modexpofn(action)	if nargin < 1		action='init';	end	% Fix singlesideband	% Time zoom resets	% Create demodulation	name = mfilename;	figname = [name(1:end-2) '_fig'];	f=findobj('Tag',figname);    handles = get(f,'UserData');	switch action		case 'help'            display_help(figname);		case 'init'            setdefaults;            movegui(f,'center');			reset(handles.sig_1_spec);			reset(handles.sig_2_spec);			reset(handles.sig_3_spec);			reset(handles.sig_1_time);			reset(handles.sig_2_time);			reset(handles.sig_3_time);			handles.fileopen = {false, false, false};			set(handles.freqzoom,'Value',1);		case 'loadsound'			signum = handles.signum;			handles.audio{signum} = load_audiodata;            if ~isfield(handles.audio{signum}, 'filenamepath')                return;            end            if (size(handles.audio{signum}.data,2) > 1)                handles.audio{signum}.data = to_mono(handles.audio{signum}.data);            end            handles.fileopen{signum} = true;			if signum == 2 & handles.fileopen{1}				while length(handles.audio{1}.data) > length(handles.audio{2}.data)					handles.audio{2}.data = [handles.audio{2}.data; handles.audio{2}.data];				end				handles.audio{2}.data = handles.audio{2}.data(1:length(handles.audio{1}.data));			elseif signum == 1 & handles.fileopen{2}				while length(handles.audio{1}.data) > length(handles.audio{2}.data)					handles.audio{2}.data = [handles.audio{2}.data; handles.audio{2}.data];				end				handles.audio{2}.data = handles.audio{2}.data(1:length(handles.audio{1}.data));			end			contents = get(handles.fftsize,'String');            fftsize = str2double(contents{get(handles.fftsize,'Value')});            contents = get(handles.window,'String');            shape = contents{get(handles.window,'Value')};			[handles.audio{signum}.spectrum,...             handles.audio{signum}.bin,...             handles.audio{signum}.st] = ...                spectrogram(handles.audio{signum}, fftsize, shape);			set(f,'UserData',handles);			loadSpecPlot(handles, signum);			loadTimePlot(handles, signum);			linkedzoom([handles.sig_1_time, handles.sig_1_spec,...				handles.sig_2_time, handles.sig_2_spec, ...				handles.sig_3_time, handles.sig_3_spec],'onx');			modexpofn 'freqzoom';			timeplot = eval(['handles.sig_' num2str(signum) '_time']);			handles.xlim_orig = get(timeplot,'XLim');			modexpofn 'freqzoom';		case 'write_soundfile'			if (handles.fileopen{2})				write_soundfile(handles);			end        case 'write_modsoundfile'			if (handles.fileopen{3})				write_soundfile(handles);			end		case 'play'			signum = handles.signum;            if (handles.fileopen{signum})				timeplot = eval(['handles.sig_' num2str(signum) '_time']);				samples = round(get(timeplot,'XLim').*handles.audio{signum}.Fs+1);				if samples(1) <= 0					samples(1) = 1;				elseif samples(2) > length(handles.audio{signum}.data)					samples(2) = length(handles.audio{signum}.data);				end                audiodata.data = handles.audio{signum}.data(samples(1):samples(2));                audiodata.Fs = handles.audio{signum}.Fs;                eval(['playbutton = handles.s' num2str(signum) '_play;']);                play_audiodata(audiodata, playbutton);            end		case {'fftsize','window'}			for signum = 1:3				if (handles.fileopen{signum})					contents = get(handles.fftsize,'String');					fftsize = str2double(contents{get(handles.fftsize,'Value')});					contents = get(handles.window,'String');					shape = contents{get(handles.window,'Value')};					[handles.audio{signum}.spectrum,...					 handles.audio{signum}.bin,...					 handles.audio{signum}.st] = ...						spectrogram(handles.audio{signum}, fftsize, shape);					loadSpecPlot(handles, signum);				end			end			modexpofn 'freqzoom';		case {'db','colormap','inverse','interpolate'}			for signum = 1:3				if (handles.fileopen{signum})					eval(['timeplot = handles.sig_' num2str(signum) '_time;']);					xlim = get(timeplot,'XLim');					eval(['spectrumplot = handles.sig_' num2str(signum) '_spec;']);					loadSpecPlot(handles, signum);					set(spectrumplot,'XLim',xlim);				end			end			modexpofn 'freqzoom';		case 'create_modsig'			% Open new GUI window to create modulation signal			[freqenv,ampenv] = modsig;			if handles.fileopen{2}				Fs = handles.audio{2}.Fs;				samples = length(handles.audio{2}.data);			else				Fs = 44100;				samples = 1*Fs;			end			signum = 1;			handles.audio{signum} = calculate_sig(freqenv,ampenv,samples,Fs);			handles.fileopen{signum} = true;			contents = get(handles.fftsize,'String');			fftsize = str2double(contents{get(handles.fftsize,'Value')});			contents = get(handles.window,'String');			shape = contents{get(handles.window,'Value')};			[handles.audio{signum}.spectrum,...			 handles.audio{signum}.bin,...			 handles.audio{signum}.st] = ...				spectrogram(handles.audio{signum}, fftsize, shape);			loadSpecPlot(handles, signum);			loadTimePlot(handles, signum);			set(f,'UserData',handles);			modexpofn 'freqzoom';		case 'create_carsig'			% Open new GUI window to create modulation signal			[freqenv,ampenv] = modsig;			if handles.fileopen{1}				Fs = handles.audio{1}.Fs;				samples = length(handles.audio{1}.data);			else				Fs = 44100;				samples = 1*Fs;			end			signum = 2;			handles.audio{signum} = calculate_sig(freqenv,ampenv,samples,Fs);			handles.fileopen{signum} = true;			contents = get(handles.fftsize,'String');			fftsize = str2double(contents{get(handles.fftsize,'Value')});			contents = get(handles.window,'String');			shape = contents{get(handles.window,'Value')};			[handles.audio{signum}.spectrum,...			 handles.audio{signum}.bin,...			 handles.audio{signum}.st] = ...				spectrogram(handles.audio{signum}, fftsize, shape);			loadSpecPlot(handles, signum);			loadTimePlot(handles, signum);			set(f,'UserData',handles);			modexpofn 'freqzoom';		case 'amdsbsc'			if (handles.fileopen{1} & handles.fileopen{2})				handles = amdsbsc(handles);				set(f,'UserData',handles);				signum = 3;				contents = get(handles.fftsize,'String');				fftsize = str2double(contents{get(handles.fftsize,'Value')});				contents = get(handles.window,'String');				shape = contents{get(handles.window,'Value')};				[handles.audio{signum}.spectrum,...				 handles.audio{signum}.bin,...				 handles.audio{signum}.st] = ...					spectrogram(handles.audio{signum}, fftsize, shape);				loadSpecPlot(handles, signum);				loadTimePlot(handles, signum);				modexpofn 'freqzoom';			else				warndlg(['You must open two files to perform modulation ', ...					' synthesis!'],'Error');			end		case 'amdsbtc'			if (handles.fileopen{1} & handles.fileopen{2})				handles = amdsbtc(handles);				set(f,'UserData',handles);				signum = 3;				contents = get(handles.fftsize,'String');				fftsize = str2double(contents{get(handles.fftsize,'Value')});				contents = get(handles.window,'String');				shape = contents{get(handles.window,'Value')};				[handles.audio{signum}.spectrum,...				 handles.audio{signum}.bin,...				 handles.audio{signum}.st] = ...					spectrogram(handles.audio{signum}, fftsize, shape);				loadSpecPlot(handles, signum);				loadTimePlot(handles, signum);				modexpofn 'freqzoom';			else				warndlg(['You must open two files to perform modulation ', ...					' synthesis!'],'Error');			end        case 'ssbsc'			if (handles.fileopen{1} & handles.fileopen{2})				handles = ssbsc(handles);				set(f,'UserData',handles);				signum = 3;				contents = get(handles.fftsize,'String');				fftsize = str2double(contents{get(handles.fftsize,'Value')});				contents = get(handles.window,'String');				shape = contents{get(handles.window,'Value')};				[handles.audio{signum}.spectrum,...				 handles.audio{signum}.bin,...				 handles.audio{signum}.st] = ...					spectrogram(handles.audio{signum}, fftsize, shape);				loadSpecPlot(handles, signum);				loadTimePlot(handles, signum);				modexpofn 'freqzoom';			else				warndlg(['You must open two files to perform modulation ', ...					' synthesis!'],'Error');			end		case 'loadworkspace'			handles = loadworkspace(handles);			set(f,'UserData',handles);			for signum=1:3,				if (handles.fileopen{signum})					loadSpecPlot(handles, signum);					loadTimePlot(handles, signum);				end			end		case 'saveworkspace'			saveworkspace(handles);        case 'zoomreset'			if isfield(handles,'xlim_orig')				for signum=1:3					timeplot = eval(['handles.sig_' num2str(signum) '_time']);					specplot = eval(['handles.sig_' num2str(signum) '_spec']);					set(timeplot,'XLim',handles.xlim_orig);					set(specplot,'XLim',handles.xlim_orig);				end            end			linkedzoom([handles.sig_1_time, handles.sig_1_spec,...				handles.sig_2_time, handles.sig_2_spec, ...				handles.sig_3_time, handles.sig_3_spec],'onx');		case 'freqzoom'            val = get(handles.freqzoom,'Value');            if val == 0,                val = 0.001;            end            for signum = 1:3                specplot = eval(['handles.sig_' num2str(signum) '_spec']);                if (handles.fileopen{signum})                    Fs = handles.audio{signum}.Fs;                    set(specplot,'YLim',[0 val*Fs/2])                end            end

⌨️ 快捷键说明

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