How to generate a lower frequency version of a signal in Matlab?

Posted by estourodepilha.com on Stack Overflow See other posts from Stack Overflow or by estourodepilha.com
Published on 2009-09-25T17:19:17Z Indexed on 2010/04/16 8:53 UTC
Read the original article Hit count: 326

With a sine input, I tried to modify it's frequency cutting some lower frequencies in the spectrum, shifting the main frequency towards zero. As the signal is not fftshifted I tried to do that by eliminating some samples at the begin and at the end of the fft vector:

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');

But it didn't work as expected. I also tried to remove the center part of the spectrum, but it wielded a higher frequency sine wave too.

How to make it right?

© Stack Overflow or respective owner

Related posts about math

Related posts about fourier