查看单个帖子
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在Matlab中生成信号的低频版本?

使用正弦输入,我试图修改它的频率,以削减频谱中的一些较低频率,将主频率移向零。由于信号未进行fft移位,因此我尝试通过在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进行下采样

或者,您可以创建一个时间序列对象,然后使用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])



更多&回答...
poster 当前离线   回复时引用此帖