对于正弦输入,我试图修改它的频率,在频谱中切割一些较低的频率,将主频率移向零。由于信号未经过 fftshifted,我尝试通过消除 fft 向量开头和结尾的一些样本来做到这一点:
interval = 1;
samplingFrequency = 44100;
signalFrequency = 440;
sampleDuration = 1 / samplingFrequency;
timespan = 1 : sampleDuration : (1 + interval);
original = sin(2 * pi * signalFrequency * timespan);
fourierTransform = fft(original);
frequencyCut = 10; %% Hertz
frequencyCut = floor(frequencyCut * (length(pattern) / samplingFrequency) / 4); %% Samples
maxFrequency = length(fourierTransform) - (2 * frequencyCut);
signal = ifft(fourierTransform(frequencyCut + 1:maxFrequency), 'symmetric');
但它并没有像预期的那样工作。我还尝试移除频谱的中心部分,但它也使用了更高频率的正弦波。
如何做到正确?
最佳答案
@las3rjock:
它更像是对信号本身进行下采样,而不是 FFT.. 看看<强>downsample .
或者您可以创建一个 timeseries对象,并使用 resample 对其重新采样方法。
编辑:
类似的例子:)
% generate a signal
Fs = 200;
f = 5;
t = 0:1/Fs:1-1/Fs;
y = sin(2*pi * f * t) + sin(2*pi * 2*f * t) + 0.3*randn(size(t));
% downsample
n = 2;
yy = downsample([t' y'], n);
% plot
subplot(211), plot(t,y), axis([0 1 -2 2])
subplot(212), plot(yy(:,1), yy(:,2)), axis([0 1 -2 2])
关于math - 如何在 Matlab 中生成信号的低频版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1478560/