math - 如何在 Matlab 中生成信号的低频版本?

标签 math matlab signal-processing frequency fft

对于正弦输入,我试图修改它的频率,在频谱中切割一些较低的频率,将主频率移向零。由于信号未经过 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])

screenshot

关于math - 如何在 Matlab 中生成信号的低频版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1478560/

相关文章:

c++ - C编程: translated function from MATLAB to C gives slightly (but significantly) different result

java - 使用频率从安卓获取超声波

javascript - 如何在提供迭代次数的同时获取两个数字之间的值范围?

javascript - 获取旋转为 0 时 div 的 x,y 坐标

matlab - getappdata 在 MATLAB 中返回空矩阵

python - scipy.signal.fftconvolve 没有给出所需的结果

c++ - 使用 vDSP 函数的自相关

javascript - 使用css3计算透视旋转的div的绝对尺寸

c# math cos 来自计算器的不同值

image - 用不同颜色标记图像