Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何增加/减少信号(频率/音调)_Matlab_Octave_Fft - Fatal编程技术网

Matlab 如何增加/减少信号(频率/音调)

Matlab 如何增加/减少信号(频率/音调),matlab,octave,fft,Matlab,Octave,Fft,如何使用fft/ifft增加/减少(频率/基音)和相位我想我已经有了基本代码,但我不确定下一步该怎么做 我被告知repmat和重采样可能会有所帮助,是的,我想线性移动所有组件。我想随着时间调整相位,这样它就会产生驻波。一个信号的相位沿一个方向变化,另一个信号的相位沿相反方向变化 PS:这是在倍频程/matlab代码中完成的 例如,我有一个每秒重复1次的信号,我想让它每秒重复3次 %Voiceprint raise lower freq phase conjugate signal tic cle

如何使用fft/ifft增加/减少(频率/基音)和相位我想我已经有了基本代码,但我不确定下一步该怎么做

我被告知repmat和重采样可能会有所帮助,是的,我想线性移动所有组件。我想随着时间调整相位,这样它就会产生驻波。一个信号的相位沿一个方向变化,另一个信号的相位沿相反方向变化

PS:这是在倍频程/matlab代码中完成的

例如,我有一个每秒重复1次的信号,我想让它每秒重复3次

%Voiceprint raise lower freq phase conjugate signal
tic
clear all, clc,clf,tic
%% Sound /beep calculation complete
filerawbeepStr='calculations_complete.wav';
filerawbeeppathStr='/home/rat/Documents/octave/raw/';
filevoiceprepathStr='/home/rat/Documents/octave/eq_research/main/transform/voice/';
filewavpathStr='/home/rat/Documents/octave/eq_research/main/transform/wav/';
[ybeep, Fsbeep, nbitsbeep] = wavread(strcat(filerawbeeppathStr,filerawbeepStr));
%addpath(”/home/rat/Documents/octave/eq_research/main/transform/”); %add path to location of functions

%1a voice print import
[vp_sig_orig, fs_rate, nbitsraw] = wavread(strcat(filevoiceprepathStr,'voice8000fs.wav')); 

%vp_sig_orig=vp_sig_orig’;
vp_sig_len=length(vp_sig_orig);

%2a create frequency domain
ya_fft = fft(vp_sig_orig);
vp_sig_phase_orig = unwrap(angle(ya_fft));

%get Magnitude
ya_fft_mag = abs(ya_fft);

%3a frequency back to time domain
ya_ifft=real(ifft(ya_fft));

%adjust frequency/phase here? How?
vp_sig_new=real(ifft(ya_fft_mag.*exp(i*vp_sig_phase_orig)));

subplot(3,1,1), plot(vp_sig_orig),title('1 original time domain')
subplot(3,1,2), plot(ya_ifft),title('2 rebuild time domain')
subplot(3,1,3), plot(vp_sig_new),title('3 adjusted time')

这是一种方法,但如果信号较大,则可能必须增加信号的点数

clear,clc
fs = 44100;                   % Sampling frequency
t=linspace(0,1,fs);
freq=1;
ya = sin(2*pi*freq*t)'; %+ 1*sin(2*pi*250*t); 


num_per_sec=5
yb=repmat(ya,num_per_sec,1);%replicate matrix 
xxo=linspace(0,1,length(yb))'; %go from 0 to 1 sec can change speed by incr/decr 1
xxi=linspace(0,1,length(ya))'; %go from 0 to 1 sec and get total samplerate from total y value
yi_t=interp1(xxo,yb,xxi,'linear');

plot(yi_t)

您希望如何准确地修改每个组件的频率?所有部件的固定(即线性)位移?按常数因子(即对数偏移)缩放所有组件?你到底想对相位做什么(为什么)?@Paul R我被告知repmat和重采样可能会有所帮助,是的,所有分量的线性偏移。我想随着时间调整相位,这样它就会产生驻波。一个信号的相位在一个方向上变化,另一个信号的相位在相反的方向上变化。你可能应该编辑你的问题,将这些信息包括在内。这样,你就可以更清楚地知道你想要实现什么