📄 modexpofn.m
字号:
case 'fourier' if handles.fileopen{3} fourierexpogui(handles.audio{3}); end case 'print' print_figure(f); case 'close' close_figure(f,figname(1:end-4)); return; end set(f,'UserData',handles);% --------------------------------------------------------------------function loadTimePlot(handles, signum) Fs = handles.audio{signum}.Fs; t = [0:1/Fs:(length(handles.audio{signum}.data)-1)/Fs]; eval(['timeplot = handles.sig_' num2str(signum) '_time;']); axes(timeplot) plot(t,handles.audio{signum}.data) maxtime = length(t)/Fs; set(timeplot,'XLim',[0 maxtime]); set(timeplot,'YLim',[-1.1 1.1]); if (signum ~= 1) set(timeplot,'YTickLabel',['']); end grid; xlabel('time (s)'); % --------------------------------------------------------------------function loadSpecPlot(handles, signum) Fs = handles.audio{signum}.Fs; eval(['spectrumplot = handles.sig_' num2str(signum) '_spec;']); axes(spectrumplot); handles.pos = get(gca,'Position'); % Save axes position if (get(handles.interpolate,'Value')) if (get(handles.dB,'Value')) pcolor(handles.audio{signum}.st,handles.audio{signum}.bin,... 20*log10(abs(handles.audio{signum}.spectrum))); else pcolor(handles.audio{signum}.st,handles.audio{signum}.bin,... abs(handles.audio{signum}.spectrum)); end shading interp; else if (get(handles.dB,'Value')) imagesc(handles.audio{signum}.st,handles.audio{signum}.bin,... 20*log10(abs(handles.audio{signum}.spectrum))); else imagesc(handles.audio{signum}.st,handles.audio{signum}.bin,... abs(handles.audio{signum}.spectrum)); end end axis xy; ylabel('Frequency (Hz)'); if (signum ~= 1) ylabel(''); set(spectrumplot,'YTickLabel',['']); end contents = get(handles.colormap,'String'); cmap = colormap(lower(contents{get(handles.colormap,'Value')})); if (get(handles.inverse,'Value')) cmap = flipud(cmap); end colormap(cmap); set(spectrumplot,'XTickLabel',['']); ha = axes('position',[0.15+(signum-1)*0.31 0.15 0.075 0.015]); set(ha,'Visible','off'); ts = 5.5; to = 2; info = sprintf(['Filename: %s\n Duration: %s seconds\n Fs: %s Hz'], ... handles.audio{signum}.filenamepath, ... num2str(length(handles.audio{signum}.data)/Fs), ... num2str(Fs)); eval(['set(handles.text' num2str(signum) ',''String'', info);']);% --------------------------------------------------------------------function handles = loadworkspace(handles) [file, path] = uigetfile({'*.mat','MATLAB datafile'}, 'Open'); load([path file]); set(handles.colormap,'Value',graphprops{1}); set(handles.window,'Value',graphprops{2}); set(handles.fftsize,'Value',graphprops{3}); set(handles.inverse,'Value',graphprops{4}); set(handles.dB,'Value',graphprops{5}); set(handles.interpolate,'Value',graphprops{6}); for signum=1:3, if (openfiles{signum}) handles.fileopen{signum} = true; handles.audio{signum} = audio{signum}; end end% --------------------------------------------------------------------function handles = amdsbsc(handles) signal_1 = handles.audio{1}.data; % Carrier signal_2 = handles.audio{2}.data; % Modulator samples = length(signal_1); while length(signal_1) > length(signal_2) signal_2 = [signal_2; signal_2]; end Fs = handles.audio{1}.Fs; filename = ['AM-DSBSC']; audiodata = normalize(signal_1(1:samples).*signal_2(1:samples)); handles.audio{3}.t = [0:1/Fs:(length(audiodata)-1)/Fs]; handles.audio{3}.filenamepath = filename; handles.audio{3}.Fs = Fs; handles.audio{3}.data = audiodata; 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); handles.fileopen{3} = true;function handles = amdsbtc(handles) % In the future scale sound to be envelope to be exactly the length % of the sound it is being applied to. signal_1 = handles.audio{1}.data; signal_2 = handles.audio{2}.data; % Make unipolar %signal_1 = signal_1 + min(signal_1); signal_1 = signal_1 + 2; samples = length(signal_1); while length(signal_1) > length(signal_2) signal_2 = [signal_2; signal_2]; end Fs = handles.audio{1}.Fs; filename = ['AM-DSBTC']; am_offset = 1.5; audiodata = normalize((signal_1(1:samples)+am_offset).*signal_2(1:samples)); handles.audio{3}.t = [0:1/Fs:(length(audiodata)-1)/Fs]; handles.audio{3}.filenamepath = filename; handles.audio{3}.Fs = Fs; handles.audio{3}.data = audiodata; 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); handles.fileopen{3} = true;% Sing sideband transmitted carrierfunction handles = ssbsc(handles) signal_1 = handles.audio{1}.audiodata; signal_2 = handles.audio{2}.audiodata; if (length(signal_2) > length(signal_1)) samples = length(signal_1); else samples = length(signal_2); end Fs = handles.audio{1}.Fs; filename = ['SSBSC']; audiodata = signal_1(1:samples).*signal_2(1:samples); % Uknown if this is correct... audiodataH = hilbert(signal_1(1:samples)).*hilbert(signal_2(1:samples)); % Hilbert transform %audiodataH = hilbert(audiodata); % Retain uppersideband (lower sideband = '+') audiodata = audiodata - audiodataH; audiodata = real(audiodata); handles.audio{3}.t = [0:1/Fs:(length(audiodata)-1)/Fs]; handles.audio{3}.filenamepath = filename; handles.audio{3}.Fs = Fs; % Normalize if (max(abs(audiodata)) > 1.0) audiodata = audiodata./max(abs(audiodata)+0.1); end handles.audio{3}.audiodata = audiodata; 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); handles.fileopen{3} = true; % --------------------------------------------------------------------function saveworkspace(handles) [file, path] = uiputfile({'*.mat','MATLAB datafile'}, 'Save as'); % Save these variables audio = handles.audio; openfiles = handles.fileopen; graphprops = {get(handles.colormap,'Value'), ... get(handles.window,'Value'),... get(handles.fftsize,'Value'),... get(handles.inverse,'Value'),... get(handles.dB,'Value'),... get(handles.interpolate,'Value')}; save([path file], 'audio','openfiles','graphprops');function audiodata = calculate_sig(freqenv,ampenv,varargin) switch nargin case 2 Fs = 44100; samples = Fs; case 3 samples = varargin{1}; Fs = 44100; case 4 samples = varargin{1}; Fs = varargin{2}; end minfreq = min(freqenv(2:2:end)); maxfreq = max(freqenv(2:2:end)); if (minfreq ~= maxfreq) freqenv(2:2:end) = freqenv(2:2:end) - minfreq; freqskew = max(freqenv(2:2:end)); freqenv(2:2:end) = freqenv(2:2:end)./freqskew; else freqskew = 0; freqenv(2:2:end) = freqenv(2:2:end)./minfreq; end amp = 1; % Synthesize modulation signal audiodata = additive(samples, minfreq, freqskew, amp, ... {freqenv}, {ampenv}, {[1 1]}, Fs); audiodata.data = audiodata'; audiodata.filenamepath = ' '; audiodata.Fs = Fs; audiodata.nbits = 16;%function save_modulation_soundfile_Callback(hObject, eventdata, handles)% signum = 2;% if (handles.fileopen{signum})% % Popup menu to write soundfile to% [filename, pathname] = uiputfile('*.wav', 'Save sound as');% if isequal(filename,0) | isequal(pathname,0)% return;% end% signal = handles.audio{signum}.audiodata;% Fs = handles.audio{signum}.Fs;% if (max(abs(signal)) > 0.9) % signal = signal./max(abs(signal)+0.1);% end% wavwrite(signal,Fs,16,[pathname filename]);% disp(['File saved as ', fullfile(pathname, filename)])% end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -