Broadband signal deesign

4 views (last 30 days)
John on 6 Aug 2011
Answered: Mathieu NOE on 12 Feb 2023
I'm looking to create a test broadband input signal but am having difficulties.
The signal I'm looking to create is a random phase 10-20Hz signal, Fs=10kHz. I've tried creating a power spectrum centered around the 10-20Hz range but cannot figure out how to correctly go back to the time domain from there.
Does anyone have any ideas on how to go about creating this type of signal?
Thanks, John

Answers (1)

Mathieu NOE
Mathieu NOE on 12 Feb 2023
maybe this
you can tune the frequency range , frequency spacing and amplitudes distribution according to your preferences
Fs 10 kHz is quite overkill for such low freq signal
Fs = 1e4;
dt = 1/Fs;
duration = 10; % seconds
t = (0:dt:duration)'; % time vector
freqs = (10:0.5:20); % 21 freqs with 0.5 Hz spacing
amplitudes = ones(size(freqs)); % flat or arbitrary spectral amplitude (up to you)
%% main loop
y = 0;
for ci = 1:numel(freqs)
y = y + amplitudes(ci)*sin(2*pi*freqs(ci)*t+rand*2*pi); % random phase sine
% FFT plot
[f1,fft_spectrum1] = do_fft(t,y);
xlim([0 50]);
title('FFT Sectrum')
function [freq_vector,fft_spectrum] = do_fft(time,data)
time = time(:);
data = data(:);
dt = mean(diff(time));
Fs = 1/dt;
nfft = length(data); % maximise freq resolution => nfft equals signal length
%% use windowing or not at your conveniance
% no window
fft_spectrum = abs(fft(data))*2/nfft;
% % hanning window
% window = hanning(nfft);
% window = window(:);
% fft_spectrum = abs(fft(data.*window))*4/nfft;
% one sidded fft spectrum % Select first half
if rem(nfft,2) % nfft odd
select = (1:(nfft+1)/2)';
select = (1:nfft/2+1)';
fft_spectrum = fft_spectrum(select,:);
freq_vector = (select - 1)*Fs/nfft;


Find more on Signal Generation and Preprocessing in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by