Moving Average In Cuda


Ao calcular uma média móvel em execução, colocar a média no período de tempo médio faz sentido No exemplo anterior, calculamos a média dos primeiros 3 períodos de tempo e colocamos ao lado do período 3. Poderíamos ter colocado a média no meio do Intervalo de tempo de três períodos, isto é, ao lado do período 2. Isso funciona bem com períodos de tempo estranhos, mas não tão bons para períodos de tempo iguais. Então, onde colocamos a primeira média móvel quando M 4 Tecnicamente, a Média Móvel cairá em t 2,5, 3,5. Para evitar este problema, suavizamos as MAs usando M 2. Assim, suavizamos os valores suavizados Se nós medimos um número par de termos, precisamos suavizar os valores suavizados. A tabela a seguir mostra os resultados usando M 4.Para outra abordagem, você pode Trunca a janela da média móvel exponencial e, em seguida, computa seu sinal filtrado fazendo uma convolução entre o sinal e a exponencial janela. A convolução pode ser calculada usando a biblioteca FFT CUDA livre (cuFFT) porque, como você pode saber, a convolução pode ser expressa como a multiplicação pontual dos dois sinais no domínio fourier (Este é o nome apropriado do Teorema da Convolução, Que corre com uma complexidade de O (n log (n))). Este tipo de abordagem minimizará o código do kernel CUDA e executará muito rapidamente, mesmo em uma GeForce 570. Especialmente, se você puder fazer todos os seus cálculos em uma única precisão (flutuante). Respondeu 30 de abril 14 às 17:04 Eu proporia manipular a equação de diferença acima conforme indicado abaixo e depois usando primitivas de impulso CUDA. MANIPULAÇÃO DE EQUALIDADE DE DIFERENÇA - FORMA EXPLÍCITA DA EQUAÇÃO DE DIFERENÇA Por álgebra simples, você pode encontrar o seguinte: De acordo com isso, a forma explícita é a seguinte: CUDA THRUST IMPLEMENTATION Você pode implementar o formulário explícito acima pelas seguintes etapas: Inicializar uma sequência de entrada dinput para Alfa, exceto para dinput0. 1. Defina um vetor d1overbetatothen igual a 1, 1 beta, 1 beta2, 1 beta3. Multiplique o dinposto elementar por d1overbetatothen Execute um inclusivecan para obter a seqüência do yn betan Divida a seqüência acima por 1, 1 beta, 1 beta2, 1 beta3. A abordagem acima pode ser recomendada para sistemas Linear Time-Varying (LTV). Para os sistemas Linear Time-Invariant (LTI), a abordagem FFT mencionada por Paul pode ser recomendada. Estou fornecendo um exemplo dessa abordagem usando o CUDA Thrust e cuFFT na minha resposta ao filtro FIR na CUDA.

Comments