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

📄 freqmod.m

📁 非常好的数字处理教程
💻 M
字号:
function [signal] = freqmod(num_samples, frequency, freq_ratio, ...		amplitude, car_env, mod_env, ix1, ix2, Fs)% Frequency Modulation synthesis %% FREQMOD(num_samples,frequency,freq_skew,amplitude,freq_env,amp_env,partials)%-------------------------------------------------------%	MATLAB code created for MAT201a: Signals and Systems%		Dr. Jerry Gibson%	Copyright University of California, Santa Barbara%-------------------------------------------------------%	freqmod.m%	This code synthesizes a signal using sinusoids and%	separate envelopes for frequency and amplitude.%%	Author: Bob L. Sturm	20030825%-------------------------------------------------------	% Create envelopes	car_envelope = zeros(1,num_samples);	mod_envelope = zeros(1,num_samples);	% Populate envelopes	segment = [0 0];	value = [0 0];	car_env = car_env{:};	for i=1:length(car_env)/2-1,		segment(1) = floor(car_env(2*i-1)*num_samples+1);		% Start		segment(2) = floor(car_env(2*i+1)*num_samples);		% End		value(1) = car_env(2*i);		value(2) = car_env(2*(i+1));		car_envelope(segment(1):segment(2)) = amplitude*0.1* ...			linspace(value(1),value(2),segment(2)-segment(1)+1);	end	%figure	%plot(car_envelope);	mod_env = mod_env{:};	mod_freq = frequency*freq_ratio;	for i=1:length(mod_env)/2-1,		segment(1) = floor(mod_env(2*i-1)*num_samples+1);		% Start		segment(2) = floor(mod_env(2*i+1)*num_samples);		% End		value(1) = mod_env(2*i);		value(2) = mod_env(2*(i+1));		mod_envelope(segment(1):segment(2)) = (ix2-ix1)*mod_freq*0.001* ...			linspace(value(1),value(2),segment(2)-segment(1)+1);	end	%hold on;	%plot(mod_envelope,'k');	% Create signal	signal = zeros(1,num_samples);	modoscil = 0;	for i=1:num_samples,		% Integrate for FM		modoscil = modoscil + (mod_envelope(i)+(ix1*mod_freq))*cos(2*pi*i*mod_freq/Fs);		% For some reason divide modoscil by 2...		signal(i) = car_envelope(i)*sin(2*pi*(frequency*i/Fs) + modoscil/2);	end% HISTORY% Modified from original Common Lisp Music (CLM) code, from CCRMA, Stanford.%; My FM instrument based on Chowning's two-oscillator algorithm%(definstrument fm (start-time duration amplitude freq freq-ratio %                              &key%                              (car-env '(0 1 50 .2 100 0))%                              (car-env-base 1)%                              (mod-env '(0 1 50 .2 100 0))%                              (mod-env-base 1)%                              (mod-index1 0)%                              (mod-index2 1))%   (multiple-value-bind (beg end) (get-beg-end start-time duration)%     (let* ((mod-freq (* freq freq-ratio))%            (car-osc (make-oscil :frequency freq))  %            (mod-osc (make-oscil :frequency mod-freq))%            (car-amp (make-env :envelope car-env %                               :scaler (* amplitude 0.1)%                               :base car-env-base%                               :duration duration))%            (mod-amp (make-env :envelope mod-env %                               :scaler (* (- mod-index2 mod-index1) mod-freq .001)%                               :base mod-env-base%                               :duration duration)))%       (run %        (loop for i from beg to end do%          (outa i (* (env car-amp) %                     (oscil car-osc (* (+ (env mod-amp) (* mod-index1 mod-freq))%                                       (oscil mod-osc)))))%          )))))

⌨️ 快捷键说明

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