generate white noise signal with certain bandwidth?
    18 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
i am trying to generate noise with 5uvrms and the frequncy bandwidth 100hz . then i want to add two noise block to calculate the total rms.
can any one help to generate this ?
0 Kommentare
Antworten (1)
  Star Strider
      
      
 am 17 Nov. 2024
        The filtered signal iis no longer a white-noise signal, although the original signal is.  
Try this — 
Fs = 1000;                                          % Sampling Frequency (Hz)
t = linspace(0, 1E4-1, 1E4).'/Fs;                   % Time Vector
ns = randn(1E+4, 1);                                % Noise Signal
nsf = lowpass(ns, 100, Fs, ImpulseResponse='iir');  % Filter Noise Signal
[FTns,Fv] = FFT1(ns,t);                             % Fourier Transform Of Original Noise Signal
[FTnsf,Fv] = FFT1(nsf,t);                           % Fourier Transform Of Filtered Noise Signal
figure
tiledlayout(2,1)
nexttile
plot(Fv, abs(FTns)*2)
grid
title('Original')
nexttile
plot(Fv, abs(FTnsf)*2)
grid
title('Filtered')
function [FTs1,Fv] = FFT1(s,t)
% Arguments:
%    s: Signal Vector Or Matrix
%    t: Associated Time Vector 
    t = t(:);
    L = numel(t);
    if size(s,2) == L
        s = s.';
    end
    Fs = 1/mean(diff(t));
    Fn = Fs/2;
    NFFT = 2^nextpow2(L);
    FTs = fft((s - mean(s)) .* hann(L).*ones(1,size(s,2)), NFFT)/sum(hann(L));
    Fv = Fs*(0:(NFFT/2))/NFFT;
%     Fv = linspace(0, 1, NFFT/2+1)*Fn;
    Iv = 1:numel(Fv);
    Fv = Fv(:);
    FTs1 = FTs(Iv,:);
end
.
3 Kommentare
  Star Strider
      
      
 am 17 Nov. 2024
				You can also use — 
Fs = 1000;                                                          % Sampling Frequency (Hz)
Fn = Fs/2;
Wp = 100/Fn;                                                        % Stopband Frequency (Normalised)
Ws = 101/Fn;                                                        % Passband Frequency (Normalised)
Rp =  1;                                                            % Passband Ripple
Rs = 60;                                                            % Passband Ripple (Attenuation)
[n,Wp] = ellipord(Wp,Ws,Rp,Rs);                                     % Elliptic Order Calculation
[z,p,k] = ellip(n,Rp,Rs,Wp);                                        % Elliptic Filter Design: Zero-Pole-Gain 
[sos,g] = zp2sos(z,p,k);
t = linspace(0, 1E4-1, 1E4).'/Fs;                                   % Time Vector
ns = randn(1E+4, 1);                                                % Noise Signal
nsf = filtfilt(sos, g, ns);                                         % Filter Noise Signal
[FTns,Fv] = FFT1(ns,t);                                             % Fourier Transform Of Original Noise Signal
[FTnsf,Fv] = FFT1(nsf,t);                                           % Fourier Transform Of Filtered Noise Signal
figure
tiledlayout(2,1)
nexttile
plot(Fv, abs(FTns)*2)
grid
title('Original')
nexttile
plot(Fv, abs(FTnsf)*2)
grid
title('Filtered')
function [FTs1,Fv] = FFT1(s,t)
% Arguments:
%    s: Signal Vector Or Matrix
%    t: Associated Time Vector 
    t = t(:);
    L = numel(t);
    if size(s,2) == L
        s = s.';
    end
    Fs = 1/mean(diff(t));
    Fn = Fs/2;
    NFFT = 2^nextpow2(L);
    FTs = fft((s - mean(s)) .* hann(L).*ones(1,size(s,2)), NFFT)/sum(hann(L));
    Fv = Fs*(0:(NFFT/2))/NFFT;
%     Fv = linspace(0, 1, NFFT/2+1)*Fn;
    Iv = 1:numel(Fv);
    Fv = Fv(:);
    FTs1 = FTs(Iv,:);
end
Unless you also have the DSP System Toolbox, you may need to use the transfer function implementation (b,a vectors) for this filter, instead of the second-order-section implemntation I use here.  It is relatively straightforward to change my code to create that.  See the documentation on ellip for that information.  
.
Siehe auch
Kategorien
				Mehr zu Array and Matrix Mathematics finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



