Em alguns artigos, li que o ruído aditivo é branco gaussiano de banda limitada.
Como posso simular esse tipo de ruído usando o MATLAB?
Em alguns artigos, li que o ruído aditivo é branco gaussiano de banda limitada.
Como posso simular esse tipo de ruído usando o MATLAB?
Respostas:
Você geraria ruído gaussiano ilimitado de banda, primeiro gerando ruído branco e depois filtrando-o para a largura de banda desejada. Como um exemplo:
% design FIR filter to filter noise to half of Nyquist rate
b = fir1(64, 0.5);
% generate Gaussian (normally-distributed) white noise
n = randn(1e4, 1);
% apply to filter to yield bandlimited noise
nb = filter(b,1,n);
Apenas como uma pequena adição à resposta de Jason: geralmente você precisa gerar ruído ilimitado de banda com uma dada variação . Você pode adicionar esse código ao código fornecido na resposta de Jason:
var = 3.0; % just an example
scale = sqrt(var)/std(nb);
nb = scale*nb; % nb has variance 'var'
Observe que você precisa fazer o dimensionamento após a filtragem, porque, em geral, o filtro altera a variação de ruído.
Toda vez que você gera amostras de ruído discretas (usando o MATLAB randn
/ rand
por exemplo), na verdade você gera um ruído de banda limitada.
Tudo o que você precisa fazer é ajustar a variação das amostras discretas à variação do ruído "Contínuo" de onde as amostras são retiradas.
A descrição completa é fornecida aqui - Como Simular AWGN (Aditivo Branco Gaussiano Ruído) em Sistemas de Comunicação para Largura de Banda Específica .
Por que não se pode usar a abordagem mencionada neste post ?
Começa com as frequências desejadas e trabalha para trás para construir o sinal, em vez de filtrar. Ele usa código python, mas também links para o código Matlab original.
Existem desvantagens em fazê-lo dessa maneira?
Sei que essa pergunta apareceu na exibição atual porque @Drazick modificou sua resposta para 2013.
rand()
frand()
"ruído branco" é, obviamente, um nome impróprio, mesmo para sinais analógicos. um "sinal de potência" com espectro plano até o infinito também possui potência infinita. o sinal virtualmente gaussiano e "branco" gerado como descrito tem uma potência finita (que é a variação e é 1) e largura de banda finita que, expressa como unilateral, é Nyquist. (para que a 'densidade espectral de potência "ou a potência por unidade de frequência seja 1 / Nyquist.) dimensione-a e faça o deslocamento da maneira que desejar.
suponho que eu possa editar isso mais tarde e adicionar algum pseudo-código tipo C para mostrar isso explicitamente.
Produzir ruído branco de espectro total e filtrá-lo é como se você quisesse pintar uma parede de sua casa de branco, então você decide pintar toda a casa de branco e depois pintar toda a casa, exceto a parede. É idiota. (Mas tem sentido em eletrônica).
Eu criei um pequeno programa C que pode gerar ruído branco em qualquer frequência e largura de banda (digamos, na frequência central de 16kHz e na largura de 2 kHz). Nenhuma filtragem envolvida.
O que eu fiz é simples: dentro do loop principal (infinito) eu gero um sinusóide na frequência central +/- um número aleatório entre-metade da largura de banda e + meia largura de banda, então mantenho essa frequência para um número arbitrário de amostras (granularidade) e isso é o resultado:
Ruído branco de 2kHz de largura na frequência central de 16kHz
Pseudo-código:
while (true)
{
f = center frequency
r = random number between -half of bandwidth and + half of bandwidth
<secondary loop (for managing "granularity")>
for x = 0 to 8 (or 16 or 32....)
{
[generate sine Nth value at frequency f+r]
output = generated Nth value
}
}