Friday 9 February 2018

Moving average fft matlab


Usando o MATLAB, como posso encontrar a média móvel de 3 dias de uma coluna específica de uma matriz e acrescentar a média móvel a essa matriz, estou tentando calcular a média móvel de 3 dias de baixo para o topo da matriz. Eu forneci o meu código: Dada a seguinte matriz a e máscara: tentei implementar o comando conv, mas recebo um erro. Aqui está o comando conv que eu tentei usar na 2ª coluna da matriz a: A saída que eu desejo é dada na seguinte matriz: Se você tiver alguma sugestão, eu apreciaria muito. Obrigado Para a coluna 2 da matriz a, eu estou informando a média móvel de 3 dias da seguinte forma e colocando o resultado na coluna 4 da matriz a (I renomeou a matriz a como 39desiredOutput39 apenas para ilustração). A média de 3 dias de 17, 14 e 11 é de 14 a média de 3 dias de 14, 11, 8 é 11, a média de 3 dias de 11, 8, 5 é de 8 e a média de 3 dias de 8, 5, 2 é 5. Não há valor nas 2 linhas inferiores para a 4ª coluna porque a computação para a média móvel de 3 dias começa na parte inferior. A saída 39valid39 não será mostrada até pelo menos 17, 14 e 11. Espero que isso faça sentido ndash Aaron 12 de junho 13 às 1:28 Em geral, isso ajudaria se você mostrar o erro. Neste caso, você está fazendo duas coisas erradas: primeiro sua convolução precisa ser dividida por três (ou o comprimento da média móvel) Em segundo lugar, observe o tamanho de c. Você não pode simplesmente se encaixar em c. A maneira típica de obter uma média móvel seria usar o mesmo: mas isso não se parece com o que você deseja. Em vez disso, você é obrigado a usar algumas linhas: o que é o alisamento e como posso fazê-lo. Eu tenho uma matriz em Matlab, que é o espectro de magnitude de um sinal de fala (a magnitude de 128 pontos da FFT). Como liso isso usando uma média móvel Do que eu entendo, eu deveria ter um tamanho de janela de um certo número de elementos, ter uma média, e isso se torna o novo elemento 1. Em seguida, deslize a janela para a direita por um elemento, leve a média, que se torna o 2º elemento, e assim por diante. É realmente assim que funciona, não tenho certeza de mim mesmo, se eu fizer isso, no meu resultado final terei menos de 128 elementos. Então, como isso funciona e como ele ajuda a suavizar os pontos de dados? Ou há alguma outra maneira que eu possa fazer o alisamento de dados solicitado? 15 de outubro às 6:30 migrou do stackoverflow 15 de outubro 12 às 14:51 Esta questão veio de nossa Site para programadores profissionais e entusiasta. Para um espectro, você provavelmente quer medir em conjunto (na dimensão do tempo) múltiplos espectros em vez de uma média de corrida ao longo do eixo de freqüência de um único espectro ndash endolith 16 de outubro 12 às 1:04 endolito, ambas são técnicas válidas. A média no domínio da frequência (às vezes chamado de Danielle Periodogram) é a mesma que a janela no domínio do tempo. A média de periodogramas múltiplos (quotspectraquot) é uma tentativa de imitar a média de conjunto necessária do verdadeiro Periodograma (isto é chamado de Periodograma Welch). Além disso, como uma questão de semântica, eu argumentaria que quotsmoothingquot é uma filtragem passiva não-causal. Veja a filtragem de Kalman contra o alisamento de Kalman, a filtragem de Wiener e o alisamento de Wiener, etc. Existe uma distinção não trivial e dependente da implementação. Ndash Bryan 12 de dezembro 12 às 19:18 O alisamento pode ser feito de várias maneiras, mas, em termos muito básicos e gerais, significa que você mesmo emitirá um sinal, misturando seus elementos com seus vizinhos. Você manuseia o sinal um pouco para se livrar do ruído. Por exemplo, uma técnica de suavização muito simples seria, para recalcular cada elemento de sinal f (t) para 0,8 do valor original, mais 0,1 de cada um dos seus vizinhos: Observe como os fatores de multiplicação, ou pesos, se somam a um. Então, se o sinal for bastante constante, o alisamento não o altera muito. Mas se o sinal continha uma mudança brusca e brusca, então a contribuição de seus vizinhos ajudará a esclarecer um pouco esse ruído. Os pesos que você usa nesta função de recálculo podem ser chamados de kernel. Uma função Gaussiana unidimensional ou qualquer outro kernel básico deve fazer no seu caso. Bom exemplo de um tipo particular de suavização: acima: sinal não aspirado Abaixo: sinal suavizado Exemplos de alguns kernels: Além da boa resposta do Junuxx, gostaria de soltar algumas notas. O alisamento está relacionado à filtragem (infelizmente, um artigo bastante vago da Wikipedia) - você deve escolher o mais suave com base em suas propriedades. Um dos meus favoritos é o filtro médio. Este é um exemplo de um filtro não-linear. Tem algumas propriedades interessantes, preserva bordas e é bastante robusto sob grande ruído. Se você tem um modelo, como seu sinal comporta um filtro de Kalman vale a pena olhar. Seu alisamento é, na verdade, uma estimativa bayesiana de máxima verossimilhança do sinal com base em observações. Respondeu 15 de outubro 12 às 11:07 1 por mencionar o filtro kalman ndash Diego 13 de dezembro 12 às 18:48 O suavização implica usar informações de amostras vizinhas para mudar a relação entre amostras vizinhas. Para vetores finitos, nas extremidades, não há informações vizinhas de um lado. Suas escolhas são: não limpe facilmente as extremidades, aceite um vetor suavizado resultante mais curto, compense dados e suavize com isso (depende da facilidade de precisão de quaisquer previsões fora das extremidades), ou talvez use diferentes kernels de suavização assimétricos nas extremidades (o que acaba Reduzindo o conteúdo da informação no sinal de qualquer maneira). Respondeu 15 de outubro 12 às 19:44 Outros já mencionaram como você suaviza, eu gostaria de mencionar por que o suavização funciona. Se você oversample adequadamente o seu sinal, ele irá variar relativamente pouco de uma amostra para a próxima (exemplos de pontos de tempo, pixels, etc.), e espera-se que tenha uma aparência geral suave. Em outras palavras, seu sinal contém poucas freqüências altas, ou seja, componentes de sinal que variam a uma taxa semelhante à sua taxa de amostragem. No entanto, as medidas são muitas vezes corrompidas pelo ruído. Em uma primeira aproximação, geralmente consideramos o ruído seguir uma distribuição gaussiana com zero médio e um certo desvio padrão que é simplesmente adicionado em cima do sinal. Para reduzir o ruído em nosso sinal, geralmente fazemos as quatro premissas seguintes: o ruído é aleatório, não está correlacionado entre as amostras, tem uma média de zero e o sinal está suficientemente superamplegado. Com estes pressupostos, podemos usar um filtro de média deslizante. Considere, por exemplo, três amostras consecutivas. Uma vez que o sinal está muito superamplegado, o sinal subjacente pode ser considerado como variável de forma linear, o que significa que a média do sinal nas três amostras seria igual ao sinal verdadeiro na amostra do meio. Em contraste, o ruído tem zero médio e não está correlacionado, o que significa que sua média deve tender para zero. Assim, podemos aplicar um filtro de média deslizante de três amostras, onde substituimos cada amostra pela média entre si e seus dois vizinhos adjacentes. Claro, quanto maior, fazemos a janela, mais o ruído irá atingir a zero, mas menor será a nossa suposição de linearidade do sinal verdadeiro. Assim, temos que fazer um trade-off. Uma maneira de tentar obter o melhor de ambos os mundos é usar uma média ponderada, onde damos amostras de pesos menores menores, de modo que nós produzimos efeitos de ruído médios em intervalos maiores, embora não pesemos sinal verdadeiro demais, onde ele se desvia da linearidade suposição. Como você deve colocar os pesos depende do ruído, do sinal e da eficiência computacional, e, claro, do trade-off entre livrar-se do ruído e cortar o sinal. Note-se que tem havido muito trabalho nos últimos anos para nos permitir relaxar alguns dos quatro pressupostos, por exemplo, criando esquemas de suavização com janelas de filtro variáveis ​​(difusão anisotrópica) ou esquemas que realmente não usam o Windows (Meios não locais). Respondeu em 27 de dezembro às 15: 10 Uma maneira simples (ad hoc) é apenas tomar uma média ponderada (ajustável por alfa) em cada ponto com seus vizinhos: ou alguma variação do mesmo. Sim, para ser mais sofisticado, Fourier pode transformar seus dados primeiro, depois cortar as altas freqüências. Algo como: isso corta as 20 freqüências mais altas. Tenha cuidado para cortá-los simetricamente, caso contrário, a transformada inversa não é mais real. Você precisa escolher cuidadosamente a freqüência de corte para o nível correto de suavização. Este é um tipo de filtragem muito simples (filtragem de caixa no domínio da frequência), para que você possa tentar atenuar as frequências de alta ordem, se a distorção for inaceitável. Respondeu 4 de outubro 09 às 9:16 FFT não é uma má idéia, mas provavelmente é exagerado aqui. As médias em execução ou em movimento dão resultados geralmente fracos e devem ser evitadas para qualquer coisa, além da lição de casa tardia (e ruído branco). Use a filtragem Savitzky-Golay (em Matlab sgolayfilt (.)). Isso lhe dará os melhores resultados para o que você procura - algum suavização local, mantendo a forma da curva.

No comments:

Post a Comment